aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Api/StartupWizardService.cs2
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs91
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs2
3 files changed, 60 insertions, 35 deletions
diff --git a/MediaBrowser.Api/StartupWizardService.cs b/MediaBrowser.Api/StartupWizardService.cs
index a59cc6909..87562b126 100644
--- a/MediaBrowser.Api/StartupWizardService.cs
+++ b/MediaBrowser.Api/StartupWizardService.cs
@@ -117,7 +117,7 @@ namespace MediaBrowser.Api
config.EnableStandaloneMusicKeys = true;
config.EnableCaseSensitiveItemIds = true;
//config.EnableFolderView = true;
- config.SchemaVersion = 101;
+ config.SchemaVersion = 107;
}
public void Post(UpdateStartupConfiguration request)
diff --git a/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs b/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs
index b11a3e496..4235f6073 100644
--- a/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/CleanDatabaseScheduledTask.cs
@@ -142,52 +142,77 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
}
- private async Task UpdateToLatestSchema(CancellationToken cancellationToken, IProgress<double> progress)
+ private Task UpdateToLatestSchema(CancellationToken cancellationToken, IProgress<double> progress)
{
- var itemIds = _libraryManager.GetItemIds(new InternalItemsQuery
+ return UpdateToLatestSchema(0, 0, null, cancellationToken, progress);
+ }
+
+ private async Task UpdateToLatestSchema(int queryStartIndex, int progressStartIndex, int? totalRecordCount, CancellationToken cancellationToken, IProgress<double> progress)
+ {
+ IEnumerable<BaseItem> items;
+ int numItemsToSave;
+ var pageSize = 2000;
+
+ if (totalRecordCount.HasValue)
{
- IsCurrentSchema = false,
- ExcludeItemTypes = new[] { typeof(LiveTvProgram).Name }
- });
+ var list = _libraryManager.GetItemList(new InternalItemsQuery
+ {
+ IsCurrentSchema = false,
+ ExcludeItemTypes = new[] { typeof(LiveTvProgram).Name },
+ StartIndex = queryStartIndex,
+ Limit = pageSize
- var numComplete = 0;
- var numItems = itemIds.Count;
+ }).ToList();
+
+ 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);
- foreach (var itemId in itemIds)
+ if (numItemsToSave > 0)
{
- cancellationToken.ThrowIfCancellationRequested();
-
- if (itemId != Guid.Empty)
+ try
{
- // Somehow some invalid data got into the db. It probably predates the boundary checking
- var item = _libraryManager.GetItemById(itemId);
-
- if (item != null)
- {
- try
- {
- await _itemRepo.SaveItem(item, cancellationToken).ConfigureAwait(false);
- }
- catch (OperationCanceledException)
- {
- throw;
- }
- catch (Exception ex)
- {
- _logger.ErrorException("Error saving item", ex);
- }
- }
+ await _itemRepo.SaveItems(items, cancellationToken).ConfigureAwait(false);
+ }
+ catch (OperationCanceledException)
+ {
+ throw;
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error saving item", ex);
}
- numComplete++;
- double percent = numComplete;
+ progressStartIndex += pageSize;
+ double percent = progressStartIndex;
percent /= numItems;
progress.Report(percent * 100);
- }
- progress.Report(100);
+ var newStartIndex = queryStartIndex + (pageSize - numItemsToSave);
+ await UpdateToLatestSchema(newStartIndex, progressStartIndex, totalRecordCount, cancellationToken, progress).ConfigureAwait(false);
+ }
+ else
+ {
+ progress.Report(100);
+ }
}
private async Task CleanDeadItems(CancellationToken cancellationToken, IProgress<double> progress)
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index 4a70ddc2e..31388661b 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -95,7 +95,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
private IDbCommand _updateInheritedRatingCommand;
private IDbCommand _updateInheritedTagsCommand;
- public const int LatestSchemaVersion = 101;
+ public const int LatestSchemaVersion = 107;
/// <summary>
/// Initializes a new instance of the <see cref="SqliteItemRepository"/> class.