diff options
| author | Eric Reed <ebr@mediabrowser3.com> | 2013-04-06 12:10:52 -0400 |
|---|---|---|
| committer | Eric Reed <ebr@mediabrowser3.com> | 2013-04-06 12:10:52 -0400 |
| commit | 2a9e59e6232b7e04cf984c80547beaf130562c0b (patch) | |
| tree | f5bf479c1bd496e25645412706401d898f928197 /MediaBrowser.Server.Implementations | |
| parent | d03081cec3c593a725fa3ab5852daabf8b6b2ccf (diff) | |
| parent | 51b71afd5cfcaa6db606073a24c4c891cdf46cb3 (diff) | |
Merge branch 'master' of https://github.com/MediaBrowser/MediaBrowser
Diffstat (limited to 'MediaBrowser.Server.Implementations')
4 files changed, 83 insertions, 25 deletions
diff --git a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs index dced1ce28..c34f8a1ba 100644 --- a/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs +++ b/MediaBrowser.Server.Implementations/Providers/ProviderManager.cs @@ -104,7 +104,7 @@ namespace MediaBrowser.Server.Implementations.Providers /// <param name="providers">The providers.</param> public void AddMetadataProviders(IEnumerable<BaseMetadataProvider> providers) { - MetadataProviders = providers.ToArray(); + MetadataProviders = providers.OrderBy(e => e.Priority).ToArray(); } /// <summary> diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs index 376cf5065..e722ac3dc 100644 --- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs +++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteRepository.cs @@ -30,7 +30,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite /// <summary> /// The flush interval /// </summary> - private const int FlushInterval = 5000; + private const int FlushInterval = 2000; /// <summary> /// The flush timer diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs index 2c8d7f437..b2e11d06f 100644 --- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs +++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs @@ -35,6 +35,18 @@ namespace MediaBrowser.Server.Implementations.Sqlite } /// <summary> + /// Gets a value indicating whether [enable delayed commands]. + /// </summary> + /// <value><c>true</c> if [enable delayed commands]; otherwise, <c>false</c>.</value> + protected override bool EnableDelayedCommands + { + get + { + return false; + } + } + + /// <summary> /// The _protobuf serializer /// </summary> private readonly IProtobufSerializer _protobufSerializer; @@ -106,7 +118,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite /// or /// userDataId /// </exception> - public Task SaveUserData(Guid userId, Guid userDataId, UserItemData userData, CancellationToken cancellationToken) + public async Task SaveUserData(Guid userId, Guid userDataId, UserItemData userData, CancellationToken cancellationToken) { if (userData == null) { @@ -127,19 +139,36 @@ namespace MediaBrowser.Server.Implementations.Sqlite cancellationToken.ThrowIfCancellationRequested(); - return Task.Run(() => + var serialized = _protobufSerializer.SerializeToBytes(userData); + + cancellationToken.ThrowIfCancellationRequested(); + + var cmd = connection.CreateCommand(); + cmd.CommandText = "replace into userdata (id, userId, data) values (@1, @2, @3)"; + cmd.AddParam("@1", userDataId); + cmd.AddParam("@2", userId); + cmd.AddParam("@3", serialized); + + using (var tran = connection.BeginTransaction()) { - var serialized = _protobufSerializer.SerializeToBytes(userData); + try + { + cmd.Transaction = tran; - cancellationToken.ThrowIfCancellationRequested(); + await cmd.ExecuteNonQueryAsync(cancellationToken); - var cmd = connection.CreateCommand(); - cmd.CommandText = "replace into userdata (id, userId, data) values (@1, @2, @3)"; - cmd.AddParam("@1", userDataId); - cmd.AddParam("@2", userId); - cmd.AddParam("@3", serialized); - QueueCommand(cmd); - }); + tran.Commit(); + } + catch (OperationCanceledException) + { + tran.Rollback(); + } + catch (Exception e) + { + Logger.ErrorException("Failed to commit transaction.", e); + tran.Rollback(); + } + } } /// <summary> diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs index 812c98789..f55b13d19 100644 --- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs +++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserRepository.cs @@ -46,6 +46,18 @@ namespace MediaBrowser.Server.Implementations.Sqlite private readonly IApplicationPaths _appPaths; /// <summary> + /// Gets a value indicating whether [enable delayed commands]. + /// </summary> + /// <value><c>true</c> if [enable delayed commands]; otherwise, <c>false</c>.</value> + protected override bool EnableDelayedCommands + { + get + { + return false; + } + } + + /// <summary> /// Initializes a new instance of the <see cref="SQLiteUserDataRepository" /> class. /// </summary> /// <param name="appPaths">The app paths.</param> @@ -97,7 +109,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite /// <param name="cancellationToken">The cancellation token.</param> /// <returns>Task.</returns> /// <exception cref="System.ArgumentNullException">user</exception> - public Task SaveUser(User user, CancellationToken cancellationToken) + public async Task SaveUser(User user, CancellationToken cancellationToken) { if (user == null) { @@ -109,20 +121,37 @@ namespace MediaBrowser.Server.Implementations.Sqlite throw new ArgumentNullException("cancellationToken"); } - return Task.Run(() => - { - cancellationToken.ThrowIfCancellationRequested(); + cancellationToken.ThrowIfCancellationRequested(); - var serialized = _jsonSerializer.SerializeToBytes(user); + var serialized = _jsonSerializer.SerializeToBytes(user); - cancellationToken.ThrowIfCancellationRequested(); + cancellationToken.ThrowIfCancellationRequested(); - var cmd = connection.CreateCommand(); - cmd.CommandText = "replace into users (guid, data) values (@1, @2)"; - cmd.AddParam("@1", user.Id); - cmd.AddParam("@2", serialized); - QueueCommand(cmd); - }); + var cmd = connection.CreateCommand(); + cmd.CommandText = "replace into users (guid, data) values (@1, @2)"; + cmd.AddParam("@1", user.Id); + cmd.AddParam("@2", serialized); + + using (var tran = connection.BeginTransaction()) + { + try + { + cmd.Transaction = tran; + + await cmd.ExecuteNonQueryAsync(cancellationToken); + + tran.Commit(); + } + catch (OperationCanceledException) + { + tran.Rollback(); + } + catch (Exception e) + { + Logger.ErrorException("Failed to commit transaction.", e); + tran.Rollback(); + } + } } /// <summary> |
