1- using Dtmcli ;
1+ using System ;
2+ using Dtmcli ;
23using DtmMongoBarrier ;
34using DtmSample . Dtos ;
45using Microsoft . AspNetCore . Mvc ;
@@ -36,6 +37,9 @@ public MsgTestController(ILogger<MsgTestController> logger, IOptions<AppSettings
3637 private MySqlConnection GetMysqlConn ( ) => new ( _settings . SqlBarrierConn ) ;
3738
3839 private SqlConnection GetMssqlConn ( ) => new ( _settings . SqlBarrierConn ) ;
40+
41+ private SqlConnection GetBadMssqlConn ( ) => new ( _settings . SqlBarrierErrorConn ) ;
42+
3943
4044 private MySqlConnection GetErrConn ( ) => new ( "" ) ;
4145
@@ -115,6 +119,40 @@ await msg.DoAndSubmitDB(_settings.BusiUrl + "/msg-mssqlqueryprepared", conn, asy
115119 return Ok ( TransResponse . BuildSucceedResponse ( ) ) ;
116120 }
117121
122+
123+ /// <summary>
124+ /// MSG DoAndSubmitDB (mssql). db connection error, DTM server Status should be prepared.
125+ /// </summary>
126+ /// <param name="cancellationToken"></param>
127+ /// <returns></returns>
128+ [ HttpPost ( "msg-db-mssql-db-connection-error" ) ]
129+ public async Task < IActionResult > MsgDbMsSql_DbConnectionError ( CancellationToken cancellationToken )
130+ {
131+ var gid = await _dtmClient . GenGid ( cancellationToken ) ;
132+
133+ var msg = _transFactory . NewMsg ( gid )
134+ . Add ( _settings . BusiUrl + "/TransOut" , new TransRequest ( "1" , - 30 ) )
135+ . Add ( _settings . BusiUrl + "/TransIn" , new TransRequest ( "2" , 30 ) ) ;
136+
137+ try
138+ {
139+ using ( SqlConnection conn = GetBadMssqlConn ( ) )
140+ {
141+ await msg . DoAndSubmitDB ( _settings . BusiUrl + "/msg-mssqlqueryprepared" , conn , async tx => { await Task . CompletedTask ; } ) ;
142+ }
143+ }
144+ catch ( SqlException )
145+ {
146+ Thread . Sleep ( 5 * 1000 ) ;
147+ _logger . LogInformation ( "{}/admin/global-transactions/detail/{}, status should be prepared" , _settings . DtmUrl , gid ) ;
148+ throw ;
149+ }
150+
151+ _logger . LogInformation ( "result gid is {0}" , gid ) ;
152+ return Ok ( TransResponse . BuildSucceedResponse ( ) ) ;
153+ }
154+
155+
118156 /// <summary>
119157 /// MSG DoAndSubmit (mongo)
120158 /// </summary>
@@ -184,7 +222,22 @@ public async Task<IActionResult> MsgMySqlQueryPrepared(CancellationToken cancell
184222 }
185223 }
186224
225+ /// <summary>
226+ /// MSG QueryPrepared(mongo)
227+ /// </summary>
228+ /// <param name="cancellationToken"></param>
229+ /// <returns></returns>
230+ [ HttpGet ( "msg-mongoqueryprepared" ) ]
231+ public async Task < IActionResult > MsgMongoQueryPrepared ( CancellationToken cancellationToken )
232+ {
233+ var bb = _factory . CreateBranchBarrier ( Request . Query ) ;
234+ _logger . LogInformation ( "bb {0}" , bb ) ;
187235
236+ MongoDB . Driver . IMongoClient cli = new MongoDB . Driver . MongoClient ( _settings . MongoBarrierConn ) ;
237+ var res = await bb . MongoQueryPrepared ( cli ) ;
238+ return Ok ( new { dtm_result = res } ) ;
239+ }
240+
188241 /// <summary>
189242 /// MSG QueryPrepared(mssql)
190243 ///
@@ -211,28 +264,23 @@ public async Task<IActionResult> MsgMsSqlQueryPrepared(CancellationToken cancell
211264 {
212265 var bb = _factory . CreateBranchBarrier ( Request . Query ) ;
213266 _logger . LogInformation ( "bb {0}" , bb ) ;
214- using ( SqlConnection conn = GetMssqlConn ( ) )
215- {
216- var res = await bb . QueryPrepared ( conn ) ;
217267
218- return Ok ( new { dtm_result = res } ) ;
268+ string ret ;
269+ await using ( SqlConnection conn = GetMssqlConn ( ) )
270+ {
271+ ret = await bb . QueryPrepared ( conn ) ;
219272 }
273+
274+ ret = Dtmcli . DtmImp . Utils . OrString ( ret , DtmCommon . Constant . ResultSuccess ) ;
275+ Exception error = Dtmcli . DtmImp . Utils . String2DtmError ( ret ) ;
276+
277+ return WrapHandler ( error ) ;
220278 }
221279
222- /// <summary>
223- /// MSG QueryPrepared(mongo)
224- /// </summary>
225- /// <param name="cancellationToken"></param>
226- /// <returns></returns>
227- [ HttpGet ( "msg-mongoqueryprepared" ) ]
228- public async Task < IActionResult > MsgMongoQueryPrepared ( CancellationToken cancellationToken )
280+ private IActionResult WrapHandler ( Exception error )
229281 {
230- var bb = _factory . CreateBranchBarrier ( Request . Query ) ;
231- _logger . LogInformation ( "bb {0}" , bb ) ;
232-
233- MongoDB . Driver . IMongoClient cli = new MongoDB . Driver . MongoClient ( _settings . MongoBarrierConn ) ;
234- var res = await bb . MongoQueryPrepared ( cli ) ;
235- return Ok ( new { dtm_result = res } ) ;
282+ ( int status , object res ) = Dtmcli . DtmImp . Utils . Result2HttpJson ( error ) ;
283+ return StatusCode ( status , res ) ;
236284 }
237285
238286 /// <summary>
0 commit comments