@Override
    public void afterUpdate(boolean isUpdateSucceeded) {
      if (!isUpdateSucceeded && newBlobID != null) {
        // Delete the ambry blob regardless what error fails the update.
        try {
          logger.info("Removing blob {} since the update failed", newBlobID);
          // Block this execution? or maybe wait for a while then get out?
          router.get().deleteBlob(newBlobID, SERVICE_ID).get();
        } catch (Exception e) {
          logger.error("Failed to delete blob={}", newBlobID, e);
          accountServiceMetrics.accountDeletesToAmbryServerErrorCount.inc();
        }
      }
      // Notice this logic might end up with the dangling blobs, when the process crashes before the for loop.
      // But since the frequency to update account metadata is pretty rare, it won't be a big problem.
      if (isUpdateSucceeded && oldBlobIDsToDelete != null) {
        for (String blobID : oldBlobIDsToDelete) {
          try {
            logger.info("Removing blob {}", blobID);
            // Block this execution? or maybe wait for a while then get out?
            router.get().deleteBlob(blobID, SERVICE_ID).get();
          } catch (Exception e) {
            logger.error("Failed to delete blob={}", blobID, e);
            accountServiceMetrics.accountDeletesToAmbryServerErrorCount.inc();
          }
        }
      }
    }
@param accounts The {@link Account}s to update.
ambry-account/src/main/java/com/github/ambry/account/RouterStore.java