@@ -35,8 +35,6 @@ namespace DataStax.AstraDB.DataApi.Admin;
3535/// </example>
3636public class AstraDatabasesAdmin
3737{
38- private const int WAIT_IN_SECONDS = 600 ;
39-
4038 private readonly CommandOptions _adminOptions ;
4139 private readonly DataApiClient _client ;
4240
@@ -360,7 +358,7 @@ internal async Task<IDatabaseAdmin> CreateDatabaseAsync(DatabaseCreationOptions
360358 if ( existingDb . Status == "ACTIVE" )
361359 {
362360 Console . WriteLine ( $ "Database { databaseName } already exists and is ACTIVE.") ;
363- return GetDatabaseAdmin ( Guid . Parse ( existingDb . Id ) ) ;
361+ return GetDatabaseAdmin ( existingDb ) ;
364362 }
365363
366364 throw new InvalidOperationException ( $ "Database { databaseName } already exists but is in state: { existingDb . Status } ") ;
@@ -403,63 +401,29 @@ internal async Task<IDatabaseAdmin> CreateDatabaseAsync(DatabaseCreationOptions
403401
404402 private void WaitForDatabase ( string databaseName )
405403 {
406- WaitForDatabaseAsync ( databaseName , true ) . ResultSync ( ) ;
407- }
408-
409- private async Task WaitForDatabaseAsync ( string databaseName )
410- {
411- await WaitForDatabaseAsync ( databaseName , false ) . ConfigureAwait ( false ) ;
404+ WaitForDatabaseAsync ( databaseName ) . ResultSync ( ) ;
412405 }
413406
414- internal async Task WaitForDatabaseAsync ( string databaseName , bool runSynchronously )
407+ internal async Task WaitForDatabaseAsync ( string databaseName )
415408 {
409+ const int MAX_WAIT_IN_SECONDS = 600 ;
410+ const int SLEEP_SECONDS = 5 ;
416411 Guard . NotNullOrEmpty ( databaseName , nameof ( databaseName ) ) ;
417- if ( runSynchronously )
418- {
419- Console . WriteLine ( $ "Waiting { WAIT_IN_SECONDS } seconds synchronously before checking db status...") ;
420- Thread . Sleep ( WAIT_IN_SECONDS * 1000 ) ;
421- string status = GetDatabaseStatus ( databaseName ) ;
422412
423- if ( status != "ACTIVE" )
424- {
425- throw new Exception ( $ "Database { databaseName } is still { status } after { WAIT_IN_SECONDS } seconds.") ;
426- }
413+ int secondsWaited = 0 ;
427414
428- Console . WriteLine ( $ "Database { databaseName } is ready.") ;
429- return ;
430- }
431-
432- const int retry = 30_000 ; // 30 seconds
433- int waiting = 0 ;
434-
435- while ( waiting < WAIT_IN_SECONDS * 1000 )
415+ while ( secondsWaited < MAX_WAIT_IN_SECONDS )
436416 {
437417 string status = await GetDatabaseStatusAsync ( databaseName ) . ConfigureAwait ( false ) ;
438418 if ( status == "ACTIVE" )
439419 {
440- Console . WriteLine ( $ "Database { databaseName } is ready.") ;
441420 return ;
442421 }
443-
444- Console . WriteLine ( $ "Database { databaseName } is { status } ... retrying in { retry / 1000 } seconds.") ;
445- await Task . Delay ( retry ) . ConfigureAwait ( false ) ;
446- waiting += retry ;
447- }
448-
449- throw new Exception ( $ "Database { databaseName } did not become ready within { WAIT_IN_SECONDS } seconds.") ;
450- }
451-
452- internal string GetDatabaseStatus ( string databaseName )
453- {
454- Guard . NotNullOrEmpty ( databaseName , nameof ( databaseName ) ) ;
455- var db = ListDatabases ( ) . FirstOrDefault ( item => databaseName . Equals ( item . Info . Name ) ) ;
456-
457- if ( db == null )
458- {
459- throw new Exception ( $ "Database '{ databaseName } ' not found.") ;
422+ await Task . Delay ( SLEEP_SECONDS * 1000 ) . ConfigureAwait ( false ) ;
423+ secondsWaited += SLEEP_SECONDS ;
460424 }
461425
462- return db . Status ;
426+ throw new Exception ( $ "Database { databaseName } did not become ready within { MAX_WAIT_IN_SECONDS } seconds." ) ;
463427 }
464428
465429 internal async Task < string > GetDatabaseStatusAsync ( string databaseName )
@@ -638,10 +602,19 @@ internal async Task<bool> DropDatabaseAsync(Guid dbGuid, CommandOptions options,
638602 return false ;
639603 }
640604
641- private IDatabaseAdmin GetDatabaseAdmin ( Guid dbGuid )
605+ private DatabaseAdminAstra GetDatabaseAdmin ( DatabaseInfo dbInfo )
642606 {
643- Guard . NotEmpty ( dbGuid , nameof ( dbGuid ) ) ;
644- return new DatabaseAdminAstra ( dbGuid , _client , null ) ;
607+ var apiEndpoint = $ "https://{ dbInfo . Id } -{ dbInfo . Info . Region } .apps.astra.datastax.com";
608+ var database = _client . GetDatabase ( apiEndpoint ) ;
609+ return new DatabaseAdminAstra ( database , _client , null ) ;
610+ }
611+
612+ private DatabaseAdminAstra GetDatabaseAdmin ( Guid dbGuid )
613+ {
614+ var dbInfo = GetDatabaseInfo ( dbGuid ) ;
615+ var apiEndpoint = $ "https://{ dbGuid } -{ dbInfo . Info . Region } .apps.astra.datastax.com";
616+ var database = _client . GetDatabase ( apiEndpoint ) ;
617+ return new DatabaseAdminAstra ( database , _client , null ) ;
645618 }
646619
647620 /// <summary>
0 commit comments