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