@@ -298,25 +298,44 @@ private void cleanUpOldDatabases(InstanceId instanceId) {
298298 String TEST_DB_REGEX = "(testdb_(.*)_(.*))|(mysample-(.*))" ;
299299
300300 logger .log (Level .INFO , "Dropping old test databases from {0}" , instanceId .getName ());
301- for ( Database db : databaseAdminClient . listDatabases ( instanceId . getInstance ()). iterateAll () ) {
301+ while ( true ) {
302302 try {
303- long timeDiff = currentTimestamp .getSeconds () - db .getCreateTime ().getSeconds ();
304- // Delete all databases which are more than OLD_DB_THRESHOLD_SECS seconds old.
305- if ((db .getId ().getDatabase ().matches (TEST_DB_REGEX ))
306- && (timeDiff > OLD_DB_THRESHOLD_SECS )) {
307- logger .log (Level .INFO , "Dropping test database {0}" , db .getId ());
308- if (db .isDropProtectionEnabled ()) {
309- Database updatedDatabase =
310- databaseAdminClient .newDatabaseBuilder (db .getId ()).disableDropProtection ().build ();
311- databaseAdminClient
312- .updateDatabase (updatedDatabase , DatabaseField .DROP_PROTECTION )
313- .get ();
303+ for (Database db :
304+ databaseAdminClient .listDatabases (instanceId .getInstance ()).iterateAll ()) {
305+ try {
306+ long timeDiff = currentTimestamp .getSeconds () - db .getCreateTime ().getSeconds ();
307+ // Delete all databases which are more than OLD_DB_THRESHOLD_SECS seconds old.
308+ if ((db .getId ().getDatabase ().matches (TEST_DB_REGEX ))
309+ && (timeDiff > OLD_DB_THRESHOLD_SECS )) {
310+ logger .log (Level .INFO , "Dropping test database {0}" , db .getId ());
311+ if (db .isDropProtectionEnabled ()) {
312+ Database updatedDatabase =
313+ databaseAdminClient
314+ .newDatabaseBuilder (db .getId ())
315+ .disableDropProtection ()
316+ .build ();
317+ databaseAdminClient
318+ .updateDatabase (updatedDatabase , DatabaseField .DROP_PROTECTION )
319+ .get ();
320+ }
321+ db .drop ();
322+ ++numDropped ;
323+ }
324+ } catch (SpannerException | ExecutionException | InterruptedException e ) {
325+ logger .log (Level .SEVERE , "Failed to drop test database " + db .getId (), e );
314326 }
315- db .drop ();
316- ++numDropped ;
317327 }
318- } catch (SpannerException | ExecutionException | InterruptedException e ) {
319- logger .log (Level .SEVERE , "Failed to drop test database " + db .getId (), e );
328+ break ;
329+ } catch (SpannerException exception ) {
330+ if (exception .getErrorCode () != ErrorCode .RESOURCE_EXHAUSTED ) {
331+ throw exception ;
332+ }
333+ // Wait a little and try again.
334+ try {
335+ Thread .sleep (10_000 );
336+ } catch (InterruptedException interruptedException ) {
337+ throw SpannerExceptionFactory .propagateInterrupt (interruptedException );
338+ }
320339 }
321340 }
322341 logger .log (Level .INFO , "Dropped {0} test database(s)" , numDropped );
0 commit comments