revert clean task changes

This commit is contained in:
Luke Pulverenti 2016-07-07 11:55:39 -04:00
parent 80688496e8
commit f618650fbd

View File

@ -142,77 +142,52 @@ namespace MediaBrowser.Server.Implementations.Persistence
} }
} }
private Task UpdateToLatestSchema(CancellationToken cancellationToken, IProgress<double> progress) private async Task UpdateToLatestSchema(CancellationToken cancellationToken, IProgress<double> progress)
{ {
return UpdateToLatestSchema(0, 0, null, cancellationToken, progress); var itemIds = _libraryManager.GetItemIds(new InternalItemsQuery
}
private async Task UpdateToLatestSchema(int queryStartIndex, int progressStartIndex, int? totalRecordCount, CancellationToken cancellationToken, IProgress<double> progress)
{
IEnumerable<BaseItem> items;
int numItemsToSave;
var pageSize = 1000;
if (totalRecordCount.HasValue)
{ {
var list = _libraryManager.GetItemList(new InternalItemsQuery IsCurrentSchema = false,
{ ExcludeItemTypes = new[] { typeof(LiveTvProgram).Name }
IsCurrentSchema = false, });
ExcludeItemTypes = new[] { typeof(LiveTvProgram).Name },
StartIndex = queryStartIndex,
Limit = pageSize
}).ToList(); var numComplete = 0;
var numItems = itemIds.Count;
items = list;
numItemsToSave = list.Count;
}
else
{
var itemsResult = _libraryManager.GetItemsResult(new InternalItemsQuery
{
IsCurrentSchema = false,
ExcludeItemTypes = new[] { typeof(LiveTvProgram).Name },
StartIndex = queryStartIndex,
Limit = pageSize
});
totalRecordCount = itemsResult.TotalRecordCount;
items = itemsResult.Items;
numItemsToSave = itemsResult.Items.Length;
}
var numItems = totalRecordCount.Value;
_logger.Debug("Upgrading schema for {0} items", numItems); _logger.Debug("Upgrading schema for {0} items", numItems);
if (numItemsToSave > 0) foreach (var itemId in itemIds)
{ {
try cancellationToken.ThrowIfCancellationRequested();
if (itemId != Guid.Empty)
{ {
await _itemRepo.SaveItems(items, cancellationToken).ConfigureAwait(false); // Somehow some invalid data got into the db. It probably predates the boundary checking
} var item = _libraryManager.GetItemById(itemId);
catch (OperationCanceledException)
{ if (item != null)
throw; {
} try
catch (Exception ex) {
{ await _itemRepo.SaveItem(item, cancellationToken).ConfigureAwait(false);
_logger.ErrorException("Error saving item", ex); }
catch (OperationCanceledException)
{
throw;
}
catch (Exception ex)
{
_logger.ErrorException("Error saving item", ex);
}
}
} }
progressStartIndex += pageSize; numComplete++;
double percent = progressStartIndex; double percent = numComplete;
percent /= numItems; percent /= numItems;
progress.Report(percent * 100); progress.Report(percent * 100);
}
var newStartIndex = queryStartIndex + (pageSize - numItemsToSave); progress.Report(100);
await UpdateToLatestSchema(newStartIndex, progressStartIndex, totalRecordCount, cancellationToken, progress).ConfigureAwait(false);
}
else
{
progress.Report(100);
}
} }
private async Task CleanDeadItems(CancellationToken cancellationToken, IProgress<double> progress) private async Task CleanDeadItems(CancellationToken cancellationToken, IProgress<double> progress)