Skip to content

Commit ed9067a

Browse files
authored
mongodb busiCall allow commit trans by user (#74)
* mongodb busiCall allow commit trans by user * Extract duplicate code logic to MongoCallCore * Optimize code * fix busiCall
1 parent c86f875 commit ed9067a

File tree

1 file changed

+26
-14
lines changed

1 file changed

+26
-14
lines changed

src/DtmMongoBarrier/MongoBranchBarrier.cs

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@ namespace DtmMongoBarrier
1111
public static class MongoBranchBarrier
1212
{
1313
public static async Task MongoCall(this BranchBarrier bb, IMongoClient mc, Func<IClientSessionHandle, Task> busiCall)
14+
{
15+
Func<IClientSessionHandle, Task<bool>> innerCall = async session =>
16+
{
17+
await busiCall.Invoke(session);
18+
19+
return true;
20+
};
21+
await MongoCall(bb, mc, innerCall);
22+
}
23+
24+
public static async Task MongoCall(this BranchBarrier bb, IMongoClient mc, Func<IClientSessionHandle, Task<bool>> busiCall)
1425
{
1526
bb.BarrierID = bb.BarrierID + 1;
1627
var bid = bb.BarrierID.ToString().PadLeft(2, '0');
@@ -41,14 +52,16 @@ public static async Task MongoCall(this BranchBarrier bb, IMongoClient mc, Func<
4152

4253
if (isNullCompensation || isDuplicateOrPend)
4354
{
44-
bb?.Logger?.LogInformation("mongo Will not exec busiCall, isNullCompensation={isNullCompensation}, isDuplicateOrPend={isDuplicateOrPend}", isNullCompensation, isDuplicateOrPend);
55+
bb?.Logger?.LogInformation("mongo Will not exec busiCall, isNullCompensation={isNullCompensation}, isDuplicateOrPend={isDuplicateOrPend}", isNullCompensation, isDuplicateOrPend);
4556
await session.CommitTransactionAsync();
4657
return;
4758
}
59+
var autoCommit = await busiCall.Invoke(session);
4860

49-
await busiCall.Invoke(session);
50-
51-
await session.CommitTransactionAsync();
61+
if (autoCommit)
62+
{
63+
await session.CommitTransactionAsync();
64+
}
5265
}
5366
catch (Exception ex)
5467
{
@@ -59,20 +72,19 @@ public static async Task MongoCall(this BranchBarrier bb, IMongoClient mc, Func<
5972
throw;
6073
}
6174
}
62-
6375
public static async Task<string> MongoQueryPrepared(this BranchBarrier bb, IMongoClient mc)
6476
{
6577
var session = await mc.StartSessionAsync();
6678

6779
try
6880
{
69-
await MongoInsertBarrier(
70-
bb,
71-
session,
72-
Constant.Barrier.MSG_BRANCHID,
73-
Constant.TYPE_MSG,
74-
Constant.Barrier.MSG_BARRIER_ID,
75-
Constant.Barrier.MSG_BARRIER_REASON);
81+
await MongoInsertBarrier(
82+
bb,
83+
session,
84+
Constant.Barrier.MSG_BRANCHID,
85+
Constant.TYPE_MSG,
86+
Constant.Barrier.MSG_BARRIER_ID,
87+
Constant.Barrier.MSG_BARRIER_REASON);
7688
}
7789
catch (Exception ex)
7890
{
@@ -81,7 +93,7 @@ await MongoInsertBarrier(
8193
}
8294

8395
var reason = string.Empty;
84-
96+
8597
try
8698
{
8799
var barrier = session.Client.GetDatabase(bb.DtmOptions.BarrierMongoDbName)
@@ -155,7 +167,7 @@ await barrier.InsertOneAsync(new DtmBarrierDocument
155167
}
156168

157169
private static FilterDefinition<DtmBarrierDocument> BuildFilters(string gid, string branchId, string op, string barrierId)
158-
{
170+
{
159171
return new FilterDefinitionBuilder<DtmBarrierDocument>().And(
160172
Builders<DtmBarrierDocument>.Filter.Eq(x => x.GId, gid),
161173
Builders<DtmBarrierDocument>.Filter.Eq(x => x.BranchId, branchId),

0 commit comments

Comments
 (0)