Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion samples/ConsoleSample/ConsoleSample.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Hangfire.LiteDB\Hangfire.LiteDB.csproj" />
Expand Down
11 changes: 5 additions & 6 deletions samples/MvcSample/MvcSample.csproj
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Hangfire.LiteDB\Hangfire.LiteDB.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Autofac" Version="4.9.4" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.4.0" />
<PackageReference Include="Autofac" Version="6.5.0" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="HangFire.Autofac" Version="2.3.1" />
<PackageReference Include="Hangfire.Console" Version="1.4.2" />
<PackageReference Include="Hangfire.Core" Version="1.7.16" />
<PackageReference Include="Hangfire.Core" Version="1.7.32" />
<PackageReference Include="Hangfire.RecurringJobExtensions" Version="1.1.6" />
<PackageReference Include="Microsoft.AspNetCore.All" />
<PackageReference Include="HangFire" Version="1.7.16" />
<PackageReference Include="HangFire" Version="1.7.32" />
</ItemGroup>

<ItemGroup>
Expand Down
34 changes: 4 additions & 30 deletions src/Hangfire.LiteDB/Hangfire.LiteDB.csproj
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Condition=" '$(OS)' != 'Windows_NT' ">
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT' ">
<TargetFrameworks>netstandard2.0;net45</TargetFrameworks>
</PropertyGroup>
<PropertyGroup>
<Version>0.4.1</Version>
<authors>codeyu</authors>
<AssemblyName>Hangfire.LiteDB</AssemblyName>
<PackageId>Hangfire.LiteDB</PackageId>
<NoWarn>$(NoWarn);CS0618</NoWarn>
<TargetFrameworks>net6.0</TargetFrameworks>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute>
Expand Down Expand Up @@ -39,30 +34,9 @@
</PropertyGroup>
<ItemGroup>
<None Include="app.config" />
</ItemGroup>

<PropertyGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' ">
<DefineConstants>$(DefineConstants);NetCore</DefineConstants>
</PropertyGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net45' OR '$(TargetFramework)' == 'net451' OR '$(TargetFramework)' == 'net452' ">
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'netstandard1.3' ">
<PackageReference Include="System.Data.Common" Version="4.3.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.3.1" />
<PackageReference Include="Microsoft.CSharp" Version="4.3.0" />
</ItemGroup>

</ItemGroup>
<ItemGroup>
<PackageReference Include="HangFire.Core" Version="1.7.16" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
<PackageReference Include="LiteDB" Version="5.0.9" />
<PackageReference Include="HangFire.Core" Version="1.7.32" />
<PackageReference Include="LiteDB" Version="5.0.15" />
</ItemGroup>
</Project>
34 changes: 31 additions & 3 deletions src/Hangfire.LiteDB/HangfireDbContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,16 @@ public sealed class HangfireDbContext
/// </summary>
/// <param name="connectionString">Connection string for LiteDB database</param>
/// <param name="prefix">Collections prefix</param>
private HangfireDbContext(string connectionString, string prefix = "hangfire")
private HangfireDbContext(string connectionString, string prefix = "hangfire") : this(new LiteRepository(connectionString),prefix)
{
}

/// <summary>
/// Starts LiteDB database using a connection string for file system database
/// </summary>
/// <param name="repository">Connection string for LiteDB database</param>
/// <param name="prefix">Collections prefix</param>
private HangfireDbContext(LiteRepository repository, string prefix = "hangfire")
{
_prefix = prefix;

Expand All @@ -58,8 +67,7 @@ private HangfireDbContext(string connectionString, string prefix = "hangfire")
DateFormatString = "yyyy-MM-dd HH:mm:ss.fff"
});

Repository = new LiteRepository(connectionString);

Repository = repository;
Database = Repository.Database;

ConnectionId = Guid.NewGuid().ToString();
Expand All @@ -82,6 +90,7 @@ private HangfireDbContext(string connectionString, string prefix = "hangfire")
JobQueue.EnsureIndex("Queue");
JobQueue.EnsureIndex("FetchedAt");
}

/// <summary>
///
/// </summary>
Expand All @@ -101,6 +110,25 @@ public static HangfireDbContext Instance(string connectionString, string prefix

return _instance;
}
/// <summary>
///
/// </summary>
/// <param name="repository"></param>
/// <param name="prefix"></param>
/// <returns></returns>
public static HangfireDbContext Instance(LiteRepository repository, string prefix = "hangfire")
{
if (_instance != null) return _instance;
lock (Locker)
{
if (_instance == null)
{
_instance = new HangfireDbContext(repository, prefix);
}
}

return _instance;
}

/// <summary>
/// LiteDB database connection identifier
Expand Down
2 changes: 2 additions & 0 deletions src/Hangfire.LiteDB/LiteDbDistributedLock.cs
Original file line number Diff line number Diff line change
Expand Up @@ -210,10 +210,12 @@ private void Release()
{
try
{
#pragma warning disable CA1416 // Validate platform compatibility
if (EventWaitHandle.TryOpenExisting(EventWaitHandleName, out EventWaitHandle eventWaitHandler))
{
eventWaitHandler.Set();
}
#pragma warning restore CA1416 // Validate platform compatibility
}
catch (PlatformNotSupportedException)
{
Expand Down
59 changes: 47 additions & 12 deletions src/Hangfire.LiteDB/LiteDbStorage.cs
Original file line number Diff line number Diff line change
@@ -1,45 +1,82 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using Hangfire.Annotations;
using Hangfire.Logging;
using Hangfire.Server;
using Hangfire.States;
using Hangfire.Storage;
using LiteDB;

namespace Hangfire.LiteDB
{
/// <summary>
///
/// </summary>
public class LiteDbStorage : JobStorage
{
private readonly string _connectionString;

private readonly LiteDbStorageOptions _storageOptions;

/// <summary>
/// Constructs Job Storage by database connection string
/// </summary>
/// <param name="connectionString">LiteDB connection string</param>
public LiteDbStorage(string connectionString)
: this(connectionString, new LiteDbStorageOptions())
public LiteDbStorage(string connectionString) : this(connectionString, new LiteDbStorageOptions())
{
}

/// <summary>
/// Constructs Job Storage by database connection string
/// </summary>
/// <param name="liteDatabase">LiteDB connection string</param>
public LiteDbStorage(LiteRepository liteDatabase) : this(HangfireDbContext.Instance(liteDatabase), new LiteDbStorageOptions())
{
if (liteDatabase == null)
{
throw new ArgumentNullException(nameof(liteDatabase));
}
}

/// <summary>
/// Constructs Job Storage by database connection string
/// </summary>
/// <param name="liteDatabase">LiteDB connection string</param>
/// /// <param name="options">LiteDB connection string</param>
public LiteDbStorage(LiteRepository liteDatabase, LiteDbStorageOptions options) : this(HangfireDbContext.Instance(liteDatabase), options)
{
if (liteDatabase == null)
{
throw new ArgumentNullException(nameof(liteDatabase));
}
}

/// <summary>
/// Constructs Job Storage by database connection string and options
/// </summary>
/// <param name="connectionString">LiteDB connection string</param>
/// <param name="storageOptions">Storage options</param>
public LiteDbStorage(string connectionString, LiteDbStorageOptions storageOptions)
public LiteDbStorage(string connectionString, [AllowNull] LiteDbStorageOptions storageOptions) : this(HangfireDbContext.Instance(connectionString, storageOptions?.Prefix ?? new LiteDbStorageOptions().Prefix),storageOptions)
{
if (string.IsNullOrWhiteSpace(connectionString))
{
throw new ArgumentNullException(nameof(connectionString));
}
}


/// <summary>
/// Constructs Job Storage by database connection string and options
/// </summary>
/// <param name="connection">LiteDB connection string</param>
/// <param name="storageOptions">Storage options</param>
private LiteDbStorage(HangfireDbContext connection, LiteDbStorageOptions storageOptions)
{
if (storageOptions == null)
storageOptions = new LiteDbStorageOptions();

_connectionString = connectionString;
_storageOptions = storageOptions ?? throw new ArgumentNullException(nameof(storageOptions));
_storageOptions = storageOptions;

Connection = HangfireDbContext.Instance(connectionString, storageOptions.Prefix);
Connection = connection;
Connection.Init(_storageOptions);
var defaultQueueProvider = new LiteDbJobQueueProvider(_storageOptions);
QueueProviders = new PersistentJobQueueProviderCollection(defaultQueueProvider);
Expand Down Expand Up @@ -89,17 +126,15 @@ public override void WriteOptionsToLog(ILog logger)
/// <returns>Database context</returns>
public HangfireDbContext CreateAndOpenConnection()
{
return _connectionString != null
? HangfireDbContext.Instance(_connectionString, _storageOptions.Prefix)
: null;
return Connection;
}

/// <summary>
/// Returns text representation of the object
/// </summary>
public override string ToString()
{
return $"Connection string: {_connectionString}, prefix: {_storageOptions.Prefix}";
return $"prefix: {_storageOptions.Prefix}";
}

/// <summary>
Expand Down
20 changes: 20 additions & 0 deletions src/Hangfire.LiteDB/LiteDbStorageExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using Hangfire.Annotations;
using LiteDB;

namespace Hangfire.LiteDB
{
Expand Down Expand Up @@ -41,5 +42,24 @@ public static IGlobalConfiguration<LiteDbStorage> UseLiteDbStorage(
var storage = new LiteDbStorage(nameOrConnectionString, options);
return configuration.UseStorage(storage);
}

/// <summary>
///
/// </summary>
/// <param name="configuration"></param>
/// <param name="database"></param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
public static IGlobalConfiguration<LiteDbStorage> UseLiteDbStorage(
[NotNull] this IGlobalConfiguration configuration,
[NotNull] LiteDatabase database)
{
if (configuration == null) throw new ArgumentNullException(nameof(configuration));
if (database == null) throw new ArgumentNullException(nameof(database));

var repo = new LiteRepository(database);
var storage = new LiteDbStorage(repo);
return configuration.UseStorage(storage);
}
}
}
10 changes: 5 additions & 5 deletions test/Hangfire.LiteDB.Test/Hangfire.LiteDB.Test.csproj
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<TargetFramework>net6.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DocumentationFile>bin\Debug\netcoreapp2.0\Hangfire.LiteDB.Test.xml</DocumentationFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
<PackageReference Include="Moq" Version="4.12.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
<PackageReference Include="Moq" Version="4.18.4" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Expand Down
4 changes: 2 additions & 2 deletions test/Hangfire.LiteDB.Test/LiteDbStorageFacts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,14 @@ public void Ctor_ThrowsAnException_WhenConnectionStringIsEmpty()
//
// Assert.Equal("databaseName", exception.ParamName);
//}

/*
[Fact]
public void Ctor_ThrowsAnException_WhenStorageOptionsValueIsNull()
{
var exception = Assert.Throws<ArgumentNullException>(() => new LiteDbStorage("lite.db", null));

Assert.Equal("storageOptions", exception.ParamName);
}
}*/

[Fact, CleanDatabase]
public void GetMonitoringApi_ReturnsNonNullInstance()
Expand Down