private static void updateConnectorIdAnnouncement(Announcer announcer, ConnectorId connectorId, InternalNodeManager nodeManager) { // // This code was copied from PrestoServer, and is a hack that should be removed when the connectorId property is removed // // get existing announcement ServiceAnnouncement announcement = getPrestoAnnouncement(announcer.getServiceAnnouncements()); // update connectorIds property Map<String, String> properties = new LinkedHashMap<>(announcement.getProperties()); String property = nullToEmpty(properties.get("connectorIds")); Set<String> connectorIds = new LinkedHashSet<>(Splitter.on(',').trimResults().omitEmptyStrings().splitToList(property)); connectorIds.add(connectorId.toString()); properties.put("connectorIds", Joiner.on(',').join(connectorIds)); // update announcement announcer.removeServiceAnnouncement(announcement.getId()); announcer.addServiceAnnouncement(serviceAnnouncement(announcement.getType()).addProperties(properties).build()); announcer.forceAnnounce(); nodeManager.refreshNodes(); }
private static void updateConnectorIds(Announcer announcer, CatalogManager metadata, ServerConfig serverConfig, NodeSchedulerConfig schedulerConfig) ServiceAnnouncement announcement = getPrestoAnnouncement(announcer.getServiceAnnouncements());
public ListenableFuture<?> forceAnnounce() { return announcementClient.announce(getServiceAnnouncements()); }
public ListenableFuture<?> forceAnnounce() { return announcementClient.announce(getServiceAnnouncements()); }
@Override public ListenableFuture<List<ServiceDescriptor>> refresh() { return Futures.transform(selector.refresh(), (Function<List<ServiceDescriptor>, List<ServiceDescriptor>>) descriptors -> merge(announcer.getServiceAnnouncements(), descriptors)); }
@Override public List<ServiceDescriptor> selectAllServices() { return merge(announcer.getServiceAnnouncements(), selector.selectAllServices()); }
@Override public List<ServiceDescriptor> selectAllServices() { return merge(announcer.getServiceAnnouncements(), selector.selectAllServices()); }
private static void updateDatasourcesAnnouncement(Announcer announcer, String connectorId) { // // This code was copied from PrestoServer, and is a hack that should be removed when the data source property is removed // // get existing announcement ServiceAnnouncement announcement = getPrestoAnnouncement(announcer.getServiceAnnouncements()); // update datasources property Map<String, String> properties = new LinkedHashMap<>(announcement.getProperties()); String property = nullToEmpty(properties.get("datasources")); Set<String> datasources = new LinkedHashSet<>(Splitter.on(',').trimResults().omitEmptyStrings().splitToList(property)); datasources.add(connectorId); properties.put("datasources", Joiner.on(',').join(datasources)); // update announcement announcer.removeServiceAnnouncement(announcement.getId()); announcer.addServiceAnnouncement(serviceAnnouncement(announcement.getType()).addProperties(properties).build()); announcer.forceAnnounce(); }
@Override public ListenableFuture<List<ServiceDescriptor>> refresh() { return FluentFuture.from(selector.refresh()) .transform(descriptors -> merge(announcer.getServiceAnnouncements(), descriptors), directExecutor()); }
private ListenableFuture<Duration> announce(long delayStart, Duration expectedDelay) { // log announcement did not happen within 5 seconds of expected delay if (System.nanoTime() - (delayStart + expectedDelay.roundTo(NANOSECONDS)) > SECONDS.toNanos(5)) { log.error("Expected service announcement after %s, but announcement was delayed %s", expectedDelay, Duration.nanosSince(delayStart)); } long requestStart = System.nanoTime(); ListenableFuture<Duration> future = announcementClient.announce(getServiceAnnouncements()); Futures.addCallback(future, new FutureCallback<Duration>() { @Override public void onSuccess(Duration expectedDelay) { errorBackOff.success(); // wait 80% of the suggested delay expectedDelay = new Duration(expectedDelay.toMillis() * 0.8, MILLISECONDS); log.debug("Service announcement succeeded after %s. Next request will happen within %s", Duration.nanosSince(requestStart), expectedDelay); scheduleNextAnnouncement(expectedDelay); } @Override public void onFailure(Throwable t) { Duration duration = errorBackOff.failed(t); // todo this is a duplicate log message and should be remove after root cause of announcement delay is determined log.error("Service announcement failed after %s. Next request will happen within %s", Duration.nanosSince(requestStart), expectedDelay); scheduleNextAnnouncement(duration); } }, executor); return future; }
private ListenableFuture<Duration> announce(long delayStart, Duration expectedDelay) { // log announcement did not happen within 5 seconds of expected delay if (System.nanoTime() - (delayStart + expectedDelay.roundTo(NANOSECONDS)) > SECONDS.toNanos(5)) { log.error("Expected service announcement after %s, but announcement was delayed %s", expectedDelay, Duration.nanosSince(delayStart)); } long requestStart = System.nanoTime(); ListenableFuture<Duration> future = announcementClient.announce(getServiceAnnouncements()); Futures.addCallback(future, new FutureCallback<Duration>() { @Override public void onSuccess(Duration expectedDelay) { errorBackOff.success(); // wait 80% of the suggested delay expectedDelay = new Duration(expectedDelay.toMillis() * 0.8, MILLISECONDS); log.debug("Service announcement succeeded after %s. Next request will happen within %s", Duration.nanosSince(requestStart), expectedDelay); scheduleNextAnnouncement(expectedDelay); } @Override public void onFailure(Throwable t) { Duration duration = errorBackOff.failed(t); // todo this is a duplicate log message and should be remove after root cause of announcement delay is determined log.error("Service announcement failed after %s. Next request will happen within %s", Duration.nanosSince(requestStart), expectedDelay); scheduleNextAnnouncement(duration); } }, executor); return future; }
private static void updateConnectorIdAnnouncement(Announcer announcer, ConnectorId connectorId, InternalNodeManager nodeManager) { // // This code was copied from PrestoServer, and is a hack that should be removed when the connectorId property is removed // // get existing announcement ServiceAnnouncement announcement = getPrestoAnnouncement(announcer.getServiceAnnouncements()); // update connectorIds property Map<String, String> properties = new LinkedHashMap<>(announcement.getProperties()); String property = nullToEmpty(properties.get("connectorIds")); Set<String> connectorIds = new LinkedHashSet<>(Splitter.on(',').trimResults().omitEmptyStrings().splitToList(property)); connectorIds.add(connectorId.toString()); properties.put("connectorIds", Joiner.on(',').join(connectorIds)); // update announcement announcer.removeServiceAnnouncement(announcement.getId()); announcer.addServiceAnnouncement(serviceAnnouncement(announcement.getType()).addProperties(properties).build()); announcer.forceAnnounce(); nodeManager.refreshNodes(); }
private static void updateConnectorIdAnnouncement(Announcer announcer, ConnectorId connectorId, InternalNodeManager nodeManager) { // // This code was copied from PrestoServer, and is a hack that should be removed when the connectorId property is removed // // get existing announcement ServiceAnnouncement announcement = getPrestoAnnouncement(announcer.getServiceAnnouncements()); // update connectorIds property Map<String, String> properties = new LinkedHashMap<>(announcement.getProperties()); String property = nullToEmpty(properties.get("connectorIds")); Set<String> connectorIds = new LinkedHashSet<>(Splitter.on(',').trimResults().omitEmptyStrings().splitToList(property)); connectorIds.add(connectorId.toString()); properties.put("connectorIds", Joiner.on(',').join(connectorIds)); // update announcement announcer.removeServiceAnnouncement(announcement.getId()); announcer.addServiceAnnouncement(serviceAnnouncement(announcement.getType()).addProperties(properties).build()); announcer.forceAnnounce(); nodeManager.refreshNodes(); }
private static void updateConnectorIds(Announcer announcer, CatalogManager metadata, ServerConfig serverConfig, NodeSchedulerConfig schedulerConfig) ServiceAnnouncement announcement = getPrestoAnnouncement(announcer.getServiceAnnouncements());
private static void updateConnectorIds(Announcer announcer, CatalogManager metadata, ServerConfig serverConfig, NodeSchedulerConfig schedulerConfig) ServiceAnnouncement announcement = getPrestoAnnouncement(announcer.getServiceAnnouncements());
private static void updateDatasources(Announcer announcer, Metadata metadata, ServerConfig serverConfig, NodeSchedulerConfig schedulerConfig) ServiceAnnouncement announcement = getPrestoAnnouncement(announcer.getServiceAnnouncements());