@SuppressWarnings("unchecked") public void poll() { try { String url = getRuleURL(); if (url == null) { return; } FullResponseHolder response = httpClient.go(new Request(HttpMethod.GET, new URL(url)), responseHandler).get(); if (response.getStatus().equals(HttpResponseStatus.FOUND)) { url = response.getResponse().headers().get("Location"); log.info("Redirecting rule request to [%s]", url); response = httpClient.go(new Request(HttpMethod.GET, new URL(url)), responseHandler).get(); } ConcurrentHashMap<String, List<Rule>> newRules = new ConcurrentHashMap<>( (Map<String, List<Rule>>) jsonMapper.readValue( response.getContent(), new TypeReference<Map<String, List<Rule>>>() {})); log.info("Got [%,d] rules", newRules.keySet().size()); rules.set(newRules); } catch (Exception e) { log.error(e, "Exception while polling for rules"); } }
@Override public <T> QueryRunner<T> getQueryRunner(DruidServer server) { synchronized (lock) { QueryableDruidServer queryableDruidServer = clients.get(server.getName()); if (queryableDruidServer == null) { log.error("WTF?! No QueryableDruidServer found for %s", server.getName()); return null; } return queryableDruidServer.getClient(); } }
private String getRuleURL() throws URISyntaxException { Server server = selector.pick(); if (server == null) { log.error("No instances found for [%s]!", config.get().getCoordinatorServiceName()); return null; } return new URI( server.getScheme(), null, server.getAddress(), server.getPort(), config.get().getRulesEndpoint(), null, null) .toString(); }