diff --git a/Emby.Server.Implementations/ConfigurationOptions.cs b/Emby.Server.Implementations/ConfigurationOptions.cs
index f0c2676279..f2743762e3 100644
--- a/Emby.Server.Implementations/ConfigurationOptions.cs
+++ b/Emby.Server.Implementations/ConfigurationOptions.cs
@@ -19,7 +19,8 @@ namespace Emby.Server.Implementations
{ FfmpegAnalyzeDurationKey, "200M" },
{ PlaylistsAllowDuplicatesKey, bool.FalseString },
{ BindToUnixSocketKey, bool.FalseString },
- { SqliteCacheSizeKey, "20000" }
+ { SqliteCacheSizeKey, "20000" },
+ { SqliteDisableWalKey, bool.FalseString }
};
}
}
diff --git a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
index b1c99227c3..7ec980eb5e 100644
--- a/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
+++ b/Emby.Server.Implementations/Data/BaseSqliteRepository.cs
@@ -5,22 +5,27 @@
using System;
using System.Collections.Generic;
using Jellyfin.Extensions;
+using MediaBrowser.Controller.Extensions;
using Microsoft.Data.Sqlite;
+using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.Data
{
public abstract class BaseSqliteRepository : IDisposable
{
+ private readonly IConfiguration _configuration;
private bool _disposed = false;
///
/// Initializes a new instance of the class.
///
/// The logger.
- protected BaseSqliteRepository(ILogger logger)
+ /// The configuration.
+ protected BaseSqliteRepository(ILogger logger, IConfiguration configuration)
{
Logger = logger;
+ _configuration = configuration;
}
///
@@ -60,7 +65,7 @@ namespace Emby.Server.Implementations.Data
/// Gets the journal mode. .
///
/// The journal mode.
- protected virtual string JournalMode => "WAL";
+ protected virtual string JournalMode => _configuration.GetSqliteWalDisabled() ? "TRUNCATE" : "WAL";
///
/// Gets the journal size limit. .
diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
index 34d753093d..676d3499ad 100644
--- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
@@ -314,7 +314,7 @@ namespace Emby.Server.Implementations.Data
ILocalizationManager localization,
IImageProcessor imageProcessor,
IConfiguration configuration)
- : base(logger)
+ : base(logger, configuration)
{
_config = config;
_appHost = appHost;
diff --git a/Emby.Server.Implementations/Data/SqliteUserDataRepository.cs b/Emby.Server.Implementations/Data/SqliteUserDataRepository.cs
index 20359e4ad7..f361e1a572 100644
--- a/Emby.Server.Implementations/Data/SqliteUserDataRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteUserDataRepository.cs
@@ -12,6 +12,7 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Persistence;
using Microsoft.Data.Sqlite;
+using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace Emby.Server.Implementations.Data
@@ -23,8 +24,9 @@ namespace Emby.Server.Implementations.Data
public SqliteUserDataRepository(
ILogger logger,
IServerConfigurationManager config,
- IUserManager userManager)
- : base(logger)
+ IUserManager userManager,
+ IConfiguration configuration)
+ : base(logger, configuration)
{
_userManager = userManager;
diff --git a/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs b/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs
index 6c58064ce9..8041c254a7 100644
--- a/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs
+++ b/MediaBrowser.Controller/Extensions/ConfigurationExtensions.cs
@@ -64,6 +64,11 @@ namespace MediaBrowser.Controller.Extensions
///
public const string SqliteCacheSizeKey = "sqlite:cacheSize";
+ ///
+ /// Disable WAL journaling of sqlite.
+ ///
+ public const string SqliteDisableWalKey = "sqlite:disableWal";
+
///
/// Gets a value indicating whether the application should host static web content from the .
///
@@ -128,5 +133,26 @@ namespace MediaBrowser.Controller.Extensions
/// The sqlite cache size.
public static int? GetSqliteCacheSize(this IConfiguration configuration)
=> configuration.GetValue(SqliteCacheSizeKey);
+
+ ///
+ /// Gets whether WAL journaling disabled from the .
+ ///
+ /// The configuration to read the setting from.
+ /// Whether WAL journaling disabled.
+ public static bool GetSqliteWalDisabled(this IConfiguration configuration)
+ {
+ var disableSqliteWal = configuration.GetValue(SqliteDisableWalKey);
+ var disableWal = false;
+ if (disableSqliteWal is not null)
+ {
+ disableWal = disableSqliteWal.ToUpperInvariant() switch
+ {
+ "FALSE" or "NO" or "0" => false,
+ _ => true
+ };
+ }
+
+ return disableWal;
+ }
}
}