Skip to content

Commit 90103c1

Browse files
author
Vytautas Kasparavičius
committed
Fix for #70, #73 (isolation level issues) and ordering #69
1 parent 2ab5182 commit 90103c1

File tree

5 files changed

+40
-10
lines changed

5 files changed

+40
-10
lines changed

src/Hangfire.PostgreSql/Hangfire.PostgreSql.csproj

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
<PackageReleaseNotes>https://github.com/frankhommers/Hangfire.PostgreSql/releases</PackageReleaseNotes>
1515
<PackageProjectUrl>http://hmm.rs/Hangfire.PostgreSql</PackageProjectUrl>
1616
<PackageLicenseUrl>https://raw.github.com/frankhommers/Hangfire.PostgreSql/master/LICENSE.md</PackageLicenseUrl>
17-
<Version>1.4.7.1</Version>
18-
<FileVersion>1.4.7.1</FileVersion>
19-
<AssemblyVersion>1.4.7.1</AssemblyVersion>
17+
<Version>1.4.8</Version>
18+
<FileVersion>1.4.8.0</FileVersion>
19+
<AssemblyVersion>1.4.8.0</AssemblyVersion>
2020
</PropertyGroup>
2121

2222
<ItemGroup>

src/Hangfire.PostgreSql/PostgreSqlConnection.cs

+17-5
Original file line numberDiff line numberDiff line change
@@ -324,14 +324,26 @@ SELECT 1
324324
AND ""updatedrows"".""field"" = ""insertvalues"".""field""
325325
);
326326
";
327-
328-
using (var transaction = _connection.BeginTransaction(IsolationLevel.Serializable))
327+
var execute = true;
328+
while (execute)
329329
{
330-
foreach (var keyValuePair in keyValuePairs)
330+
try
331+
{
332+
using (var transaction = _connection.BeginTransaction(IsolationLevel.Serializable))
333+
{
334+
foreach (var keyValuePair in keyValuePairs)
335+
{
336+
_connection.Execute(sql, new {key = key, field = keyValuePair.Key, value = keyValuePair.Value}, transaction);
337+
}
338+
transaction.Commit();
339+
execute = false;
340+
}
341+
}
342+
catch (PostgresException exception)
331343
{
332-
_connection.Execute(sql, new { key = key, field = keyValuePair.Key, value = keyValuePair.Value }, transaction);
344+
if (!exception.SqlState.Equals("40001"))
345+
throw;
333346
}
334-
transaction.Commit();
335347
}
336348
}
337349

src/Hangfire.PostgreSql/PostgreSqlMonitoringApi.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,7 @@ private JobList<TDto> GetJobs<TDto>(NpgsqlConnection connection, int @from, int
536536
FROM """ + _options.SchemaName + @""".""job"" j
537537
LEFT JOIN """ + _options.SchemaName + @""".""state"" s ON j.""stateid"" = s.""id""
538538
WHERE j.""statename"" = @stateName
539-
ORDER BY j.""id""
539+
ORDER BY j.""id"" DESC
540540
LIMIT @count OFFSET @start;
541541
";
542542

tests/Hangfire.PostgreSql.Tests/Hangfire.PostgreSql.Tests.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<AssemblyTitle>Hangfire.PostgreSql.Tests</AssemblyTitle>
5-
<TargetFramework>netcoreapp1.0</TargetFramework>
5+
<TargetFramework>netcoreapp1.1</TargetFramework>
66
<AssemblyName>Hangfire.PostgreSql.Tests</AssemblyName>
77
<PackageId>Hangfire.PostgreSql.Tests</PackageId>
88
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>

tests/Hangfire.PostgreSql.Tests/PostgreSqlConnectionFacts.cs

+18
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
using System.Data;
44
using System.Globalization;
55
using System.Linq;
6+
using System.Runtime.InteropServices.ComTypes;
67
using System.Threading;
8+
using System.Threading.Tasks;
79
using Dapper;
810
using Hangfire.Common;
911
using Hangfire.Server;
@@ -786,6 +788,22 @@ public void SetRangeInHash_MergesAllRecords()
786788
});
787789
}
788790

791+
[Fact, CleanDatabase]
792+
public void SetRangeInHash_DoesNotThrowSerializationException()
793+
{
794+
Parallel.For(1, 1000, (i) =>
795+
{
796+
UseConnection((connection2) =>
797+
{
798+
connection2.SetRangeInHash("some-hash", new Dictionary<string, string>
799+
{
800+
{"Key1", "Value1"},
801+
{"Key2", "Value2"}
802+
});
803+
});
804+
});
805+
}
806+
789807
[Fact, CleanDatabase]
790808
public void GetAllEntriesFromHash_ThrowsAnException_WhenKeyIsNull()
791809
{

0 commit comments

Comments
 (0)