aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Persistence
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2013-12-07 20:42:15 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2013-12-07 20:42:15 -0500
commit1f162e39b1a26aabe7bd6080479ce000774247e6 (patch)
tree964abded95f33e4a912691cb87cebcfb6dabbf2f /MediaBrowser.Server.Implementations/Persistence
parent07e5b74f1344d2c80ef0d27fb6b2097459db4f4e (diff)
expose Tmdb collection id in editor.
Diffstat (limited to 'MediaBrowser.Server.Implementations/Persistence')
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteChapterRepository.cs4
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteDisplayPreferencesRepository.cs5
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs52
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteMediaStreamsRepository.cs4
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteNotificationsRepository.cs4
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs4
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteShrinkMemoryTimer.cs84
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteUserDataRepository.cs4
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs5
9 files changed, 139 insertions, 27 deletions
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteChapterRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteChapterRepository.cs
index 9121ae87b..075ef4239 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 09f438aef..9f6ec0f24 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 893d6ea62..200898a62 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;
+
/// <summary>
/// The _write lock
/// </summary>
@@ -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 ba189396a..b898398d8 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 c5f391765..0f9b4295e 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 8972beb05..5d836b090 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 000000000..01784d540
--- /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 fa195859b..d3f9100b1 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 222cc9422..d97a55ae6 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);