Compare commits

...

2 Commits

Author SHA1 Message Date
Taloth Saldono 243c779ca1 Refactored enum and messages. Also added 9p to the list since mono misclassifies it. 2019-06-25 22:59:54 +02:00
Devin Buhl 7ff6342503 disable wal 2019-06-24 21:55:48 -04:00
7 changed files with 77 additions and 7 deletions

View File

@ -3,6 +3,7 @@ using NzbDrone.Core.Authentication;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.Update; using NzbDrone.Core.Update;
using NzbDrone.Common.Http.Proxy; using NzbDrone.Common.Http.Proxy;
using NzbDrone.Core.Datastore;
namespace NzbDrone.Api.Config namespace NzbDrone.Api.Config
{ {

View File

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data.SQLite;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -12,6 +13,7 @@ using NzbDrone.Common.Extensions;
using NzbDrone.Common.Instrumentation; using NzbDrone.Common.Instrumentation;
using NzbDrone.Core.Authentication; using NzbDrone.Core.Authentication;
using NzbDrone.Core.Configuration.Events; using NzbDrone.Core.Configuration.Events;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Lifecycle; using NzbDrone.Core.Lifecycle;
using NzbDrone.Core.Messaging.Commands; using NzbDrone.Core.Messaging.Commands;
using NzbDrone.Core.Messaging.Events; using NzbDrone.Core.Messaging.Events;
@ -34,6 +36,7 @@ namespace NzbDrone.Core.Configuration
bool AnalyticsEnabled { get; } bool AnalyticsEnabled { get; }
string LogLevel { get; } string LogLevel { get; }
string ConsoleLogLevel { get; } string ConsoleLogLevel { get; }
DatabaseJournalType DatabaseJournalMode { get; }
string Branch { get; } string Branch { get; }
string ApiKey { get; } string ApiKey { get; }
string SslCertHash { get; } string SslCertHash { get; }
@ -182,6 +185,8 @@ namespace NzbDrone.Core.Configuration
public string LogLevel => GetValue("LogLevel", "Info"); public string LogLevel => GetValue("LogLevel", "Info");
public string ConsoleLogLevel => GetValue("ConsoleLogLevel", string.Empty, persist: false); 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 SslCertHash => GetValue("SslCertHash", "");
public string UrlBase public string UrlBase

View File

@ -1,7 +1,11 @@
using System; using System;
using System.Data.SQLite; using System.Data.SQLite;
using System.IO;
using NzbDrone.Common.Disk;
using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Extensions; using NzbDrone.Common.Extensions;
using NzbDrone.Core.Configuration;
using NLog;
namespace NzbDrone.Core.Datastore namespace NzbDrone.Core.Datastore
{ {
@ -14,8 +18,16 @@ namespace NzbDrone.Core.Datastore
public class ConnectionStringFactory : IConnectionStringFactory 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()); MainDbConnectionString = GetConnectionString(appFolderInfo.GetDatabase());
LogDbConnectionString = GetConnectionString(appFolderInfo.GetLogDatabase()); LogDbConnectionString = GetConnectionString(appFolderInfo.GetLogDatabase());
} }
@ -30,23 +42,60 @@ namespace NzbDrone.Core.Datastore
return connectionBuilder.DataSource; return connectionBuilder.DataSource;
} }
private static string GetConnectionString(string dbPath) private string GetConnectionString(string dbPath)
{ {
var connectionBuilder = new SQLiteConnectionStringBuilder(); var connectionBuilder = new SQLiteConnectionStringBuilder();
connectionBuilder.DataSource = dbPath; connectionBuilder.DataSource = dbPath;
connectionBuilder.CacheSize = (int)-10000; connectionBuilder.CacheSize = (int)-10000;
connectionBuilder.DateTimeKind = DateTimeKind.Utc; connectionBuilder.DateTimeKind = DateTimeKind.Utc;
connectionBuilder.JournalMode = OsInfo.IsOsx ? SQLiteJournalModeEnum.Truncate : SQLiteJournalModeEnum.Wal;
connectionBuilder.Pooling = true; connectionBuilder.JournalMode = GetJournalMode(dbPath);
connectionBuilder.Version = 3;
if (OsInfo.IsOsx) if (OsInfo.IsOsx)
{ {
connectionBuilder.Add("Full FSync", true); connectionBuilder.Add("Full FSync", true);
} }
connectionBuilder.Pooling = true;
connectionBuilder.Version = 3;
return connectionBuilder.ConnectionString; 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;
}
} }
} }

View File

@ -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
}
}

View File

@ -136,6 +136,7 @@
<Compile Include="Configuration\InvalidConfigFileException.cs" /> <Compile Include="Configuration\InvalidConfigFileException.cs" />
<Compile Include="Configuration\RescanAfterRefreshType.cs" /> <Compile Include="Configuration\RescanAfterRefreshType.cs" />
<Compile Include="Configuration\ResetApiKeyCommand.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\134_add_specials_folder_format.cs" />
<Compile Include="Datastore\Migration\132_add_download_client_priority.cs" /> <Compile Include="Datastore\Migration\132_add_download_client_priority.cs" />
<Compile Include="Datastore\Migration\131_download_propers_config.cs" /> <Compile Include="Datastore\Migration\131_download_propers_config.cs" />

View File

@ -17,7 +17,7 @@ namespace NzbDrone.Mono.Disk
public class ProcMountProvider : IProcMountProvider 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[] _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 static readonly Regex OctalRegex = new Regex(@"\\\d{3}", RegexOptions.Compiled);
private const string PROC_MOUNTS_FILENAME = @"/proc/mounts"; private const string PROC_MOUNTS_FILENAME = @"/proc/mounts";

View File

@ -1,6 +1,7 @@
using NzbDrone.Common.Http.Proxy; using NzbDrone.Common.Http.Proxy;
using NzbDrone.Core.Authentication; using NzbDrone.Core.Authentication;
using NzbDrone.Core.Configuration; using NzbDrone.Core.Configuration;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Security; using NzbDrone.Core.Security;
using NzbDrone.Core.Update; using NzbDrone.Core.Update;
using Sonarr.Http.REST; using Sonarr.Http.REST;
@ -20,6 +21,7 @@ namespace Sonarr.Api.V3.Config
public string Password { get; set; } public string Password { get; set; }
public string LogLevel { get; set; } public string LogLevel { get; set; }
public string ConsoleLogLevel { get; set; } public string ConsoleLogLevel { get; set; }
public DatabaseJournalType DatabaseJournalMode { get; set; }
public string Branch { get; set; } public string Branch { get; set; }
public string ApiKey { get; set; } public string ApiKey { get; set; }
public string SslCertHash { get; set; } public string SslCertHash { get; set; }