mirror of
https://github.com/jellyfin/jellyfin.git
synced 2025-05-31 20:24:21 -04:00
Backport pull request #11823 from jellyfin/release-10.9.z
Add Env Var to disable second level cache Original-merge: 95c7d997c13cfcd4038174ba00525d5628475fb7 Merged-by: joshuaboniface <joshua@boniface.me> Backported-by: Joshua M. Boniface <joshua@boniface.me>
This commit is contained in:
parent
c4b7c91f3a
commit
9563e4f85e
@ -19,7 +19,8 @@ namespace Emby.Server.Implementations
|
|||||||
{ FfmpegAnalyzeDurationKey, "200M" },
|
{ FfmpegAnalyzeDurationKey, "200M" },
|
||||||
{ PlaylistsAllowDuplicatesKey, bool.FalseString },
|
{ PlaylistsAllowDuplicatesKey, bool.FalseString },
|
||||||
{ BindToUnixSocketKey, bool.FalseString },
|
{ BindToUnixSocketKey, bool.FalseString },
|
||||||
{ SqliteCacheSizeKey, "20000" }
|
{ SqliteCacheSizeKey, "20000" },
|
||||||
|
{ SqliteDisableSecondLevelCacheKey, bool.FalseString }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,21 +16,28 @@ public static class ServiceCollectionExtensions
|
|||||||
/// Adds the <see cref="IDbContextFactory{TContext}"/> interface to the service collection with second level caching enabled.
|
/// Adds the <see cref="IDbContextFactory{TContext}"/> interface to the service collection with second level caching enabled.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="serviceCollection">An instance of the <see cref="IServiceCollection"/> interface.</param>
|
/// <param name="serviceCollection">An instance of the <see cref="IServiceCollection"/> interface.</param>
|
||||||
|
/// <param name="disableSecondLevelCache">Whether second level cache disabled..</param>
|
||||||
/// <returns>The updated service collection.</returns>
|
/// <returns>The updated service collection.</returns>
|
||||||
public static IServiceCollection AddJellyfinDbContext(this IServiceCollection serviceCollection)
|
public static IServiceCollection AddJellyfinDbContext(this IServiceCollection serviceCollection, bool disableSecondLevelCache)
|
||||||
{
|
{
|
||||||
serviceCollection.AddEFSecondLevelCache(options =>
|
if (!disableSecondLevelCache)
|
||||||
options.UseMemoryCacheProvider()
|
{
|
||||||
.CacheAllQueries(CacheExpirationMode.Sliding, TimeSpan.FromMinutes(10))
|
serviceCollection.AddEFSecondLevelCache(options =>
|
||||||
.UseCacheKeyPrefix("EF_")
|
options.UseMemoryCacheProvider()
|
||||||
// Don't cache null values. Remove this optional setting if it's not necessary.
|
.CacheAllQueries(CacheExpirationMode.Sliding, TimeSpan.FromMinutes(10))
|
||||||
.SkipCachingResults(result => result.Value is null or EFTableRows { RowsCount: 0 }));
|
.UseCacheKeyPrefix("EF_")
|
||||||
|
// Don't cache null values. Remove this optional setting if it's not necessary.
|
||||||
|
.SkipCachingResults(result => result.Value is null or EFTableRows { RowsCount: 0 }));
|
||||||
|
}
|
||||||
|
|
||||||
serviceCollection.AddPooledDbContextFactory<JellyfinDbContext>((serviceProvider, opt) =>
|
serviceCollection.AddPooledDbContextFactory<JellyfinDbContext>((serviceProvider, opt) =>
|
||||||
{
|
{
|
||||||
var applicationPaths = serviceProvider.GetRequiredService<IApplicationPaths>();
|
var applicationPaths = serviceProvider.GetRequiredService<IApplicationPaths>();
|
||||||
opt.UseSqlite($"Filename={Path.Combine(applicationPaths.DataPath, "jellyfin.db")}")
|
var dbOpt = opt.UseSqlite($"Filename={Path.Combine(applicationPaths.DataPath, "jellyfin.db")}");
|
||||||
.AddInterceptors(serviceProvider.GetRequiredService<SecondLevelCacheInterceptor>());
|
if (!disableSecondLevelCache)
|
||||||
|
{
|
||||||
|
dbOpt.AddInterceptors(serviceProvider.GetRequiredService<SecondLevelCacheInterceptor>());
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return serviceCollection;
|
return serviceCollection;
|
||||||
|
@ -85,6 +85,6 @@ public static class WebHostBuilderExtensions
|
|||||||
logger.LogInformation("Kestrel listening to unix socket {SocketPath}", socketPath);
|
logger.LogInformation("Kestrel listening to unix socket {SocketPath}", socketPath);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.UseStartup(_ => new Startup(appHost));
|
.UseStartup(_ => new Startup(appHost, startupConfig));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,15 +40,18 @@ namespace Jellyfin.Server
|
|||||||
{
|
{
|
||||||
private readonly CoreAppHost _serverApplicationHost;
|
private readonly CoreAppHost _serverApplicationHost;
|
||||||
private readonly IServerConfigurationManager _serverConfigurationManager;
|
private readonly IServerConfigurationManager _serverConfigurationManager;
|
||||||
|
private readonly IConfiguration _startupConfig;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="Startup" /> class.
|
/// Initializes a new instance of the <see cref="Startup" /> class.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="appHost">The server application host.</param>
|
/// <param name="appHost">The server application host.</param>
|
||||||
public Startup(CoreAppHost appHost)
|
/// <param name="startupConfig">The server startupConfig.</param>
|
||||||
|
public Startup(CoreAppHost appHost, IConfiguration startupConfig)
|
||||||
{
|
{
|
||||||
_serverApplicationHost = appHost;
|
_serverApplicationHost = appHost;
|
||||||
_serverConfigurationManager = appHost.ConfigurationManager;
|
_serverConfigurationManager = appHost.ConfigurationManager;
|
||||||
|
_startupConfig = startupConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -67,7 +70,7 @@ namespace Jellyfin.Server
|
|||||||
// TODO remove once this is fixed upstream https://github.com/dotnet/aspnetcore/issues/34371
|
// TODO remove once this is fixed upstream https://github.com/dotnet/aspnetcore/issues/34371
|
||||||
services.AddSingleton<IActionResultExecutor<PhysicalFileResult>, SymlinkFollowingPhysicalFileResultExecutor>();
|
services.AddSingleton<IActionResultExecutor<PhysicalFileResult>, SymlinkFollowingPhysicalFileResultExecutor>();
|
||||||
services.AddJellyfinApi(_serverApplicationHost.GetApiPluginAssemblies(), _serverConfigurationManager.GetNetworkConfiguration());
|
services.AddJellyfinApi(_serverApplicationHost.GetApiPluginAssemblies(), _serverConfigurationManager.GetNetworkConfiguration());
|
||||||
services.AddJellyfinDbContext();
|
services.AddJellyfinDbContext(_startupConfig.GetSqliteSecondLevelCacheDisabled());
|
||||||
services.AddJellyfinApiSwagger();
|
services.AddJellyfinApiSwagger();
|
||||||
|
|
||||||
// configure custom legacy authentication
|
// configure custom legacy authentication
|
||||||
|
@ -64,6 +64,11 @@ namespace MediaBrowser.Controller.Extensions
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const string SqliteCacheSizeKey = "sqlite:cacheSize";
|
public const string SqliteCacheSizeKey = "sqlite:cacheSize";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Disable second level cache of sqlite.
|
||||||
|
/// </summary>
|
||||||
|
public const string SqliteDisableSecondLevelCacheKey = "sqlite:disableSecondLevelCache";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a value indicating whether the application should host static web content from the <see cref="IConfiguration"/>.
|
/// Gets a value indicating whether the application should host static web content from the <see cref="IConfiguration"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -128,5 +133,15 @@ namespace MediaBrowser.Controller.Extensions
|
|||||||
/// <returns>The sqlite cache size.</returns>
|
/// <returns>The sqlite cache size.</returns>
|
||||||
public static int? GetSqliteCacheSize(this IConfiguration configuration)
|
public static int? GetSqliteCacheSize(this IConfiguration configuration)
|
||||||
=> configuration.GetValue<int?>(SqliteCacheSizeKey);
|
=> configuration.GetValue<int?>(SqliteCacheSizeKey);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets whether second level cache disabled from the <see cref="IConfiguration" />.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="configuration">The configuration to read the setting from.</param>
|
||||||
|
/// <returns>Whether second level cache disabled.</returns>
|
||||||
|
public static bool GetSqliteSecondLevelCacheDisabled(this IConfiguration configuration)
|
||||||
|
{
|
||||||
|
return configuration.GetValue<bool>(SqliteDisableSecondLevelCacheKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user