Skip to content

Commit

Permalink
Merge pull request #15 from dtm-labs/feat/nstd2.0
Browse files Browse the repository at this point in the history
feat: support netstandard2.0
  • Loading branch information
catcherwong authored Jun 13, 2022
2 parents 41ee5b6 + dc1204b commit dba9d48
Show file tree
Hide file tree
Showing 9 changed files with 190 additions and 8 deletions.
18 changes: 17 additions & 1 deletion src/DtmCommon/Barrier/BranchBarrier.cs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,11 @@ public async Task Call(DbConnection db, Func<DbTransaction, Task> busiCall)
// check the connection state
if (db.State != System.Data.ConnectionState.Open) await db.OpenAsync();

#if NETSTANDARD2_0
var tx = db.BeginTransaction();
#else
var tx = await db.BeginTransactionAsync();
#endif

try
{
Expand Down Expand Up @@ -82,12 +86,20 @@ public async Task Call(DbConnection db, Func<DbTransaction, Task> busiCall)
if (isNullCompensation || isDuplicateOrPend)
{
Logger?.LogInformation("Will not exec busiCall, isNullCompensation={isNullCompensation}, isDuplicateOrPend={isDuplicateOrPend}", isNullCompensation, isDuplicateOrPend);
#if NETSTANDARD2_0
tx.Commit();
#else
await tx.CommitAsync();
#endif
return;
}

await busiCall.Invoke(tx);
#if NETSTANDARD2_0
tx.Commit();
#else
await tx.CommitAsync();
#endif
}
catch (DtmException e)
{
Expand All @@ -97,8 +109,12 @@ public async Task Call(DbConnection db, Func<DbTransaction, Task> busiCall)
catch (Exception ex)
{
Logger?.LogError(ex, "Call error, gid={gid}, trans_type={trans_type}", this.Gid, this.TransType);


#if NETSTANDARD2_0
tx.Rollback();
#else
await tx.RollbackAsync();
#endif

throw;
}
Expand Down
4 changes: 2 additions & 2 deletions src/DtmCommon/DtmCommon.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard2.1;net5.0;net6.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<Description>a c# client for distributed transaction framework dtm. 分布式事务管理器dtm的c#客户端</Description>
<PackageTags>dtm,csharp,distributed transaction,tcc,saga,msg</PackageTags>
</PropertyGroup>
Expand Down Expand Up @@ -31,7 +31,7 @@
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="$(MicrosoftExtensionsOptionsConfigurationExtensionsNET5)" />
</ItemGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1'">
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.1' OR '$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="Microsoft.CSharp" Version="$(MicrosoftCSharpNSD21)" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="$(MicrosoftExtensionsConfigurationNSD21)" />
<PackageReference Include="Microsoft.Extensions.Http" Version="$(MicrosoftExtensionsHttpNSD21)" />
Expand Down
2 changes: 1 addition & 1 deletion src/DtmMongoBarrier/DtmMongoBarrier.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard2.1;net5.0;net6.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<Description>a c# client for distributed transaction framework dtm. 分布式事务管理器dtm的c#客户端</Description>
<PackageTags>dtm,csharp,distributed transaction,tcc,saga,msg</PackageTags>
</PropertyGroup>
Expand Down
2 changes: 1 addition & 1 deletion src/DtmSERedisBarrier/DtmSERedisBarrier.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard2.1;net5.0;net6.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<Description>a c# client for distributed transaction framework dtm. 分布式事务管理器dtm的c#客户端</Description>
<PackageTags>dtm,csharp,distributed transaction,tcc,saga,msg</PackageTags>
</PropertyGroup>
Expand Down
8 changes: 6 additions & 2 deletions src/Dtmgrpc/DtmGImp/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,14 @@ internal static Marshaller<TMessage> CreateMarshaller<TMessage>()
}

internal static string GetWithoutPrefixgRPCUrl(this string url)
{
{
#if NETSTANDARD2_0
return url?.TrimEnd(Slash)?.Replace(HTTP, string.Empty)?.Replace(HTTPS, string.Empty) ?? string.Empty;
#else
return url?.TrimEnd(Slash)
.Replace(HTTP, string.Empty, StringComparison.OrdinalIgnoreCase)
.Replace(HTTPS, string.Empty, StringComparison.Ordinal) ?? string.Empty;
.Replace(HTTPS, string.Empty, StringComparison.OrdinalIgnoreCase) ?? string.Empty;
#endif
}

private static readonly System.Collections.Generic.Dictionary<string, Exception> StrExceptions = new System.Collections.Generic.Dictionary<string, Exception>
Expand Down
2 changes: 1 addition & 1 deletion src/Dtmgrpc/Dtmgrpc.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFrameworks>netstandard2.1;net5.0;net6.0</TargetFrameworks>
<TargetFrameworks>netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<Description>a c# client for distributed transaction framework dtm. 分布式事务管理器dtm的c#客户端</Description>
<PackageTags>dtm,csharp,distributed transaction,tcc,saga,msg</PackageTags>
</PropertyGroup>
Expand Down
47 changes: 47 additions & 0 deletions tests/Dtmgrpc.Tests/BranchIDGenTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using DtmCommon;
using System;
using Xunit;

namespace Dtmgrpc.Tests
{
public class BranchIDGenTests
{
[Fact]
public void TestNewSubBranchID()
{
var b = new BranchIDGen("");

// 01,...,09
for (int i = 0; i < 9; i++)
{
var n = b.NewSubBranchID();
Assert.Equal($"0{i + 1}", n);
}

// 10~98
for (int i = 9; i < 99; i++)
{
var n = b.NewSubBranchID();
Assert.Equal($"{i + 1}", n);
}

// 99~
Assert.Throws<ArgumentException>(() => b.NewSubBranchID());
}

[Fact]
public void NewSubBranchID_With_BranchId_Should_Succeed()
{
var b = new BranchIDGen("ss");
var n = b.NewSubBranchID();
Assert.Equal($"ss01", n);
}

[Fact]
public void NewSubBranchID_With_BranchId_Should_Throw_Exception()
{
var b = new BranchIDGen("sssssssssssssssssssss");
Assert.Throws<ArgumentException>(() => b.NewSubBranchID());
}
}
}
20 changes: 20 additions & 0 deletions tests/Dtmgrpc.Tests/Driver/DefaultDtmDriverTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,26 @@ public void ParseServerMethod_Should_Fail()
Assert.NotEmpty(error);
}

[Fact]
public void ParseServerMethod_Should_Fail_When_Url_IsNull()
{
var d = new DefaultDtmDriver();

var (server, serviceName, method, error) = d.ParseServerMethod(null);

Assert.Empty(server);
Assert.Empty(serviceName);
Assert.Empty(method);
Assert.NotEmpty(error);
}

[Fact]
public void GetName_Should_Succeed()
{
var d = new DefaultDtmDriver();
Assert.Equal("default", d.GetName());
}

[Fact]
public void AddDtmGrpc_Should_Get_Default_Driver()
{
Expand Down
95 changes: 95 additions & 0 deletions tests/Dtmgrpc.Tests/ServiceCollectionExtensionsTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
using DtmCommon;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System.Collections.Generic;
using Xunit;

namespace Dtmgrpc.Tests
{
public class ServiceCollectionExtensionsTests
{
[Fact]
public void AddDtmGrpc_With_Action_Should_Succeed()
{
var dtmUrl = "http://localhost:36789";

var services = new ServiceCollection();
services.AddDtmGrpc(x =>
{
x.DtmUrl = dtmUrl;
x.DtmGrpcUrl = dtmUrl;
x.DtmTimeout = 8000;
x.BranchTimeout = 8000;
});

var provider = services.BuildServiceProvider();

var dtmOptionsAccs = provider.GetService<IOptions<DtmOptions>>();
var dtmOptions = dtmOptionsAccs.Value;
Assert.Equal(dtmUrl, dtmOptions.DtmGrpcUrl);

var dtmClient = provider.GetRequiredService<IDtmgRPCClient>();
Assert.NotNull(dtmClient);
}

[Fact]
public void AddDtmGrpc_Without_Action_Should_Throw_Exception()
{
var services = new ServiceCollection();

Assert.Throws<System.ArgumentNullException>(() => services.AddDtmGrpc(null));
}

[Fact]
public void AddDtmGrpc_With_IConfiguration_Should_Succeed()
{
var dtmUrl = "http://localhost:36790";

var dict = new Dictionary<string, string>
{
{ "dtm:DtmUrl", dtmUrl },
{ "dtm:DtmGrpcUrl", dtmUrl },
{ "dtm:DtmTimeout", "1000" },
{ "dtm:BranchTimeout", "8000" },
};

var config = new ConfigurationBuilder().AddInMemoryCollection(dict).Build();

var services = new ServiceCollection();
services.AddDtmGrpc(config, "dtm");

var provider = services.BuildServiceProvider();

var dtmOptionsAccs = provider.GetService<IOptions<DtmOptions>>();
var dtmOptions = dtmOptionsAccs.Value;
Assert.Equal(dtmUrl, dtmOptions.DtmUrl);
Assert.Equal(dtmUrl, dtmOptions.DtmGrpcUrl);

var dtmClient = provider.GetRequiredService<IDtmgRPCClient>();
Assert.NotNull(dtmClient);
}

[Fact]
public void AddDtmGrpc_With_IConfiguration_And_Empty_Option_Should_Succeed()
{
var dtmUrl = "http://localhost:36790";

var dict = new Dictionary<string, string>
{
{ "dtmx:DtmGrpcUrl", dtmUrl },
};

var config = new ConfigurationBuilder().AddInMemoryCollection(dict).Build();

var services = new ServiceCollection();
services.AddDtmGrpc(config, "dtm");

var provider = services.BuildServiceProvider();

var dtmOptionsAccs = provider.GetService<IOptions<DtmOptions>>();
var dtmOptions = dtmOptionsAccs.Value;
Assert.NotEqual(dtmUrl, dtmOptions.DtmUrl);
}
}
}

0 comments on commit dba9d48

Please sign in to comment.