@Override public final T handleException(Request request, Exception exception) { if (exception instanceof InterruptedException) { throw new DiscoveryException(name + " was interrupted for " + uri); } if (exception instanceof CancellationException) { throw new DiscoveryException(name + " was canceled for " + uri); } if (exception instanceof DiscoveryException) { throw (DiscoveryException) exception; } throw new DiscoveryException(name + " failed for " + uri, exception); } }
@Override public final T handleException(Request request, Exception exception) { if (exception instanceof InterruptedException) { throw new DiscoveryException(name + " was interrupted for " + uri); } if (exception instanceof CancellationException) { throw new DiscoveryException(name + " was canceled for " + uri); } if (exception instanceof DiscoveryException) { throw (DiscoveryException) exception; } throw new DiscoveryException(name + " failed for " + uri, exception); } }
@Override public final DiscoveryException handleException(Request request, Exception exception) { if (exception instanceof InterruptedException) { return new DiscoveryException(name + " was interrupted"); } if (exception instanceof CancellationException) { return new DiscoveryException(name + " was canceled"); } if (exception instanceof DiscoveryException) { throw (DiscoveryException) exception; } return new DiscoveryException(name + " failed", exception); } }
@Override public final DiscoveryException handleException(Request request, Exception exception) { if (exception instanceof InterruptedException) { return new DiscoveryException(name + " was interrupted"); } if (exception instanceof CancellationException) { return new DiscoveryException(name + " was canceled"); } if (exception instanceof DiscoveryException) { throw (DiscoveryException) exception; } return new DiscoveryException(name + " failed", exception); } }
@Override public final T handleException(Request request, Exception exception) { if (exception instanceof InterruptedException) { throw new DiscoveryException(name + " was interrupted for " + uri); } if (exception instanceof CancellationException) { throw new DiscoveryException(name + " was canceled for " + uri); } if (exception instanceof DiscoveryException) { throw (DiscoveryException) exception; } throw new DiscoveryException(name + " failed for " + uri, exception); } }
@Override public final T handleException(Request request, Exception exception) { if (exception instanceof InterruptedException) { throw new DiscoveryException(name + " was interrupted for " + uri); } if (exception instanceof CancellationException) { throw new DiscoveryException(name + " was canceled for " + uri); } if (exception instanceof DiscoveryException) { throw (DiscoveryException) exception; } throw new DiscoveryException(name + " failed for " + uri, exception); } }
@Override public DiscoveryException apply(Exception e) { if (e instanceof InterruptedException) { Thread.currentThread().interrupt(); return new DiscoveryException(name + " was interrupted"); } if (e instanceof CancellationException) { return new DiscoveryException(name + " was canceled"); } Throwable cause = e; if (e instanceof ExecutionException) { if (e.getCause() != null) { cause = e.getCause(); } } if (cause instanceof DiscoveryException) { return (DiscoveryException) cause; } return new DiscoveryException(name + " failed", cause); } });
@Override public Duration handle(Request request, Response response) throws DiscoveryException { int statusCode = response.getStatusCode(); if (!isSuccess(statusCode)) { throw new DiscoveryException(String.format("Announcement failed with status code %s: %s", statusCode, getBodyForError(response))); } Duration maxAge = extractMaxAge(response); return maxAge; } });
@Override public Duration handle(Request request, Response response) throws DiscoveryException { int statusCode = response.getStatusCode(); if (!isSuccess(statusCode)) { throw new DiscoveryException(String.format("Announcement failed with status code %s: %s", statusCode, getBodyForError(response))); } Duration maxAge = extractMaxAge(response); return maxAge; } });
@Override public Duration handle(Request request, Response response) throws DiscoveryException { int statusCode = response.getStatusCode(); if (!isSuccess(statusCode)) { throw new DiscoveryException(String.format("Announcement failed with status code %s: %s", statusCode, getBodyForError(response))); } Duration maxAge = extractMaxAge(response); return maxAge; } });
public ServiceDescriptors(String type, String pool, List<ServiceDescriptor> serviceDescriptors, Duration maxAge, String eTag) { requireNonNull(type, "type is null"); requireNonNull(serviceDescriptors, "serviceDescriptors is null"); requireNonNull(maxAge, "maxAge is null"); this.type = type; this.pool = pool; this.serviceDescriptors = ImmutableList.copyOf(serviceDescriptors); this.maxAge = maxAge; this.eTag = eTag; // verify service descriptors match expected type for (ServiceDescriptor serviceDescriptor : this.serviceDescriptors) { if (!type.equals(serviceDescriptor.getType()) || (pool != null && !pool.equals(serviceDescriptor.getPool()))) { throw new DiscoveryException(format("Expected %s service descriptor from pool %s, but was %s service descriptor from pool %s", type, pool, serviceDescriptor.getType(), serviceDescriptor.getPool())); } } }
public ServiceDescriptors(String type, String pool, List<ServiceDescriptor> serviceDescriptors, Duration maxAge, String eTag) { Preconditions.checkNotNull(type, "type is null"); Preconditions.checkNotNull(serviceDescriptors, "serviceDescriptors is null"); Preconditions.checkNotNull(maxAge, "maxAge is null"); this.type = type; this.pool = pool; this.serviceDescriptors = ImmutableList.copyOf(serviceDescriptors); this.maxAge = maxAge; this.eTag = eTag; // verify service descriptors match expected type for (ServiceDescriptor serviceDescriptor : this.serviceDescriptors) { if (!type.equals(serviceDescriptor.getType()) || (pool != null && !pool.equals(serviceDescriptor.getPool()))) { throw new DiscoveryException(format("Expected %s service descriptor from pool %s, but was %s service descriptor from pool %s", type, pool, serviceDescriptor.getType(), serviceDescriptor.getPool())); } } }
public ServiceDescriptors(String type, String pool, List<ServiceDescriptor> serviceDescriptors, Duration maxAge, String eTag) { Preconditions.checkNotNull(type, "type is null"); Preconditions.checkNotNull(serviceDescriptors, "serviceDescriptors is null"); Preconditions.checkNotNull(maxAge, "maxAge is null"); this.type = type; this.pool = pool; this.serviceDescriptors = ImmutableList.copyOf(serviceDescriptors); this.maxAge = maxAge; this.eTag = eTag; // verify service descriptors match expected type for (ServiceDescriptor serviceDescriptor : this.serviceDescriptors) { if (!type.equals(serviceDescriptor.getType()) || (pool != null && !pool.equals(serviceDescriptor.getPool()))) { throw new DiscoveryException(format("Expected %s service descriptor from pool %s, but was %s service descriptor from pool %s", type, pool, serviceDescriptor.getType(), serviceDescriptor.getPool())); } } }
@Override public ServiceDescriptors handle(Request request, Response response) { Duration maxAge = extractMaxAge(response); String eTag = response.getHeader(HttpHeaders.ETAG); if (NOT_MODIFIED.code() == response.getStatusCode() && serviceDescriptors != null) { return new ServiceDescriptors(serviceDescriptors, maxAge, eTag); } if (OK.code() != response.getStatusCode()) { throw new DiscoveryException(format("Lookup of %s failed with status code %s", type, response.getStatusCode())); } String json; try { json = CharStreams.toString(new InputStreamReader(response.getInputStream(), Charsets.UTF_8)); } catch (IOException e) { throw new DiscoveryException(format("Lookup of %s failed", type), e); } ServiceDescriptorsRepresentation serviceDescriptorsRepresentation = serviceDescriptorsCodec.fromJson(json); if (!environment.equals(serviceDescriptorsRepresentation.getEnvironment())) { throw new DiscoveryException(format("Expected environment to be %s, but was %s", environment, serviceDescriptorsRepresentation.getEnvironment())); } return new ServiceDescriptors( type, pool, serviceDescriptorsRepresentation.getServiceDescriptors(), maxAge, eTag); } });
@Override public ServiceDescriptors handle(Request request, Response response) { Duration maxAge = extractMaxAge(response); String eTag = response.getHeader(HttpHeaders.ETAG); if (NOT_MODIFIED.code() == response.getStatusCode() && serviceDescriptors != null) { return new ServiceDescriptors(serviceDescriptors, maxAge, eTag); } if (OK.code() != response.getStatusCode()) { throw new DiscoveryException(format("Lookup of %s failed with status code %s", type, response.getStatusCode())); } byte[] json; try { json = ByteStreams.toByteArray(response.getInputStream()); } catch (IOException e) { throw new DiscoveryException(format("Lookup of %s failed", type), e); } ServiceDescriptorsRepresentation serviceDescriptorsRepresentation = serviceDescriptorsCodec.fromJson(json); if (!environment.equals(serviceDescriptorsRepresentation.getEnvironment())) { throw new DiscoveryException(format("Expected environment to be %s, but was %s", environment, serviceDescriptorsRepresentation.getEnvironment())); } return new ServiceDescriptors( type, pool, serviceDescriptorsRepresentation.getServiceDescriptors(), maxAge, eTag); } });
@Override public ServiceDescriptors handle(Request request, Response response) { Duration maxAge = extractMaxAge(response); String eTag = response.getHeader(HttpHeaders.ETAG); if (NOT_MODIFIED.code() == response.getStatusCode() && serviceDescriptors != null) { return new ServiceDescriptors(serviceDescriptors, maxAge, eTag); } if (OK.code() != response.getStatusCode()) { throw new DiscoveryException(format("Lookup of %s failed with status code %s", type, response.getStatusCode())); } byte[] json; try { json = ByteStreams.toByteArray(response.getInputStream()); } catch (IOException e) { throw new DiscoveryException(format("Lookup of %s failed", type), e); } ServiceDescriptorsRepresentation serviceDescriptorsRepresentation = serviceDescriptorsCodec.fromJson(json); if (!environment.equals(serviceDescriptorsRepresentation.getEnvironment())) { throw new DiscoveryException(format("Expected environment to be %s, but was %s", environment, serviceDescriptorsRepresentation.getEnvironment())); } return new ServiceDescriptors( type, pool, serviceDescriptorsRepresentation.getServiceDescriptors(), maxAge, eTag); } });
@Override public CheckedFuture<Void, DiscoveryException> unannounce() { URI uri = discoveryServiceURI.get(); if (uri == null) { return Futures.immediateFailedCheckedFuture(new DiscoveryException("No discovery servers are available")); } Request request = prepareDelete() .setUri(URI.create(uri + "/v1/announcement/" + nodeInfo.getNodeId())) .setHeader("User-Agent", nodeInfo.getNodeId()) .build(); return httpClient.executeAsync(request, new DiscoveryResponseHandler<Void>("Unannouncement")); }
@Override public ListenableFuture<Duration> announce(Set<ServiceAnnouncement> services) { requireNonNull(services, "services is null"); URI uri = discoveryServiceURI.get(); if (uri == null) { return immediateFailedFuture(new DiscoveryException("No discovery servers are available")); } Announcement announcement = new Announcement(nodeInfo.getEnvironment(), nodeInfo.getNodeId(), nodeInfo.getPool(), nodeInfo.getLocation(), services); Request request = preparePut() .setUri(URI.create(uri + "/v1/announcement/" + nodeInfo.getNodeId())) .setHeader("User-Agent", nodeInfo.getNodeId()) .setHeader("Content-Type", MEDIA_TYPE_JSON.toString()) .setBodyGenerator(jsonBodyGenerator(announcementCodec, announcement)) .build(); return httpClient.executeAsync(request, new DiscoveryResponseHandler<Duration>("Announcement", uri) { @Override public Duration handle(Request request, Response response) throws DiscoveryException { int statusCode = response.getStatusCode(); if (!isSuccess(statusCode)) { throw new DiscoveryException(String.format("Announcement failed with status code %s: %s", statusCode, getBodyForError(response))); } Duration maxAge = extractMaxAge(response); return maxAge; } }); }
@Override public ListenableFuture<Duration> announce(Set<ServiceAnnouncement> services) { Preconditions.checkNotNull(services, "services is null"); URI uri = discoveryServiceURI.get(); if (uri == null) { return Futures.immediateFailedCheckedFuture(new DiscoveryException("No discovery servers are available")); } Announcement announcement = new Announcement(nodeInfo.getEnvironment(), nodeInfo.getNodeId(), nodeInfo.getPool(), nodeInfo.getLocation(), services); Request request = preparePut() .setUri(URI.create(uri + "/v1/announcement/" + nodeInfo.getNodeId())) .setHeader("User-Agent", nodeInfo.getNodeId()) .setHeader("Content-Type", MEDIA_TYPE_JSON.toString()) .setBodyGenerator(jsonBodyGenerator(announcementCodec, announcement)) .build(); return httpClient.executeAsync(request, new DiscoveryResponseHandler<Duration>("Announcement", uri) { @Override public Duration handle(Request request, Response response) throws DiscoveryException { int statusCode = response.getStatusCode(); if (!isSuccess(statusCode)) { throw new DiscoveryException(String.format("Announcement failed with status code %s: %s", statusCode, getBodyForError(response))); } Duration maxAge = extractMaxAge(response); return maxAge; } }); }
@Override public CheckedFuture<Duration, DiscoveryException> announce(Set<ServiceAnnouncement> services) { Preconditions.checkNotNull(services, "services is null"); URI uri = discoveryServiceURI.get(); if (uri == null) { return Futures.immediateFailedCheckedFuture(new DiscoveryException("No discovery servers are available")); } Announcement announcement = new Announcement(nodeInfo.getEnvironment(), nodeInfo.getNodeId(), nodeInfo.getPool(), nodeInfo.getLocation(), services); Request request = preparePut() .setUri(URI.create(uri + "/v1/announcement/" + nodeInfo.getNodeId())) .setHeader("User-Agent", nodeInfo.getNodeId()) .setHeader("Content-Type", MEDIA_TYPE_JSON.toString()) .setBodyGenerator(jsonBodyGenerator(announcementCodec, announcement)) .build(); return httpClient.executeAsync(request, new DiscoveryResponseHandler<Duration>("Announcement") { @Override public Duration handle(Request request, Response response) throws DiscoveryException { int statusCode = response.getStatusCode(); if (!isSuccess(statusCode)) { throw new DiscoveryException(String.format("Announcement failed with status code %s: %s", statusCode, getBodyForError(response))); } Duration maxAge = extractMaxAge(response); return maxAge; } }); }