Compare commits
2 Commits
develop
...
phantom-jo
Author | SHA1 | Date |
---|---|---|
Taloth Saldono | 243c779ca1 | |
Devin Buhl | 7ff6342503 |
|
@ -3,6 +3,7 @@ using NzbDrone.Core.Authentication;
|
|||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Update;
|
||||
using NzbDrone.Common.Http.Proxy;
|
||||
using NzbDrone.Core.Datastore;
|
||||
|
||||
namespace NzbDrone.Api.Config
|
||||
{
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SQLite;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
@ -12,6 +13,7 @@ using NzbDrone.Common.Extensions;
|
|||
using NzbDrone.Common.Instrumentation;
|
||||
using NzbDrone.Core.Authentication;
|
||||
using NzbDrone.Core.Configuration.Events;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Lifecycle;
|
||||
using NzbDrone.Core.Messaging.Commands;
|
||||
using NzbDrone.Core.Messaging.Events;
|
||||
|
@ -34,6 +36,7 @@ namespace NzbDrone.Core.Configuration
|
|||
bool AnalyticsEnabled { get; }
|
||||
string LogLevel { get; }
|
||||
string ConsoleLogLevel { get; }
|
||||
DatabaseJournalType DatabaseJournalMode { get; }
|
||||
string Branch { get; }
|
||||
string ApiKey { get; }
|
||||
string SslCertHash { get; }
|
||||
|
@ -182,6 +185,8 @@ namespace NzbDrone.Core.Configuration
|
|||
public string LogLevel => GetValue("LogLevel", "Info");
|
||||
public string ConsoleLogLevel => GetValue("ConsoleLogLevel", string.Empty, persist: false);
|
||||
|
||||
public DatabaseJournalType DatabaseJournalMode => GetValueEnum("DatabaseJournalMode", DatabaseJournalType.Auto, persist: false);
|
||||
|
||||
public string SslCertHash => GetValue("SslCertHash", "");
|
||||
|
||||
public string UrlBase
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
using System;
|
||||
using System.Data.SQLite;
|
||||
using System.IO;
|
||||
using NzbDrone.Common.Disk;
|
||||
using NzbDrone.Common.EnvironmentInfo;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NLog;
|
||||
|
||||
namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
|
@ -14,8 +18,16 @@ namespace NzbDrone.Core.Datastore
|
|||
|
||||
public class ConnectionStringFactory : IConnectionStringFactory
|
||||
{
|
||||
public ConnectionStringFactory(IAppFolderInfo appFolderInfo)
|
||||
private readonly IDiskProvider _diskProvider;
|
||||
private readonly IConfigFileProvider _configFileProvider;
|
||||
private readonly Logger _logger;
|
||||
|
||||
public ConnectionStringFactory(IAppFolderInfo appFolderInfo, IDiskProvider diskProvider, IConfigFileProvider configFileProvider, Logger logger)
|
||||
{
|
||||
_diskProvider = diskProvider;
|
||||
_configFileProvider = configFileProvider;
|
||||
_logger = logger;
|
||||
|
||||
MainDbConnectionString = GetConnectionString(appFolderInfo.GetDatabase());
|
||||
LogDbConnectionString = GetConnectionString(appFolderInfo.GetLogDatabase());
|
||||
}
|
||||
|
@ -30,23 +42,60 @@ namespace NzbDrone.Core.Datastore
|
|||
return connectionBuilder.DataSource;
|
||||
}
|
||||
|
||||
private static string GetConnectionString(string dbPath)
|
||||
private string GetConnectionString(string dbPath)
|
||||
{
|
||||
var connectionBuilder = new SQLiteConnectionStringBuilder();
|
||||
|
||||
connectionBuilder.DataSource = dbPath;
|
||||
connectionBuilder.CacheSize = (int)-10000;
|
||||
connectionBuilder.DateTimeKind = DateTimeKind.Utc;
|
||||
connectionBuilder.JournalMode = OsInfo.IsOsx ? SQLiteJournalModeEnum.Truncate : SQLiteJournalModeEnum.Wal;
|
||||
connectionBuilder.Pooling = true;
|
||||
connectionBuilder.Version = 3;
|
||||
|
||||
|
||||
connectionBuilder.JournalMode = GetJournalMode(dbPath);
|
||||
|
||||
if (OsInfo.IsOsx)
|
||||
{
|
||||
connectionBuilder.Add("Full FSync", true);
|
||||
}
|
||||
|
||||
connectionBuilder.Pooling = true;
|
||||
connectionBuilder.Version = 3;
|
||||
|
||||
return connectionBuilder.ConnectionString;
|
||||
}
|
||||
|
||||
private SQLiteJournalModeEnum GetJournalMode(string path)
|
||||
{
|
||||
if (_configFileProvider.DatabaseJournalMode != DatabaseJournalType.Auto)
|
||||
{
|
||||
_logger.Debug("Database journal mode overridden by config.xml, using {0} journal mode", _configFileProvider.DatabaseJournalMode);
|
||||
return (SQLiteJournalModeEnum)_configFileProvider.DatabaseJournalMode;
|
||||
}
|
||||
|
||||
if (OsInfo.IsOsx)
|
||||
{
|
||||
_logger.Debug("macOS operating system, using Truncate database journal mode");
|
||||
return SQLiteJournalModeEnum.Truncate;
|
||||
}
|
||||
|
||||
var mount = _diskProvider.GetMount(path);
|
||||
|
||||
if (mount == null)
|
||||
{
|
||||
_logger.Debug("Database {0} located on unknown filesystem, using Truncate journal mode", path);
|
||||
return SQLiteJournalModeEnum.Truncate;
|
||||
}
|
||||
|
||||
if (mount.DriveType == DriveType.Network || mount.DriveType == DriveType.Unknown)
|
||||
{
|
||||
_logger.Debug("Database {0} located on filesystem {1} with type {2}, using Truncate journal mode", path, mount.DriveFormat, mount.DriveType);
|
||||
return SQLiteJournalModeEnum.Truncate;
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Debug("Database {0} located on filesystem {1} with type {2}, using WAL journal mode", path, mount.DriveFormat, mount.DriveType);
|
||||
}
|
||||
|
||||
return SQLiteJournalModeEnum.Wal;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
using System.Data.SQLite;
|
||||
|
||||
namespace NzbDrone.Core.Datastore
|
||||
{
|
||||
public enum DatabaseJournalType
|
||||
{
|
||||
Auto = SQLiteJournalModeEnum.Default,
|
||||
Wal = SQLiteJournalModeEnum.Wal,
|
||||
Truncate = SQLiteJournalModeEnum.Truncate,
|
||||
Delete = SQLiteJournalModeEnum.Delete
|
||||
}
|
||||
}
|
|
@ -136,6 +136,7 @@
|
|||
<Compile Include="Configuration\InvalidConfigFileException.cs" />
|
||||
<Compile Include="Configuration\RescanAfterRefreshType.cs" />
|
||||
<Compile Include="Configuration\ResetApiKeyCommand.cs" />
|
||||
<Compile Include="Datastore\DatabaseJournalType.cs" />
|
||||
<Compile Include="Datastore\Migration\134_add_specials_folder_format.cs" />
|
||||
<Compile Include="Datastore\Migration\132_add_download_client_priority.cs" />
|
||||
<Compile Include="Datastore\Migration\131_download_propers_config.cs" />
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace NzbDrone.Mono.Disk
|
|||
public class ProcMountProvider : IProcMountProvider
|
||||
{
|
||||
private static string[] _fixedTypes = new [] { "ext3", "ext2", "ext4", "vfat", "fuseblk", "xfs", "jfs", "msdos", "ntfs", "minix", "hfs", "hfsplus", "qnx4", "ufs", "btrfs" };
|
||||
private static string[] _networkDriveTypes = new [] { "cifs", "nfs", "nfs4", "nfsd", "sshfs" };
|
||||
private static string[] _networkDriveTypes = new [] { "cifs", "nfs", "nfs4", "nfsd", "sshfs", "9p" };
|
||||
private static readonly Regex OctalRegex = new Regex(@"\\\d{3}", RegexOptions.Compiled);
|
||||
|
||||
private const string PROC_MOUNTS_FILENAME = @"/proc/mounts";
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
using NzbDrone.Common.Http.Proxy;
|
||||
using NzbDrone.Core.Authentication;
|
||||
using NzbDrone.Core.Configuration;
|
||||
using NzbDrone.Core.Datastore;
|
||||
using NzbDrone.Core.Security;
|
||||
using NzbDrone.Core.Update;
|
||||
using Sonarr.Http.REST;
|
||||
|
@ -20,6 +21,7 @@ namespace Sonarr.Api.V3.Config
|
|||
public string Password { get; set; }
|
||||
public string LogLevel { get; set; }
|
||||
public string ConsoleLogLevel { get; set; }
|
||||
public DatabaseJournalType DatabaseJournalMode { get; set; }
|
||||
public string Branch { get; set; }
|
||||
public string ApiKey { get; set; }
|
||||
public string SslCertHash { get; set; }
|
||||
|
|
Loading…
Reference in New Issue