@Override public Iterator<Discoverable> iterator() { return serviceDiscovered.iterator(); } }
@Override public Cancellable watchChanges(ChangeListener listener, Executor executor) { return serviceDiscovered.watchChanges(listener, executor); }
@Override public String getName() { return serviceDiscovered.getName(); }
@Override public boolean contains(Discoverable discoverable) { return delegate.contains(discoverable); }
@Override public boolean contains(Discoverable discoverable) { return serviceDiscovered.contains(discoverable); }
@Override public Iterator<Discoverable> iterator() { return serviceDiscovered.iterator(); } }
private CancellableServiceDiscovered(ServiceDiscovered serviceDiscovered, ServiceDiscovered.ChangeListener listener, Executor executor) { this.cancellable = serviceDiscovered.watchChanges(listener, executor); this.serviceDiscovered = serviceDiscovered; }
@Override public String getName() { return delegate.getName(); }
@Override public boolean contains(Discoverable discoverable) { return serviceDiscovered.contains(discoverable); }
private CancellableServiceDiscovered(ServiceDiscovered serviceDiscovered, ServiceDiscovered.ChangeListener listener, Executor executor) { this.cancellable = serviceDiscovered.watchChanges(listener, executor); this.serviceDiscovered = serviceDiscovered; }
@Override public String getName() { return serviceDiscovered.getName(); }
@Override public Boolean call() throws Exception { return discoveryServiceClient.discover(Constants.Service.TRANSACTION).iterator().hasNext(); } }, timeout, TimeUnit.SECONDS, Math.min(timeout, Math.max(10, timeout / 10)), TimeUnit.SECONDS);
@Override public Cancellable watchChanges(ChangeListener changeListener, Executor executor) { return delegate.watchChanges(changeListener, executor); }
@Override public void onChange(ServiceDiscovered serviceDiscovered) { ResourceRequirement requirement = requirements.get(serviceDiscovered.getName()); if (requirement != null) { performAssignment(requirement, serviceDiscovered); } } }
@Override public Discoverable pick() { // Reservoir sampling Discoverable result = null; Iterator<Discoverable> itor = serviceDiscovered.iterator(); int count = 0; while (itor.hasNext()) { Discoverable next = itor.next(); if (ThreadLocalRandom.current().nextInt(++count) == 0) { result = next; } } return result; } }
@Override public Cancellable watchChanges(ChangeListener listener, Executor executor) { return serviceDiscovered.watchChanges(listener, executor); }
@Override public void onChange(ServiceDiscovered serviceDiscovered) { ResourceRequirement requirement = requirements.get(serviceDiscovered.getName()); if (requirement != null) { performAssignment(requirement, serviceDiscovered); } } }
@Override public Boolean call() throws Exception { return discoveryServiceClient.discover(Constants.Service.TRANSACTION).iterator().hasNext(); } }, timeout, TimeUnit.SECONDS, Math.min(timeout, Math.max(10, timeout / 10)), TimeUnit.SECONDS);
@Override public final Discoverable pick(long timeout, TimeUnit timeoutUnit) { Discoverable discoverable = pick(); if (discoverable != null) { return discoverable; } final SettableFuture<Discoverable> future = SettableFuture.create(); Cancellable cancellable = serviceDiscoveredSupplier.get() .watchChanges(serviceDiscovered -> Optional.ofNullable(pick(serviceDiscovered)).ifPresent(future::set), Threads.SAME_THREAD_EXECUTOR); try { return future.get(timeout, timeoutUnit); } catch (Exception e) { return null; } finally { cancellable.cancel(); } }