docs: private CompletableFuture<Void> bootstrap(int attempt, CompletableFuture<Void> future) {
      Futures.allOf(membershipService.getMembers().stream()
          .filter(node -> !node.id().equals(membershipService.getLocalMember().id()))
          .map(node -> bootstrap(node))
          .collect(Collectors.toList()))
          .whenComplete((result, error) -> {
            if (error == null) {
              if (systemGroup == null) {
                LOGGER.warn("Failed to locate management group via bootstrap nodes. Please ensure partition "
                    + "groups are configured either locally or remotely and the node is able to reach partition group members.");
                threadContext.schedule(Duration.ofSeconds(FIBONACCI_NUMBERS[Math.min(attempt, 4)]), () -> bootstrap(attempt + 1, future));
              } else if (groups.isEmpty() && attempt < MAX_PARTITION_GROUP_ATTEMPTS) {
                LOGGER.warn("Failed to locate partition group(s) via bootstrap nodes. Please ensure partition "
                    + "groups are configured either locally or remotely and the node is able to reach partition group members.");
                threadContext.schedule(Duration.ofSeconds(FIBONACCI_NUMBERS[Math.min(attempt, 4)]), () -> bootstrap(attempt + 1, future));
              } else {
                future.complete(null);
              }
            } else {
              future.completeExceptionally(error);
            }
          });
      return future;
    }