Example usage for org.apache.thrift.server TServer stop

List of usage examples for org.apache.thrift.server TServer stop

Introduction

In this page you can find the example usage for org.apache.thrift.server TServer stop.

Prototype

public void stop() 

Source Link

Document

Stop the server.

Usage

From source file:com.liveramp.hank.client.TestHankSmartClient.java

License:Apache License

@Test
public void testIt() throws Exception {
    int server1Port = 12345;
    int server2Port = 12346;
    int server3Port = 12347;

    // launch server 1
    final MockPartitionServerHandler iface1 = new MockPartitionServerHandler(VALUE_1);
    TNonblockingServerTransport transport1 = createPartitionServerTransport(server1Port);
    final TServer server1 = createPartitionServer(transport1, iface1);
    Thread thread1 = new Thread(new ServerRunnable(server1), "mock partition server thread 1");
    thread1.start();/*from w w w.  j a  va 2  s.c o  m*/

    // launch server 2;
    final MockPartitionServerHandler iface2 = new MockPartitionServerHandler(VALUE_2);
    TNonblockingServerTransport transport2 = createPartitionServerTransport(server2Port);
    final TServer server2 = createPartitionServer(transport2, iface2);
    Thread thread2 = new Thread(new ServerRunnable(server2), "mock partition server thread 2");
    thread2.start();

    // launch server 3;
    final MockPartitionServerHandler iface3 = new MockPartitionServerHandler(VALUE_3);
    TNonblockingServerTransport transport3 = createPartitionServerTransport(server3Port);
    final TServer server3 = createPartitionServer(transport3, iface3);
    Thread thread3 = new Thread(new ServerRunnable(server3), "mock partition server thread 3");
    thread3.start();

    final MockDomain existentDomain = new MockDomain("existent_domain", 0, 2,
            new MapPartitioner(KEY_1, 0, KEY_2, 1, KEY_NOT_FOUND, 0), null, null, null);
    final MockDomain newDomain = new MockDomain("new_domain", 1, 1, new MapPartitioner(KEY_3, 0), null, null,
            null);

    final Host host1 = getHost(existentDomain, new PartitionServerAddress("localhost", server1Port), 0);
    final Host host2 = getHost(existentDomain, new PartitionServerAddress("localhost", server2Port), 1);
    final Host host3 = getHost(newDomain, new PartitionServerAddress("localhost", server3Port), 0);

    final Set<Host> mockRingHosts = new HashSet<Host>();
    mockRingHosts.add(host1);
    mockRingHosts.add(host2);

    final MockRing mockRing = new MockRing(null, null, 1) {
        @Override
        public Set<Host> getHosts() {
            return mockRingHosts;
        }
    };

    MockDomainGroup mockDomainGroup = new MockDomainGroup("myDomainGroup") {
        @Override
        public Set<DomainAndVersion> getDomainVersions() {
            return new HashSet<DomainAndVersion>(Arrays.asList(new DomainAndVersion(existentDomain, 1)));
        }
    };

    final MockRingGroup mockRingGroup = new MockRingGroup(mockDomainGroup, "myRingGroup", Sets.newHashSet()) {
        @Override
        public Set<Ring> getRings() {
            return Collections.singleton((Ring) mockRing);
        }
    };

    Coordinator mockCoord = new MockCoordinator() {
        @Override
        public RingGroup getRingGroup(String ringGroupName) {
            return mockRingGroup;
        }

        @Override
        public Domain getDomain(String domainName) {
            if (domainName.equals("existent_domain")) {
                return existentDomain;
            } else if (domainName.equals("new_domain")) {
                return newDomain;
            } else {
                return null;
            }
        }
    };

    WaitUntil.orDie(() -> server1.isServing() && server2.isServing() && server3.isServing());

    try {
        final HankSmartClient client = new HankSmartClient(mockCoord, "myRingGroup",
                new HankSmartClientOptions().setQueryTimeoutMs(1000));
        final HankSmartClient cachingClient = new HankSmartClient(mockCoord, "myRingGroup",
                new HankSmartClientOptions().setResponseCacheEnabled(true).setResponseCacheNumItemsCapacity(1)
                        .setResponseCacheNumBytesCapacity(-1).setResponseCacheExpirationSeconds(1));

        // Test invalid get
        assertEquals(HankResponse.xception(HankException.no_such_domain(true)),
                client.get("nonexistent_domain", null));

        // Test get
        assertEquals(HankResponse.value(VALUE_1), client.get("existent_domain", KEY_1));
        assertEquals(HankResponse.value(VALUE_2), client.get("existent_domain", KEY_2));

        // Test invalid getBulk
        assertEquals(HankBulkResponse.xception(HankException.no_such_domain(true)),
                client.getBulk("nonexistent_domain", null));

        // Test getBulk
        HankBulkResponse bulkResponse1 = HankBulkResponse.responses(new ArrayList<>());
        bulkResponse1.get_responses().add(HankResponse.value(VALUE_1));
        bulkResponse1.get_responses().add(HankResponse.value(VALUE_2));
        List<ByteBuffer> bulkRequest1 = new ArrayList<>();
        bulkRequest1.add(KEY_1);
        bulkRequest1.add(KEY_2);
        assertEquals(bulkResponse1, client.getBulk("existent_domain", bulkRequest1));

        // Test get with null key
        try {
            client.get("existent_domain", null);
            fail("Should throw an exception.");
        } catch (NullKeyException e) {
            // Good
        }

        // Test get with empty key
        try {
            client.get("existent_domain", ByteBuffer.wrap(new byte[0]));
            fail("Should throw an exception.");
        } catch (EmptyKeyException e) {
            // Good
        }

        // Host is not available
        host1.setState(HostState.UPDATING);
        assertEquals(HankResponse.xception(HankException.no_connection_available(true)),
                client.get("existent_domain", KEY_1));

        // Host is offline but it's the only one, use it opportunistically
        host2.setState(HostState.OFFLINE);
        assertEquals(HankResponse.value(VALUE_2), client.get("existent_domain", KEY_2));

        host1.setState(HostState.SERVING);
        host2.setState(HostState.SERVING);

        // Test location changes

        // Add new host that has new domain
        mockRingHosts.add(host3);

        // Should not be able to query new domain
        assertTrue(client.get("new_domain", KEY_3).get_xception().is_set_no_replica());

        // Notify client of data location change
        client.onDataLocationChange(mockCoord.getRingGroup("myRingGroup"));

        // Should be able to query new domain when the client has done updating its cache
        WaitUntil.orDie(() -> HankResponse.value(VALUE_3).equals(client.get("new_domain", KEY_3)));
        assertEquals(HankResponse.value(VALUE_3), client.get("new_domain", KEY_3));

        // TODO: Test not querying deletable partitions

        // Simulate servers that fail to perform gets
        iface1.setMode(MockPartitionServerHandler.Mode.FAILING);
        iface2.setMode(MockPartitionServerHandler.Mode.FAILING);

        assertTrue(client.get("existent_domain", KEY_1).get_xception().get_failed_retries() > 0);
        assertTrue(client.get("existent_domain", KEY_2).get_xception().get_failed_retries() > 0);

        // Simulate servers that throws an error
        iface1.setMode(MockPartitionServerHandler.Mode.THROWING_ERROR);
        iface2.setMode(MockPartitionServerHandler.Mode.THROWING_ERROR);

        assertTrue(client.get("existent_domain", KEY_1).get_xception().get_failed_retries() > 0);
        assertTrue(client.get("existent_domain", KEY_2).get_xception().get_failed_retries() > 0);

        // Simulate servers that hangs
        iface1.setMode(MockPartitionServerHandler.Mode.HANGING);
        iface2.setMode(MockPartitionServerHandler.Mode.HANGING);

        assertTrue(client.get("existent_domain", KEY_1).get_xception().get_failed_retries() > 0);
        assertTrue(client.get("existent_domain", KEY_2).get_xception().get_failed_retries() > 0);

        // Test caching
        iface1.setMode(MockPartitionServerHandler.Mode.NORMAL);
        iface2.setMode(MockPartitionServerHandler.Mode.NORMAL);
        iface3.setMode(MockPartitionServerHandler.Mode.NORMAL);

        iface1.clearNumRequests();

        // One request
        assertEquals(HankResponse.value(VALUE_1), cachingClient.get("existent_domain", KEY_1));
        assertEquals(1, iface1.getNumRequests());

        // One cached request
        assertEquals(HankResponse.value(VALUE_1), cachingClient.get("existent_domain", KEY_1));
        assertEquals(1, iface1.getNumRequests());

        iface1.clearNumRequests();

        // One not found request
        assertEquals(HankResponse.not_found(true), cachingClient.get("existent_domain", KEY_NOT_FOUND));
        assertEquals(1, iface1.getNumRequests());

        // One not found cached request
        assertEquals(HankResponse.not_found(true), cachingClient.get("existent_domain", KEY_NOT_FOUND));
        assertEquals(1, iface1.getNumRequests());

        // Wait for cache to expire
        Thread.sleep(2000);

        // Should not be in cache anymore
        assertEquals(HankResponse.not_found(true), cachingClient.get("existent_domain", KEY_NOT_FOUND));
        assertEquals(2, iface1.getNumRequests());

    } finally {
        server1.stop();
        server2.stop();
        thread1.join();
        thread2.join();
        transport1.close();
        transport2.close();
    }
}

From source file:com.rapleaf.hank.client.TestHankSmartClient.java

License:Apache License

public void testIt() throws Exception {
    // launch server 1
    final PartDaemon.Iface iface1 = new MockPartDaemonHandler(0, VALUE_1);

    TNonblockingServerSocket trans1 = null;
    while (true) {
        try {//from  w  ww .j  a  v  a  2  s  . c  om
            trans1 = new TNonblockingServerSocket(server1Port);
            LOG.debug("succeeded in binding server 1 to port " + server1Port);
            break;
        } catch (TTransportException e) {
            LOG.debug("failed to bind to port " + server1Port);
            server1Port++;
        }
    }

    Args args = new Args(trans1);
    args.processor(new PartDaemon.Processor(iface1));
    args.protocolFactory(new TCompactProtocol.Factory());
    TServer server1 = new THsHaServer(args);
    Thread thread1 = new Thread(new ServerRunnable(server1), "mock part daemon #1");
    thread1.start();

    // launch server 2;
    final PartDaemon.Iface iface2 = new MockPartDaemonHandler(0, VALUE_2);

    server2Port = server1Port + 1;
    TNonblockingServerSocket trans2 = null;
    while (true) {
        try {
            trans2 = new TNonblockingServerSocket(server2Port);
            LOG.debug("succeeded in binding server 2 to port " + server2Port);
            break;
        } catch (TTransportException e) {
            LOG.debug("failed to bind to port " + server2Port);
            server2Port++;
        }
    }
    args = new Args(trans2);
    args.processor(new PartDaemon.Processor(iface2));
    args.protocolFactory(new TCompactProtocol.Factory());
    final TServer server2 = new THsHaServer(args);
    Thread thread2 = new Thread(new ServerRunnable(server2), "mock part daemon #2");
    thread2.start();

    final Host hostConfig1 = getHostConfig(new PartDaemonAddress("localhost", server1Port), 0);
    final Host hostConfig2 = getHostConfig(new PartDaemonAddress("localhost", server2Port), 1);

    final MockRing mockRingConfig = new MockRing(null, null, 1, RingState.UP) {
        @Override
        public Set<Host> getHostsForDomainPartition(int domainId, int partition) throws IOException {
            assertEquals(1, domainId);
            if (partition == 0) {
                return Collections.singleton(hostConfig1);
            } else if (partition == 1) {
                return Collections.singleton(hostConfig2);
            }
            fail("got partition id " + partition + " which is invalid");
            throw new IllegalStateException();
        }

        @Override
        public Set<Host> getHosts() {
            return new HashSet<Host>(Arrays.asList(hostConfig1, hostConfig2));
        }
    };

    final MockDomain existentDomain = new MockDomain("existent_domain", 2,
            new MapPartitioner(KEY_1, 0, KEY_2, 1), null, null, null);
    MockDomainGroup mockDomainGroupConfig = new MockDomainGroup("myDomainGroup") {
        private final Map<Integer, Domain> domains = new HashMap<Integer, Domain>() {
            {
                put(1, existentDomain);
            }
        };

        @Override
        public Domain getDomain(int domainId) {
            return domains.get(domainId);
        }

        @Override
        public Integer getDomainId(String domainName) {
            if (domainName.equals("existent_domain")) {
                return 1;
            } else {
                return null;
            }
        }

        @Override
        public DomainGroupVersion getLatestVersion() {
            return new MockDomainGroupVersion(
                    new HashSet<DomainGroupVersionDomainVersion>(
                            Arrays.asList(new MockDomainGroupVersionDomainVersion(existentDomain, 1))),
                    this, 1);
        }
    };
    final MockRingGroup mockRingGroupConfig = new MockRingGroup(mockDomainGroupConfig, "myRingGroup", null) {
        @Override
        public Set<Ring> getRings() {
            return Collections.singleton((Ring) mockRingConfig);
        }
    };
    Coordinator mockCoord = new MockCoordinator() {
        @Override
        public RingGroup getRingGroupConfig(String ringGroupName) {
            return mockRingGroupConfig;
        }
    };

    Thread.sleep(1000);

    try {
        HankSmartClient c = new HankSmartClient(mockCoord, "myRingGroup", 1);

        assertEquals(HankResponse.xception(HankExceptions.no_such_domain(true)),
                c.get("nonexistent_domain", null));

        assertEquals(HankResponse.value(VALUE_1), c.get("existent_domain", KEY_1));
        assertEquals(HankResponse.value(VALUE_2), c.get("existent_domain", KEY_2));
    } finally {
        server1.stop();
        server2.stop();
        thread1.join();
        thread2.join();
        trans1.close();
        trans2.close();
    }
}

From source file:com.wmz7year.thrift.pool.BasicAbstractTest.java

License:Apache License

/**
 * thrift?
 */
protected void stopAllServers() {
    for (TServer tServer : servers) {
        tServer.stop();
    }
}

From source file:ezbake.thrift.ThriftServerPool.java

License:Apache License

/**
 * Shutdown all the running servers/*from w w  w .  ja v a2 s. c  o  m*/
 */
public void shutdown() {
    for (TServer server : thriftServers) {
        server.stop();
    }
    try {
        zookeeper.shutdown();
        discovery.close();
    } catch (IOException ex) {
        //don't care
    }
}

From source file:io.airlift.drift.integration.TestClientsWithApacheServer.java

License:Apache License

private static int testApacheServer(boolean secure, Transport transport, Protocol protocol,
        TProcessor processor, List<ToIntFunction<HostAndPort>> clients) throws Exception {
    // Apache server does not support header transport
    if (transport == HEADER || protocol == FB_COMPACT) {
        return 0;
    }/*from www  .j  av a 2s  .c o  m*/

    TTransportFactory transportFactory;
    switch (transport) {
    case UNFRAMED:
        transportFactory = new TTransportFactory();
        break;
    case FRAMED:
        transportFactory = new TFramedTransport.Factory();
        break;
    default:
        throw new IllegalArgumentException("Unsupported transport " + transport);
    }
    TProtocolFactory protocolFactory;
    switch (protocol) {
    case BINARY:
        protocolFactory = new TBinaryProtocol.Factory();
        break;
    case COMPACT:
        protocolFactory = new TCompactProtocol.Factory();
        break;
    default:
        throw new IllegalArgumentException("Unsupported protocol " + protocol);
    }

    try (TServerSocket serverSocket = createServerTransport(secure)) {
        TServer server = new TSimpleServer(new Args(serverSocket).protocolFactory(protocolFactory)
                .transportFactory(transportFactory).processor(processor));

        Thread serverThread = new Thread(server::serve);
        try {
            serverThread.start();

            int localPort = serverSocket.getServerSocket().getLocalPort();
            HostAndPort address = HostAndPort.fromParts("localhost", localPort);

            int sum = 0;
            for (ToIntFunction<HostAndPort> client : clients) {
                sum += client.applyAsInt(address);
            }
            return sum;
        } finally {
            server.stop();
            serverThread.interrupt();
        }
    }
}

From source file:io.airlift.drift.transport.apache.TestApacheThriftMethodInvoker.java

License:Apache License

private static int testProcessor(TProcessor processor, List<ToIntFunction<HostAndPort>> clients)
        throws Exception {
    try (TServerSocket serverTransport = new TServerSocket(0)) {
        TProtocolFactory protocolFactory = new Factory();
        TTransportFactory transportFactory = new TFramedTransport.Factory();
        TServer server = new TSimpleServer(new Args(serverTransport).protocolFactory(protocolFactory)
                .transportFactory(transportFactory).processor(processor));

        Thread serverThread = new Thread(server::serve);
        try {//from w  w  w .  j a v  a 2 s . c o m
            serverThread.start();

            int localPort = serverTransport.getServerSocket().getLocalPort();
            HostAndPort address = HostAndPort.fromParts("localhost", localPort);

            int sum = 0;
            for (ToIntFunction<HostAndPort> client : clients) {
                sum += client.applyAsInt(address);
            }
            return sum;
        } finally {
            server.stop();
            serverThread.interrupt();
        }
    }
}

From source file:io.airlift.drift.transport.netty.client.TestDriftNettyMethodInvoker.java

License:Apache License

private static int testProcessor(TProcessor processor, List<ToIntFunction<HostAndPort>> clients)
        throws Exception {
    try (TServerSocket serverTransport = new TServerSocket(0)) {
        TProtocolFactory protocolFactory = new TBinaryProtocol.Factory();
        TTransportFactory transportFactory = new TFramedTransport.Factory();
        TServer server = new TSimpleServer(new Args(serverTransport).protocolFactory(protocolFactory)
                .transportFactory(transportFactory).processor(processor));

        Thread serverThread = new Thread(server::serve);
        try {/*from  ww  w  .  ja v  a2  s.co m*/
            serverThread.start();

            int localPort = serverTransport.getServerSocket().getLocalPort();
            HostAndPort address = HostAndPort.fromParts("localhost", localPort);

            int sum = 0;
            for (ToIntFunction<HostAndPort> client : clients) {
                sum += client.applyAsInt(address);
            }
            return sum;
        } finally {
            server.stop();
            serverThread.interrupt();
        }
    }
}

From source file:org.apache.accumulo.cloudtrace.instrument.TracerTest.java

License:Apache License

@Test
public void testThrift() throws Exception {
    TestReceiver tracer = new TestReceiver();
    Tracer.getInstance().addReceiver(tracer);

    ServerSocket socket = new ServerSocket(0);
    TServerSocket transport = new TServerSocket(socket);
    transport.listen();/*from ww  w . j a v a  2s  . c  o  m*/
    TThreadPoolServer.Args args = new TThreadPoolServer.Args(transport);
    args.processor(new TestService.Processor(TraceWrap.service(new Service())));
    final TServer tserver = new TThreadPoolServer(args);
    Thread t = new Thread() {
        public void run() {
            tserver.serve();
        }
    };
    t.start();
    TTransport clientTransport = new TSocket(new Socket("localhost", socket.getLocalPort()));
    TestService.Iface client = new TestService.Client(new TBinaryProtocol(clientTransport),
            new TBinaryProtocol(clientTransport));
    client = TraceWrap.client(client);
    assertFalse(client.checkTrace(null, "test"));

    Span start = Trace.on("start");
    assertTrue(client.checkTrace(null, "my test"));
    start.stop();

    assertNotNull(tracer.traces.get(start.traceId()));
    String traces[] = { "my test", "checkTrace", "client:checkTrace", "start" };
    assertTrue(tracer.traces.get(start.traceId()).size() == traces.length);
    for (int i = 0; i < traces.length; i++)
        assertEquals(traces[i], tracer.traces.get(start.traceId()).get(i).description);

    tserver.stop();
    t.join(100);
}

From source file:org.apache.accumulo.core.client.TestThrift1474.java

License:Apache License

@Test
public void test() throws IOException, TException, InterruptedException {
    TServerSocket serverTransport = new TServerSocket(0);
    serverTransport.listen();/*from w ww.j a va  2s . c om*/
    int port = serverTransport.getServerSocket().getLocalPort();
    TestServer handler = new TestServer();
    ThriftTest.Processor<ThriftTest.Iface> processor = new ThriftTest.Processor<ThriftTest.Iface>(handler);

    TThreadPoolServer.Args args = new TThreadPoolServer.Args(serverTransport);
    args.stopTimeoutVal = 10;
    args.stopTimeoutUnit = TimeUnit.MILLISECONDS;
    final TServer server = new TThreadPoolServer(args.processor(processor));
    Thread thread = new Thread() {
        @Override
        public void run() {
            server.serve();
        }
    };
    thread.start();
    while (!server.isServing()) {
        UtilWaitThread.sleep(10);
    }

    TTransport transport = new TSocket("localhost", port);
    transport.open();
    TProtocol protocol = new TBinaryProtocol(transport);
    ThriftTest.Client client = new ThriftTest.Client(protocol);
    assertTrue(client.success());
    assertFalse(client.fails());
    try {
        client.throwsError();
        fail("no exception thrown");
    } catch (ThriftSecurityException ex) {
        // expected
    }
    server.stop();
    thread.join();
}

From source file:org.apache.accumulo.proxy.ProxyDurabilityIT.java

License:Apache License

@Test
public void testDurability() throws Exception {
    Connector c = getConnector();/*w w w  .  j  a v a 2 s.  c  o m*/
    Properties props = new Properties();
    props.put("instance", c.getInstance().getInstanceName());
    props.put("zookeepers", c.getInstance().getZooKeepers());
    props.put("tokenClass", PasswordToken.class.getName());

    TJSONProtocol.Factory protocol = new TJSONProtocol.Factory();

    int proxyPort = PortUtils.getRandomFreePort();
    final TServer proxyServer = Proxy.createProxyServer(HostAndPort.fromParts("localhost", proxyPort), protocol,
            props).server;
    while (!proxyServer.isServing())
        UtilWaitThread.sleep(100);
    Client client = new TestProxyClient("localhost", proxyPort, protocol).proxy();
    Map<String, String> properties = new TreeMap<String, String>();
    properties.put("password", ROOT_PASSWORD);
    ByteBuffer login = client.login("root", properties);

    String tableName = getUniqueNames(1)[0];
    client.createTable(login, tableName, true, TimeType.MILLIS);
    assertTrue(c.tableOperations().exists(tableName));

    WriterOptions options = new WriterOptions();
    options.setDurability(Durability.NONE);
    String writer = client.createWriter(login, tableName, options);
    Map<ByteBuffer, List<ColumnUpdate>> cells = new TreeMap<ByteBuffer, List<ColumnUpdate>>();
    ColumnUpdate column = new ColumnUpdate(bytes("cf"), bytes("cq"));
    column.setValue("value".getBytes());
    cells.put(bytes("row"), Collections.singletonList(column));
    client.update(writer, cells);
    client.closeWriter(writer);
    assertEquals(1, count(tableName));
    restartTServer();
    assertEquals(0, count(tableName));

    ConditionalWriterOptions cfg = new ConditionalWriterOptions();
    cfg.setDurability(Durability.LOG);
    String cwriter = client.createConditionalWriter(login, tableName, cfg);
    ConditionalUpdates updates = new ConditionalUpdates();
    updates.addToConditions(new Condition(new Column(bytes("cf"), bytes("cq"), bytes(""))));
    updates.addToUpdates(column);
    Map<ByteBuffer, ConditionalStatus> status = client.updateRowsConditionally(cwriter,
            Collections.singletonMap(bytes("row"), updates));
    assertEquals(ConditionalStatus.ACCEPTED, status.get(bytes("row")));
    assertEquals(1, count(tableName));
    restartTServer();
    assertEquals(0, count(tableName));

    proxyServer.stop();
}