From 1f162e39b1a26aabe7bd6080479ce000774247e6 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 7 Dec 2013 20:42:15 -0500 Subject: expose Tmdb collection id in editor. --- .../Drawing/ImageProcessor.cs | 3 +- .../HttpServer/HttpListenerHost.cs | 4 -- .../MediaBrowser.Server.Implementations.csproj | 17 +++-- .../Persistence/SqliteChapterRepository.cs | 4 +- .../SqliteDisplayPreferencesRepository.cs | 5 +- .../Persistence/SqliteItemRepository.cs | 52 ++++++++------ .../Persistence/SqliteMediaStreamsRepository.cs | 4 +- .../Persistence/SqliteNotificationsRepository.cs | 4 +- .../Persistence/SqliteProviderInfoRepository.cs | 4 +- .../Persistence/SqliteShrinkMemoryTimer.cs | 84 ++++++++++++++++++++++ .../Persistence/SqliteUserDataRepository.cs | 4 +- .../Persistence/SqliteUserRepository.cs | 5 +- .../swagger-ui/index.html | 80 --------------------- 13 files changed, 151 insertions(+), 119 deletions(-) create mode 100644 MediaBrowser.Server.Implementations/Persistence/SqliteShrinkMemoryTimer.cs delete mode 100644 MediaBrowser.Server.Implementations/swagger-ui/index.html (limited to 'MediaBrowser.Server.Implementations') diff --git a/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs b/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs index ee10fb934a..27ce90787e 100644 --- a/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs +++ b/MediaBrowser.Server.Implementations/Drawing/ImageProcessor.cs @@ -74,7 +74,8 @@ namespace MediaBrowser.Server.Implementations.Drawing try { - sizeDictionary = jsonSerializer.DeserializeFromFile>(ImageSizeFile); + sizeDictionary = jsonSerializer.DeserializeFromFile>(ImageSizeFile) ?? + new Dictionary(); } catch (FileNotFoundException) { diff --git a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs index c50588f95f..29dce67476 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/HttpListenerHost.cs @@ -5,7 +5,6 @@ using MediaBrowser.Common.Net; using MediaBrowser.Controller.Net; using MediaBrowser.Model.Logging; using ServiceStack; -using ServiceStack.Configuration; using ServiceStack.Host; using ServiceStack.Host.Handlers; using ServiceStack.Host.HttpListener; @@ -58,9 +57,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer public HttpListenerHost(IApplicationHost applicationHost, ILogManager logManager, string serviceName, string handlerPath, string defaultRedirectPath, params Assembly[] assembliesWithServices) : base(serviceName, assembliesWithServices) { - // https://github.com/ServiceStack/ServiceStack/blob/master/tests/ServiceStack.WebHost.IntegrationTests/Web.config#L4 - Licensing.RegisterLicense("1001-e1JlZjoxMDAxLE5hbWU6VGVzdCBCdXNpbmVzcyxUeXBlOkJ1c2luZXNzLEhhc2g6UHVNTVRPclhvT2ZIbjQ5MG5LZE1mUTd5RUMzQnBucTFEbTE3TDczVEF4QUNMT1FhNXJMOWkzVjFGL2ZkVTE3Q2pDNENqTkQyUktRWmhvUVBhYTBiekJGUUZ3ZE5aZHFDYm9hL3lydGlwUHI5K1JsaTBYbzNsUC85cjVJNHE5QVhldDN6QkE4aTlvdldrdTgyTk1relY2eis2dFFqTThYN2lmc0JveHgycFdjPSxFeHBpcnk6MjAxMy0wMS0wMX0="); - DefaultRedirectPath = defaultRedirectPath; ServerName = serviceName; HandlerPath = handlerPath; diff --git a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj index f22a964550..39966f0d7a 100644 --- a/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj +++ b/MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj @@ -37,18 +37,23 @@ ..\packages\Alchemy.2.2.1\lib\net40\Alchemy.dll - + False ..\ThirdParty\ServiceStack\ServiceStack.dll - + + False ..\ThirdParty\ServiceStack\ServiceStack.Client.dll - + + False + ..\ThirdParty\ServiceStack\ServiceStack.Common.dll + + False ..\ThirdParty\ServiceStack\ServiceStack.Interfaces.dll - + False ..\ThirdParty\ServiceStack\ServiceStack.Text.dll @@ -143,6 +148,7 @@ + @@ -237,9 +243,6 @@ - - PreserveNewest - diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteChapterRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteChapterRepository.cs index 9121ae87b0..075ef42398 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteChapterRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteChapterRepository.cs @@ -44,7 +44,9 @@ namespace MediaBrowser.Server.Implementations.Persistence "create index if not exists idx_chapters on chapters(ItemId, ChapterIndex)", //pragmas - "pragma temp_store = memory" + "pragma temp_store = memory", + + "pragma shrink_memory" }; _connection.RunQueries(queries, _logger); diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs index 09f438aef9..9f6ec0f244 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs @@ -86,8 +86,11 @@ namespace MediaBrowser.Server.Implementations.Persistence "create table if not exists userdisplaypreferences (id GUID, userId GUID, client text, data BLOB)", "create unique index if not exists userdisplaypreferencesindex on userdisplaypreferences (id, userId, client)", + //pragmas - "pragma temp_store = memory" + "pragma temp_store = memory", + + "pragma shrink_memory" }; _connection.RunQueries(queries, _logger); diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs index 893d6ea62c..200898a623 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs @@ -124,18 +124,24 @@ namespace MediaBrowser.Server.Implementations.Persistence "create index if not exists idx_ChildrenIds on ChildrenIds(ParentId,ItemId)", //pragmas - "pragma temp_store = memory" + "pragma temp_store = memory", + + "pragma shrink_memory" }; _connection.RunQueries(queries, _logger); PrepareStatements(); - + _mediaStreamsRepository.Initialize(); _providerInfoRepository.Initialize(); _chapterRepository.Initialize(); + + _shrinkMemoryTimer = new SqliteShrinkMemoryTimer(_connection, _writeLock, _logger); } + private SqliteShrinkMemoryTimer _shrinkMemoryTimer; + /// /// The _write lock /// @@ -402,6 +408,12 @@ namespace MediaBrowser.Server.Implementations.Persistence { lock (_disposeLock) { + if (_shrinkMemoryTimer != null) + { + _shrinkMemoryTimer.Dispose(); + _shrinkMemoryTimer = null; + } + if (_connection != null) { if (_connection.IsOpen()) @@ -412,30 +424,30 @@ namespace MediaBrowser.Server.Implementations.Persistence _connection.Dispose(); _connection = null; } + + if (_chapterRepository != null) + { + _chapterRepository.Dispose(); + _chapterRepository = null; + } + + if (_mediaStreamsRepository != null) + { + _mediaStreamsRepository.Dispose(); + _mediaStreamsRepository = null; + } + + if (_providerInfoRepository != null) + { + _providerInfoRepository.Dispose(); + _providerInfoRepository = null; + } } } catch (Exception ex) { _logger.ErrorException("Error disposing database", ex); } - - if (_chapterRepository != null) - { - _chapterRepository.Dispose(); - _chapterRepository = null; - } - - if (_mediaStreamsRepository != null) - { - _mediaStreamsRepository.Dispose(); - _mediaStreamsRepository = null; - } - - if (_providerInfoRepository != null) - { - _providerInfoRepository.Dispose(); - _providerInfoRepository = null; - } } } diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteMediaStreamsRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteMediaStreamsRepository.cs index ba189396a0..b898398d86 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteMediaStreamsRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteMediaStreamsRepository.cs @@ -43,7 +43,9 @@ namespace MediaBrowser.Server.Implementations.Persistence "create index if not exists idx_mediastreams on mediastreams(ItemId, StreamIndex)", //pragmas - "pragma temp_store = memory" + "pragma temp_store = memory", + + "pragma shrink_memory" }; _connection.RunQueries(queries, _logger); diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteNotificationsRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteNotificationsRepository.cs index c5f391765c..0f9b4295ed 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteNotificationsRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteNotificationsRepository.cs @@ -45,7 +45,9 @@ namespace MediaBrowser.Server.Implementations.Persistence "create index if not exists idx_Notifications on Notifications(Id, UserId)", //pragmas - "pragma temp_store = memory" + "pragma temp_store = memory", + + "pragma shrink_memory" }; _connection.RunQueries(queries, _logger); diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs index 8972beb058..5d836b090d 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs @@ -42,7 +42,9 @@ namespace MediaBrowser.Server.Implementations.Persistence "create index if not exists idx_providerinfos on providerinfos(ItemId, ProviderId)", //pragmas - "pragma temp_store = memory" + "pragma temp_store = memory", + + "pragma shrink_memory" }; _connection.RunQueries(queries, _logger); diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteShrinkMemoryTimer.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteShrinkMemoryTimer.cs new file mode 100644 index 0000000000..01784d5405 --- /dev/null +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteShrinkMemoryTimer.cs @@ -0,0 +1,84 @@ +using MediaBrowser.Model.Logging; +using System; +using System.Data; +using System.Threading; + +namespace MediaBrowser.Server.Implementations.Persistence +{ + class SqliteShrinkMemoryTimer : IDisposable + { + private Timer _shrinkMemoryTimer; + + private readonly SemaphoreSlim _writeLock; + private readonly ILogger _logger; + private readonly IDbConnection _connection; + + public SqliteShrinkMemoryTimer(IDbConnection connection, SemaphoreSlim writeLock, ILogger logger) + { + _connection = connection; + _writeLock = writeLock; + _logger = logger; + + _shrinkMemoryTimer = new Timer(TimerCallback, null, TimeSpan.FromMinutes(30), TimeSpan.FromMinutes(30)); + } + + private async void TimerCallback(object state) + { + await _writeLock.WaitAsync(CancellationToken.None).ConfigureAwait(false); + + IDbTransaction transaction = null; + + try + { + transaction = _connection.BeginTransaction(); + + using (var cmd = _connection.CreateCommand()) + { + cmd.Transaction = transaction; + cmd.CommandText = "pragma shrink_memory"; + cmd.ExecuteNonQuery(); + } + + transaction.Commit(); + } + catch (OperationCanceledException) + { + if (transaction != null) + { + transaction.Rollback(); + } + + throw; + } + catch (Exception e) + { + _logger.ErrorException("Failed to save items:", e); + + if (transaction != null) + { + transaction.Rollback(); + } + + throw; + } + finally + { + if (transaction != null) + { + transaction.Dispose(); + } + + _writeLock.Release(); + } + } + + public void Dispose() + { + if (_shrinkMemoryTimer != null) + { + _shrinkMemoryTimer.Dispose(); + _shrinkMemoryTimer = null; + } + } + } +} diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteUserDataRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteUserDataRepository.cs index fa195859b7..d3f9100b18 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteUserDataRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteUserDataRepository.cs @@ -72,7 +72,9 @@ namespace MediaBrowser.Server.Implementations.Persistence "create unique index if not exists userdataindex on userdata (key, userId)", //pragmas - "pragma temp_store = memory" + "pragma temp_store = memory", + + "pragma shrink_memory" }; _connection.RunQueries(queries, _logger); diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs index 222cc94229..d97a55ae64 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs @@ -77,8 +77,11 @@ namespace MediaBrowser.Server.Implementations.Persistence "create table if not exists users (guid GUID primary key, data BLOB)", "create index if not exists idx_users on users(guid)", "create table if not exists schema_version (table_name primary key, version)", + //pragmas - "pragma temp_store = memory" + "pragma temp_store = memory", + + "pragma shrink_memory" }; _connection.RunQueries(queries, _logger); diff --git a/MediaBrowser.Server.Implementations/swagger-ui/index.html b/MediaBrowser.Server.Implementations/swagger-ui/index.html deleted file mode 100644 index 49f983a723..0000000000 --- a/MediaBrowser.Server.Implementations/swagger-ui/index.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - Swagger UI - - - - - - - - - - - - - - - - - - - - -
-   -
- -
- -
- - - - -- cgit v1.2.3