update caching headers

This commit is contained in:
Luke Pulverenti
2016-11-27 14:36:56 -05:00
parent b485c4ca51
commit 26ef23d628
12 changed files with 139 additions and 67 deletions

View File

@@ -88,11 +88,14 @@ namespace Emby.Server.Implementations.Data
var queries = new List<string>
{
"PRAGMA temp_store = memory",
//"PRAGMA journal_mode=WAL"
//"PRAGMA cache size=-10000"
};
if (EnableTempStoreMemory)
{
queries.Add("PRAGMA temp_store = memory");
}
//var cacheSize = CacheSize;
//if (cacheSize.HasValue)
//{
@@ -116,7 +119,7 @@ namespace Emby.Server.Implementations.Data
db.ExecuteAll(string.Join(";", queries.ToArray()));
}
}
else
else if (queries.Count > 0)
{
db.ExecuteAll(string.Join(";", queries.ToArray()));
}
@@ -124,6 +127,14 @@ namespace Emby.Server.Implementations.Data
return db;
}
protected virtual bool EnableTempStoreMemory
{
get
{
return false;
}
}
protected virtual int? CacheSize
{
get

View File

@@ -63,8 +63,8 @@ namespace Emby.Server.Implementations.Data
string[] queries = {
"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)"
"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)"
};
connection.RunQueries(queries);
@@ -107,10 +107,10 @@ namespace Emby.Server.Implementations.Data
private void SaveDisplayPreferences(DisplayPreferences displayPreferences, Guid userId, string client, IDatabaseConnection connection)
{
using (var statement = connection.PrepareStatement("replace into userdisplaypreferences (id, userid, client, data) values (@id, @userid, @client, @data)"))
{
var serialized = _jsonSerializer.SerializeToBytes(displayPreferences, _memoryStreamProvider);
var serialized = _jsonSerializer.SerializeToBytes(displayPreferences, _memoryStreamProvider);
using (var statement = connection.PrepareStatement("replace into userdisplaypreferences (id, userid, client, data) values (@id, @userId, @client, @data)"))
{
statement.TryBind("@id", displayPreferences.Id.ToGuidParamValue());
statement.TryBind("@userId", userId.ToGuidParamValue());
statement.TryBind("@client", client);

View File

@@ -30,6 +30,7 @@ using MediaBrowser.Server.Implementations.Playlists;
using MediaBrowser.Model.Reflection;
using SQLitePCL.pretty;
using MediaBrowser.Model.System;
using MediaBrowser.Model.Threading;
namespace Emby.Server.Implementations.Data
{
@@ -68,11 +69,13 @@ namespace Emby.Server.Implementations.Data
private readonly IMemoryStreamFactory _memoryStreamProvider;
private readonly IFileSystem _fileSystem;
private readonly IEnvironmentInfo _environmentInfo;
private readonly ITimerFactory _timerFactory;
private ITimer _shrinkMemoryTimer;
/// <summary>
/// Initializes a new instance of the <see cref="SqliteItemRepository"/> class.
/// </summary>
public SqliteItemRepository(IServerConfigurationManager config, IJsonSerializer jsonSerializer, ILogger logger, IMemoryStreamFactory memoryStreamProvider, IAssemblyInfo assemblyInfo, IFileSystem fileSystem, IEnvironmentInfo environmentInfo)
public SqliteItemRepository(IServerConfigurationManager config, IJsonSerializer jsonSerializer, ILogger logger, IMemoryStreamFactory memoryStreamProvider, IAssemblyInfo assemblyInfo, IFileSystem fileSystem, IEnvironmentInfo environmentInfo, ITimerFactory timerFactory)
: base(logger)
{
if (config == null)
@@ -89,6 +92,7 @@ namespace Emby.Server.Implementations.Data
_memoryStreamProvider = memoryStreamProvider;
_fileSystem = fileSystem;
_environmentInfo = environmentInfo;
_timerFactory = timerFactory;
_typeMapper = new TypeMapper(assemblyInfo);
_criticReviewsPath = Path.Combine(_config.ApplicationPaths.DataPath, "critic-reviews");
@@ -119,6 +123,14 @@ namespace Emby.Server.Implementations.Data
}
}
protected override bool EnableTempStoreMemory
{
get
{
return true;
}
}
private SQLiteDatabaseConnection _backgroundConnection;
protected override void CloseConnection()
{
@@ -129,6 +141,12 @@ namespace Emby.Server.Implementations.Data
_backgroundConnection.Dispose();
_backgroundConnection = null;
}
if (_shrinkMemoryTimer != null)
{
_shrinkMemoryTimer.Dispose();
_shrinkMemoryTimer = null;
}
}
/// <summary>
@@ -364,13 +382,35 @@ namespace Emby.Server.Implementations.Data
connection.RunQueries(postQueries);
//SqliteExtensions.Attach(_connection, Path.Combine(_config.ApplicationPaths.DataPath, "userdata_v2.db"), "UserDataDb");
//await Vacuum(_connection).ConfigureAwait(false);
}
userDataRepo.Initialize(WriteLock);
_backgroundConnection = CreateConnection(true);
_shrinkMemoryTimer = _timerFactory.Create(OnShrinkMemoryTimerCallback, null, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(30));
}
private void OnShrinkMemoryTimerCallback(object state)
{
try
{
using (WriteLock.Write())
{
using (var connection = CreateConnection())
{
connection.RunQueries(new string[]
{
"pragma shrink_memory"
});
}
}
}
catch (Exception ex)
{
Logger.ErrorException("Error running shrink memory", ex);
}
}
private readonly string[] _retriveItemColumns =
@@ -666,7 +706,7 @@ namespace Emby.Server.Implementations.Data
{
var requiresReset = false;
var statements = db.PrepareAll(string.Join(";", new string[]
var statements = db.PrepareAll(string.Join(";", new string[]
{
GetSaveItemCommandText(),
"delete from AncestorIds where ItemId=@ItemId",

View File

@@ -84,6 +84,14 @@ namespace Emby.Server.Implementations.Data
}
}
protected override bool EnableTempStoreMemory
{
get
{
return true;
}
}
private void ImportUserDataIfNeeded(IDatabaseConnection connection)
{
if (!_fileSystem.FileExists(_importFile))

View File

@@ -735,7 +735,7 @@ namespace Emby.Server.Implementations.HttpServer
/// <returns><c>true</c> if [is not modified] [the specified cache key]; otherwise, <c>false</c>.</returns>
private bool IsNotModified(IRequest requestContext, Guid? cacheKey, DateTime? lastDateModified, TimeSpan? cacheDuration)
{
var isNotModified = true;
//var isNotModified = true;
var ifModifiedSinceHeader = requestContext.Headers.Get("If-Modified-Since");
@@ -745,18 +745,23 @@ namespace Emby.Server.Implementations.HttpServer
if (DateTime.TryParse(ifModifiedSinceHeader, out ifModifiedSince))
{
isNotModified = IsNotModified(ifModifiedSince.ToUniversalTime(), cacheDuration, lastDateModified);
if (IsNotModified(ifModifiedSince.ToUniversalTime(), cacheDuration, lastDateModified))
{
return true;
}
}
}
var ifNoneMatchHeader = requestContext.Headers.Get("If-None-Match");
// Validate If-None-Match
if (isNotModified && (cacheKey.HasValue || !string.IsNullOrEmpty(ifNoneMatchHeader)))
if ((cacheKey.HasValue || !string.IsNullOrEmpty(ifNoneMatchHeader)))
{
Guid ifNoneMatch;
if (Guid.TryParse(ifNoneMatchHeader ?? string.Empty, out ifNoneMatch))
ifNoneMatchHeader = (ifNoneMatchHeader ?? string.Empty).Trim('\"');
if (Guid.TryParse(ifNoneMatchHeader, out ifNoneMatch))
{
if (cacheKey.HasValue && cacheKey.Value == ifNoneMatch)
{

View File

@@ -83,6 +83,14 @@ namespace Emby.Server.Implementations.Sync
}
}
protected override bool EnableTempStoreMemory
{
get
{
return true;
}
}
private const string BaseJobSelectText = "select Id, TargetId, Name, Profile, Quality, Bitrate, Status, Progress, UserId, ItemIds, Category, ParentId, UnwatchedOnly, ItemLimit, SyncNewContent, DateCreated, DateLastModified, ItemCount from SyncJobs";
private const string BaseJobItemSelectText = "select Id, ItemId, ItemName, MediaSourceId, JobId, TemporaryPath, OutputPath, Status, TargetId, DateCreated, Progress, AdditionalFiles, MediaSource, IsMarkedForRemoval, JobItemIndex, ItemDateModifiedTicks from SyncJobItems";