@Override public void registerForServiceAvailability(Operation.CompletionHandler completion, String nodeSelectorPath, boolean checkReplica, String... servicePaths) { if (this.enablePostgres && checkReplica) { PostgresHostUtils.registerForReplicatedServiceAvailability(this, completion, isStarted() ? getSystemAuthorizationContext() : null, nodeSelectorPath, servicePaths); return; } super.registerForServiceAvailability(completion, nodeSelectorPath, checkReplica, servicePaths); }
public static void registerForReplicatedServiceAvailability(ServiceHost host, CompletionHandler completion, AuthorizationContext authorizationContext, String nodeSelectorPath, String... servicePaths) { for (String link : servicePaths) { Operation op = Operation.createPost(host, link) .setCompletion(completion) .setExpiration(Utils.fromNowMicrosUtc(host.getOperationTimeoutMicros())); registerForReplicatedServiceAvailability(host, op, link, nodeSelectorPath, authorizationContext); } }
public static void registerForReplicatedServiceAvailability(ServiceHost host, Operation op, String servicePath, String nodeSelectorPath, AuthorizationContext authorizationContext) { CompletionHandler ch = (o, e) -> { if (e != null) { if (op.getExpirationMicrosUtc() < Utils.getSystemNowMicrosUtc()) { String msg = "Failed to check replicated service availability"; op.fail(new TimeoutException(msg)); return; } // service is not yet available, reschedule host.scheduleCore(() -> { registerForReplicatedServiceAvailability(host, op, servicePath, nodeSelectorPath, authorizationContext); }, host.getMaintenanceIntervalMicros(), TimeUnit.MICROSECONDS); return; } op.complete(); }; URI serviceUri = UriUtils.buildUri(host, servicePath); checkReplicatedServiceAvailability(ch, host, serviceUri, nodeSelectorPath, authorizationContext); }
@Override public void registerForServiceAvailability(Operation.CompletionHandler completion, String nodeSelectorPath, boolean checkReplica, String... servicePaths) { log("servicePaths %s: %s", checkReplica, Utils.toJson(servicePaths)); if (enablePostgres && checkReplica) { PostgresHostUtils.registerForReplicatedServiceAvailability(this, completion, isStarted() ? getSystemAuthorizationContext() : null, nodeSelectorPath, servicePaths); return; } super.registerForServiceAvailability(completion, nodeSelectorPath, checkReplica, servicePaths); }