@@ -279,62 +279,75 @@ internal void close()
279279 if ( ! IsEstablished ( ) ) return ;
280280 logger . Debug ( $ "Closing session with id: { sessionId } , user: { _user } , database: { database } , schema: { schema } , role: { role } , warehouse: { warehouse } , connection start timestamp: { _startTime } ") ;
281281 stopHeartBeatForThisSession ( ) ;
282+ var closeSessionRequest = PrepareCloseSessionRequest ( ) ;
283+ PostCloseSession ( closeSessionRequest , restRequester ) ;
284+ sessionToken = null ;
285+ }
282286
283- // Send a close session request
284- var queryParams = new Dictionary < string , string > ( ) ;
285- queryParams [ RestParams . SF_QUERY_SESSION_DELETE ] = "true" ;
286- queryParams [ RestParams . SF_QUERY_REQUEST_ID ] = Guid . NewGuid ( ) . ToString ( ) ;
287- queryParams [ RestParams . SF_QUERY_REQUEST_GUID ] = Guid . NewGuid ( ) . ToString ( ) ;
287+ internal void CloseNonBlocking ( )
288+ {
289+ // Nothing to do if the session is not open
290+ if ( ! IsEstablished ( ) ) return ;
291+ logger . Debug ( $ "Closing session with id: { sessionId } , user: { _user } , database: { database } , schema: { schema } , role: { role } , warehouse: { warehouse } , connection start timestamp: { _startTime } ") ;
292+ stopHeartBeatForThisSession ( ) ;
293+ var closeSessionRequest = PrepareCloseSessionRequest ( ) ;
294+ Task . Run ( ( ) => PostCloseSession ( closeSessionRequest , restRequester ) ) ;
295+ sessionToken = null ;
296+ }
288297
289- SFRestRequest closeSessionRequest = new SFRestRequest
290- {
291- Url = BuildUri ( RestPath . SF_SESSION_PATH , queryParams ) ,
292- authorizationToken = string . Format ( SF_AUTHORIZATION_SNOWFLAKE_FMT , sessionToken ) ,
293- sid = sessionId
294- } ;
298+ internal async Task CloseAsync ( CancellationToken cancellationToken )
299+ {
300+ // Nothing to do if the session is not open
301+ if ( ! IsEstablished ( ) ) return ;
302+ logger . Debug ( $ "Closing session with id: { sessionId } , user: { _user } , database: { database } , schema: { schema } , role: { role } , warehouse: { warehouse } , connection start timestamp: { _startTime } ") ;
303+ stopHeartBeatForThisSession ( ) ;
304+
305+ var closeSessionRequest = PrepareCloseSessionRequest ( ) ;
295306
296- logger . Debug ( $ "Send closeSessionRequest ") ;
297- var response = restRequester . Post < CloseResponse > ( closeSessionRequest ) ;
307+ logger . Debug ( $ "Closing session async ") ;
308+ var response = await restRequester . PostAsync < CloseResponse > ( closeSessionRequest , cancellationToken ) . ConfigureAwait ( false ) ;
298309 if ( ! response . success )
299310 {
300- logger . Debug ( $ "Failed to delete session: { sessionId } , error ignored. Code: { response . code } Message: { response . message } ") ;
311+ logger . Error ( $ "Failed to close session { sessionId } , error ignored. Code: { response . code } Message: { response . message } ") ;
301312 }
302313
303314 logger . Debug ( $ "Session closed: { sessionId } ") ;
304- // Just in case the session won't be closed twice
305315 sessionToken = null ;
306316 }
307317
308- internal async Task CloseAsync ( CancellationToken cancellationToken )
318+ private static void PostCloseSession ( SFRestRequest closeSessionRequest , IRestRequester restRequester )
309319 {
310- // Nothing to do if the session is not open
311- if ( ! IsEstablished ( ) ) return ;
312- logger . Debug ( $ "Closing session with id: { sessionId } , user: { _user } , database: { database } , schema: { schema } , role: { role } , warehouse: { warehouse } , connection start timestamp: { _startTime } ") ;
313- stopHeartBeatForThisSession ( ) ;
320+ try
321+ {
322+ logger . Debug ( $ "Closing session") ;
323+ var response = restRequester . Post < CloseResponse > ( closeSessionRequest ) ;
324+ if ( ! response . success )
325+ {
326+ logger . Error ( $ "Failed to close session: { closeSessionRequest . sid } , error ignored. Code: { response . code } Message: { response . message } ") ;
327+ }
314328
315- // Send a close session request
329+ logger . Debug ( $ "Session closed: { closeSessionRequest . sid } ") ;
330+ }
331+ catch ( Exception )
332+ {
333+ logger . Error ( $ "Failed to close session: { closeSessionRequest . sid } , because of exception.") ;
334+ throw ;
335+ }
336+ }
337+
338+ private SFRestRequest PrepareCloseSessionRequest ( )
339+ {
316340 var queryParams = new Dictionary < string , string > ( ) ;
317341 queryParams [ RestParams . SF_QUERY_SESSION_DELETE ] = "true" ;
318342 queryParams [ RestParams . SF_QUERY_REQUEST_ID ] = Guid . NewGuid ( ) . ToString ( ) ;
319343 queryParams [ RestParams . SF_QUERY_REQUEST_GUID ] = Guid . NewGuid ( ) . ToString ( ) ;
320344
321- SFRestRequest closeSessionRequest = new SFRestRequest ( )
345+ return new SFRestRequest
322346 {
323347 Url = BuildUri ( RestPath . SF_SESSION_PATH , queryParams ) ,
324348 authorizationToken = string . Format ( SF_AUTHORIZATION_SNOWFLAKE_FMT , sessionToken ) ,
325349 sid = sessionId
326350 } ;
327-
328- logger . Debug ( $ "Send async closeSessionRequest") ;
329- var response = await restRequester . PostAsync < CloseResponse > ( closeSessionRequest , cancellationToken ) . ConfigureAwait ( false ) ;
330- if ( ! response . success )
331- {
332- logger . Debug ( $ "Failed to delete session { sessionId } , error ignored. Code: { response . code } Message: { response . message } ") ;
333- }
334-
335- logger . Debug ( $ "Session closed: { sessionId } ") ;
336- // Just in case the session won't be closed twice
337- sessionToken = null ;
338351 }
339352
340353 internal bool IsEstablished ( ) => sessionToken != null ;
0 commit comments