@Override public void start() throws Exception { serviceDiscovery.start(); }
protected ServiceDiscovery<DrillbitEndpoint> newDiscovery() { return ServiceDiscoveryBuilder.builder(DrillbitEndpoint.class).basePath("/") .client(curator).serializer(DrillServiceInstanceHelper.SERIALIZER) .build(); }
private ServiceDiscovery createAndAnnounceServices(List<String> serviceNames) throws Exception { int port = 1000; ServiceDiscovery<Void> serviceDiscovery = ServiceDiscoveryBuilder.builder(Void.class) .basePath("/test") .client(curator) .build(); for (String serviceName : serviceNames) { String serviceNameToUse = CuratorServiceUtils.makeCanonicalServiceName(serviceName); ServiceInstance instance = ServiceInstance.<Void>builder() .name(serviceNameToUse) .address("localhost") .port(port++) .build(); serviceDiscovery.registerService(instance); } return serviceDiscovery; }
@Override public RegistrationHandle register(DrillbitEndpoint data) { try { ServiceInstance<DrillbitEndpoint> serviceInstance = newServiceInstance( data); discovery.registerService(serviceInstance); return new ZKRegistrationHandle(serviceInstance.getId(), data); } catch (Exception e) { Throwables.throwIfUnchecked(e); throw new RuntimeException(e); } }
public ServerDiscoverySelector createSelector(String serviceName) { if (serviceName == null) { return new ServerDiscoverySelector(new NoopServiceProvider(), serviceName); } final ServiceProvider serviceProvider = serviceDiscovery .serviceProviderBuilder() .serviceName(CuratorServiceUtils.makeCanonicalServiceName(serviceName)) .build(); return new ServerDiscoverySelector(serviceProvider, serviceName); }
instance.getPort() >= 0 || (instance.getSslPort() != null && instance.getSslPort() >= 0), "WTH?! Both port and sslPort not set" ); final int port; final String scheme; if (instance.getSslPort() == null) { port = instance.getPort(); scheme = "http"; } else { port = instance.getSslPort() >= 0 ? instance.getSslPort() : instance.getPort(); scheme = instance.getSslPort() >= 0 ? "https" : "http";
@Override public DrillbitEndpoint apply( ServiceInstance<DrillbitEndpoint> input) { return input.getPayload(); } });
@Override public boolean apply(String input) { try { return serviceDiscovery.queryForInstances(input.replace('/', ':')).size() == 1; } catch (Exception e) { throw new ISE( "Something went wrong while finding instance with name [%s] in Service Discovery", input ); } } }
@Override public void stop() { try { serviceDiscovery.close(); } catch (Exception e) { throw Throwables.propagate(e); } } }
@Nullable @Override public Server pick() { final ServiceInstance instance; try { instance = serviceProvider.getInstance(); } catch (Exception e) { log.info(e, "Exception getting instance for [%s]", name); return null; } if (instance == null) { log.error("No server instance found for [%s]", name); return null; } return TO_SERVER.apply(instance); }
@LifecycleStart public void start() throws Exception { serviceProvider.start(); }
@LifecycleStop public void stop() throws IOException { serviceProvider.close(); } }
public Collection<Server> getAll() { try { return Collections2.transform(serviceProvider.getAllInstances(), TO_SERVER); } catch (Exception e) { log.info(e, "Unable to get all instances"); return Collections.emptyList(); } }
/** * Pretend to be a Drillbit creating its ZK entry. Real Drillbits use a GUID * as the key, but we just use the host name, which is good enough for our * purposes here. * * @param zk * @param host * @throws Exception */ private void addDrillbit(CuratorFramework zk, String host) throws Exception { DrillbitEndpoint dbe = makeEndpoint(host); ServiceInstance<DrillbitEndpoint> si = ServiceInstance .<DrillbitEndpoint> builder().name(CLUSTER_ID).payload(dbe).build(); byte data[] = DrillServiceInstanceHelper.SERIALIZER.serialize(si); zk.create().forPath("/" + host, data); }
@Test public void testPickWithNullInstance() throws Exception { EasyMock.expect(serviceProvider.getInstance()).andReturn(null).anyTimes(); EasyMock.replay(serviceProvider); Server server = serverDiscoverySelector.pick(); Assert.assertNull(server); EasyMock.verify(serviceProvider); }
@Test public void testStart() throws Exception { serviceProvider.start(); EasyMock.replay(serviceProvider); serverDiscoverySelector.start(); EasyMock.verify(serviceProvider); }
@Test public void testStop() throws IOException { serviceProvider.close(); EasyMock.replay(serviceProvider); serverDiscoverySelector.stop(); EasyMock.verify(serviceProvider); } }
@Test public void testPickWithException() throws Exception { EasyMock.expect(serviceProvider.getInstance()).andThrow(new Exception()).anyTimes(); EasyMock.replay(serviceProvider); Server server = serverDiscoverySelector.pick(); Assert.assertNull(server); EasyMock.verify(serviceProvider); }