+ synchronized (this) {
+ final ShardState recheck = state;
+ if (recheck != null) {
+ return recheck.getStage();
+ }
+
+ final ShardState newState = resolveBackendInfo(shardName, 0);
+ state = newState;
+
+ final CompletionStage<ShardBackendInfo> stage = newState.getStage();
+ stage.whenComplete((info, failure) -> {
+ if (failure != null) {
+ synchronized (SimpleShardBackendResolver.this) {
+ if (state == newState) {
+ state = null;
+ }
+ }
+ }
+ });
+
+ return stage;
+ }