Example usage for org.apache.thrift.protocol TCompactProtocol TCompactProtocol

List of usage examples for org.apache.thrift.protocol TCompactProtocol TCompactProtocol

Introduction

In this page you can find the example usage for org.apache.thrift.protocol TCompactProtocol TCompactProtocol.

Prototype

public TCompactProtocol(TTransport transport) 

Source Link

Document

Create a TCompactProtocol.

Usage

From source file:com.kromatik.dasshy.server.thrift.TUtils.java

License:Open Source License

/**
 * Serialize the thrift entity using Compact protocol
 *
 * @param tEntity thrift entity/*from  ww  w . j av  a  2 s. c  o m*/
 * @return byte[]
 * @throws TException
 */
public static byte[] serializeCompact(final TBase tEntity) throws TException {
    final TMemoryBuffer memoryBuffer = new TMemoryBuffer(1);
    tEntity.write(new TCompactProtocol(memoryBuffer));
    memoryBuffer.flush();
    try {
        return memoryBuffer.getArray();
    } finally {
        memoryBuffer.close();
    }
}

From source file:com.kromatik.dasshy.server.thrift.TUtils.java

License:Open Source License

/**
 * Deserialize into thrift entity using Compact protocol
 *
 * @param bytesEntity byte[] to deserialize
 * @param tBase       thrift entity/*from  www.ja  v  a 2  s .c o  m*/
 * @throws TException
 */
public static void deserializeCompact(byte[] bytesEntity, final TBase tBase) throws TException {
    final TMemoryBuffer memoryBuffer = new TMemoryBuffer(bytesEntity.length);
    memoryBuffer.write(bytesEntity);
    tBase.read(new TCompactProtocol(memoryBuffer));
    memoryBuffer.close();
}

From source file:com.linkedin.pinot.core.data.readers.ThriftSampleData.java

License:Apache License

private void writeObject(ObjectOutputStream out) throws IOException {
    try {//from w  w w.j a  v  a2s .  co  m
        this.write(new TCompactProtocol(new TIOStreamTransport(out)));
    } catch (TException var3) {
        throw new IOException(var3);
    }
}

From source file:com.linkedin.pinot.core.data.readers.ThriftSampleData.java

License:Apache License

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
    try {/*from  w  ww .j  a va  2  s .  c  om*/
        this.__isset_bitfield = 0;
        this.read(new TCompactProtocol(new TIOStreamTransport(in)));
    } catch (TException var3) {
        throw new IOException(var3);
    }
}

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

License:Apache License

private void connect() throws IOException {
    if (LOG.isTraceEnabled()) {
        LOG.trace("Trying to connect to " + host.getAddress());
    }/*from   w w w  . ja  va2s  .  c o m*/
    // Use connection timeout to connect
    socket = new TSocket(host.getAddress().getHostName(), host.getAddress().getPortNumber(),
            establishConnectionTimeoutMs);
    transport = new TFramedTransport(socket);
    try {
        transport.open();
        // Set socket timeout to regular mode
        setSocketTimeout(queryTimeoutMs);
    } catch (TTransportException e) {
        LOG.error("Failed to establish connection to host " + host.getAddress(), e);
        disconnect();
        throw new IOException("Failed to establish connection to host " + host.getAddress(), e);
    }
    TProtocol proto = new TCompactProtocol(transport);
    client = new PartitionServer.Client(proto);
    if (LOG.isTraceEnabled()) {
        LOG.trace("Connection to " + host.getAddress() + " opened.");
    }
}

From source file:com.liveramp.hank.IntegrationTest.java

License:Apache License

@Test
public void testItAll() throws Throwable {
    org.apache.log4j.Logger.getLogger("com.liveramp.hank.coordinator.zk").setLevel(Level.WARN);
    org.apache.log4j.Logger.getLogger("org.apache.zookeeper").setLevel(Level.WARN);
    org.apache.log4j.Logger.getLogger("org.apache.zookeeper.server").setLevel(Level.WARN);

    // Logger.getLogger("com.liveramp.hank.partition_server").setLevel(Level.INFO);
    org.apache.log4j.Logger.getLogger("com.liveramp.hank.storage").setLevel(Level.TRACE);
    create(domainsRoot);/*from  w  w  w  .j ava2s  . c  o  m*/
    create(domainGroupsRoot);
    create(ringGroupsRoot);

    PrintWriter pw = new PrintWriter(new FileWriter(clientConfigYml));
    pw.println("coordinator:");
    pw.println("  factory: com.liveramp.hank.coordinator.zk.ZooKeeperCoordinator$Factory");
    pw.println("  options:");
    pw.println("    connect_string: localhost:" + getZkClientPort());
    pw.println("    session_timeout: 1000000");
    pw.println("    domains_root: " + domainsRoot);
    pw.println("    domain_groups_root: " + domainGroupsRoot);
    pw.println("    ring_groups_root: " + ringGroupsRoot);
    pw.println("    max_connection_attempts: 5");
    pw.close();

    CoordinatorConfigurator config = new YamlClientConfigurator(clientConfigYml);

    final Coordinator coordinator = config.createCoordinator();

    StringWriter sw = new StringWriter();
    pw = new PrintWriter(sw);
    pw.println("key_hash_size: 10");
    pw.println("hasher: " + Murmur64Hasher.class.getName());
    pw.println("max_allowed_part_size: " + 1024 * 1024);
    pw.println("hash_index_bits: 1");
    pw.println("record_file_read_buffer_bytes: 10240");
    pw.println("remote_domain_root: " + DOMAIN_0_DATAFILES);
    pw.println("file_ops_factory: " + LocalPartitionRemoteFileOps.Factory.class.getName());
    pw.println("num_remote_leaf_versions_to_keep: 0");
    pw.close();
    coordinator.addDomain("domain0", 2, Curly.Factory.class.getName(), sw.toString(),
            Murmur64Partitioner.class.getName(), Collections.<String>emptyList());

    sw = new StringWriter();
    pw = new PrintWriter(sw);
    pw.println("key_hash_size: 10");
    pw.println("hasher: " + Murmur64Hasher.class.getName());
    pw.println("max_allowed_part_size: " + 1024 * 1024);
    pw.println("hash_index_bits: 1");
    pw.println("record_file_read_buffer_bytes: 10240");
    pw.println("remote_domain_root: " + DOMAIN_1_DATAFILES);
    pw.println("file_ops_factory: " + LocalPartitionRemoteFileOps.Factory.class.getName());
    pw.println("compression_codec: " + GzipCueballCompressionCodec.class.getName());
    pw.println("num_remote_leaf_versions_to_keep: 0");
    pw.close();
    coordinator.addDomain("domain1", 2, Curly.Factory.class.getName(), sw.toString(),
            Murmur64Partitioner.class.getName(), Collections.<String>emptyList());

    WaitUntil.orDie(new Condition() {
        @Override
        public boolean test() {
            return coordinator.getDomain("domain0") != null && coordinator.getDomain("domain1") != null;
        }
    });

    // create empty versions of each domain

    // write a base version of each domain
    Map<ByteBuffer, ByteBuffer> domain0DataItems = new HashMap<ByteBuffer, ByteBuffer>();
    domain0DataItems.put(bb(1), bb(1, 1));
    domain0DataItems.put(bb(2), bb(2, 2));
    domain0DataItems.put(bb(3), bb(3, 3));
    domain0DataItems.put(bb(4), bb(4, 4));
    domain0DataItems.put(bb(5), bb(5, 1));
    domain0DataItems.put(bb(6), bb(6, 2));
    domain0DataItems.put(bb(7), bb(7, 3));
    domain0DataItems.put(bb(8), bb(8, 4));

    writeOut(coordinator.getDomain("domain0"), domain0DataItems, 0, DOMAIN_0_DATAFILES);

    Map<ByteBuffer, ByteBuffer> domain1DataItems = new HashMap<ByteBuffer, ByteBuffer>();
    domain1DataItems.put(bb(4), bb(1, 1));
    domain1DataItems.put(bb(3), bb(2, 2));
    domain1DataItems.put(bb(2), bb(3, 3));
    domain1DataItems.put(bb(1), bb(4, 4));
    domain1DataItems.put(bb(8), bb(5, 1));
    domain1DataItems.put(bb(7), bb(6, 2));
    domain1DataItems.put(bb(6), bb(7, 3));
    domain1DataItems.put(bb(5), bb(8, 4));

    writeOut(coordinator.getDomain("domain1"), domain1DataItems, 0, DOMAIN_1_DATAFILES);

    WaitUntil.orDie(new Condition() {
        @Override
        public boolean test() {
            try {
                return coordinator.getDomain("domain0").getVersion(0) != null
                        && coordinator.getDomain("domain1").getVersion(0) != null;
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    });

    // configure domain group
    coordinator.addDomainGroup("dg1");

    WaitUntil.orDie(new Condition() {
        @Override
        public boolean test() {
            return coordinator.getDomainGroup("dg1") != null;
        }
    });
    final DomainGroup domainGroup = coordinator.getDomainGroup("dg1");

    Map<Domain, Integer> versionMap = new HashMap<Domain, Integer>();
    versionMap.put(coordinator.getDomain("domain0"), 0);
    versionMap.put(coordinator.getDomain("domain1"), 0);
    domainGroup.setDomainVersions(versionMap);

    // configure ring group
    final RingGroup rg1 = coordinator.addRingGroup("rg1", "dg1");

    // add ring 1
    final Ring rg1r1 = rg1.addRing(1);
    final Host r1h1 = rg1r1.addHost(PartitionServerAddress.parse("localhost:50000"),
            Collections.<String>emptyList());
    final Host r1h2 = rg1r1.addHost(PartitionServerAddress.parse("localhost:50001"),
            Collections.<String>emptyList());

    // add ring 2
    final Ring rg1r2 = rg1.addRing(2);
    final Host r2h1 = rg1r2.addHost(PartitionServerAddress.parse("localhost:50002"),
            Collections.<String>emptyList());
    final Host r2h2 = rg1r2.addHost(PartitionServerAddress.parse("localhost:50003"),
            Collections.<String>emptyList());

    // Add domains
    // Domain0
    HostDomain r1h1d0 = r1h1.addDomain(coordinator.getDomain("domain0"));
    HostDomain r1h2d0 = r1h2.addDomain(coordinator.getDomain("domain0"));
    HostDomain r2h1d0 = r2h1.addDomain(coordinator.getDomain("domain0"));
    HostDomain r2h2d0 = r2h2.addDomain(coordinator.getDomain("domain0"));
    // Domain1
    HostDomain r1h1d1 = r1h1.addDomain(coordinator.getDomain("domain1"));
    HostDomain r1h2d1 = r1h2.addDomain(coordinator.getDomain("domain1"));
    HostDomain r2h1d1 = r2h1.addDomain(coordinator.getDomain("domain1"));
    HostDomain r2h2d1 = r2h2.addDomain(coordinator.getDomain("domain1"));

    // Add partitions
    // Domain0
    r1h1d0.addPartition(0);
    r1h2d0.addPartition(1);
    r2h1d0.addPartition(0);
    r2h2d0.addPartition(1);
    // Domain1
    r1h1d1.addPartition(0);
    r1h2d1.addPartition(1);
    r2h1d1.addPartition(0);
    r2h2d1.addPartition(1);

    // launch 2x 2-node rings
    startDaemons(new PartitionServerAddress("localhost", 50000));
    startDaemons(new PartitionServerAddress("localhost", 50001));
    startDaemons(new PartitionServerAddress("localhost", 50002));
    startDaemons(new PartitionServerAddress("localhost", 50003));

    // launch the Ring Group Conductor
    startRingGroupConductor();

    // Wait for update to finish
    waitForRingGroupToFinishUpdating(rg1, domainGroup);

    // Launch a smart client server
    startSmartClientServer();

    // open a dumb client (through the smart client)
    TTransport trans = new TFramedTransport(new TSocket("localhost", 50004));
    trans.open();
    SmartClient.Client dumbClient = new SmartClient.Client(new TCompactProtocol(trans));

    // make a few requests
    assertEquals(HankResponse.value(bb(1, 1)), dumbClient.get("domain0", bb(1)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain0", bb(2)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain0", bb(3)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain0", bb(4)));

    assertEquals(HankResponse.not_found(true), dumbClient.get("domain0", bb(99)));

    assertEquals(HankResponse.value(bb(1, 1)), dumbClient.get("domain1", bb(4)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain1", bb(3)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain1", bb(2)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain1", bb(1)));

    assertEquals(HankResponse.not_found(true), dumbClient.get("domain1", bb(99)));

    assertEquals(HankResponse.xception(HankException.no_such_domain(true)), dumbClient.get("domain2", bb(1)));

    // make a few bulk requests
    List<ByteBuffer> bulkRequest1 = new ArrayList<ByteBuffer>();
    bulkRequest1.add(bb(1));
    bulkRequest1.add(bb(2));
    bulkRequest1.add(bb(3));
    bulkRequest1.add(bb(4));
    List<HankResponse> bulkResponse1 = new ArrayList<HankResponse>();
    bulkResponse1.add(HankResponse.value(bb(1, 1)));
    bulkResponse1.add(HankResponse.value(bb(2, 2)));
    bulkResponse1.add(HankResponse.value(bb(3, 3)));
    bulkResponse1.add(HankResponse.value(bb(4, 4)));
    List<ByteBuffer> bulkRequest2 = new ArrayList<ByteBuffer>();
    bulkRequest2.add(bb(1));
    bulkRequest2.add(bb(99));
    List<HankResponse> bulkResponse2 = new ArrayList<HankResponse>();
    bulkResponse2.add(HankResponse.value(bb(1, 1)));
    bulkResponse2.add(HankResponse.not_found(true));

    assertEquals(HankBulkResponse.responses(bulkResponse1), dumbClient.getBulk("domain0", bulkRequest1));
    assertEquals(HankBulkResponse.responses(bulkResponse2), dumbClient.getBulk("domain0", bulkRequest2));
    assertEquals(HankBulkResponse.xception(HankException.no_such_domain(true)),
            dumbClient.getBulk("domain2", bulkRequest1));

    // push a new version of one of the domains
    Map<ByteBuffer, ByteBuffer> domain1Delta = new HashMap<ByteBuffer, ByteBuffer>();
    domain1Delta.put(bb(4), bb(41, 41));
    domain1Delta.put(bb(7), bb(42, 42));

    writeOut(coordinator.getDomain("domain1"), domain1Delta, 1, DOMAIN_1_DATAFILES);

    versionMap = new HashMap<>();
    versionMap.put(coordinator.getDomain("domain0"), 0);
    versionMap.put(coordinator.getDomain("domain1"), 1);
    LOG.info("----- stamping new dg1 version -----");
    domainGroup.setDomainVersions(versionMap);

    // wait until domain group change propagates
    WaitUntil.orDie(() -> {
        try {
            return domainGroup.getDomainVersion(coordinator.getDomain("domain1")).getVersionNumber() == 1;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    });

    // wait until the rings have been updated to the new version
    waitForRingGroupToFinishUpdating(coordinator.getRingGroup("rg1"), domainGroup);

    // keep making requests
    assertEquals(HankResponse.value(bb(1, 1)), dumbClient.get("domain0", bb(1)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain0", bb(2)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain0", bb(3)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain0", bb(4)));

    assertEquals(HankResponse.not_found(true), dumbClient.get("domain0", bb(99)));

    assertEquals(HankResponse.value(bb(41, 41)), dumbClient.get("domain1", bb(4)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain1", bb(3)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain1", bb(2)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain1", bb(1)));
    assertEquals(HankResponse.value(bb(8, 4)), dumbClient.get("domain1", bb(5)));
    assertEquals(HankResponse.value(bb(42, 42)), dumbClient.get("domain1", bb(7)));

    assertEquals(HankResponse.xception(HankException.no_such_domain(true)), dumbClient.get("domain2", bb(1)));

    // take down hosts of one ring "unexpectedly"
    stopDaemons(new PartitionServerAddress("localhost", 50000));
    stopDaemons(new PartitionServerAddress("localhost", 50001));

    WaitUntil.orDie(new Condition() {
        @Override
        public boolean test() {
            try {
                return HostState.OFFLINE.equals(r1h1.getState()) && HostState.OFFLINE.equals(r1h2.getState());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    });

    Thread.sleep(1000);

    // keep making requests
    assertEquals(HankResponse.value(bb(1, 1)), dumbClient.get("domain0", bb(1)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain0", bb(2)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain0", bb(3)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain0", bb(4)));

    assertEquals(HankResponse.not_found(true), dumbClient.get("domain0", bb(99)));

    assertEquals(HankResponse.value(bb(41, 41)), dumbClient.get("domain1", bb(4)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain1", bb(3)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain1", bb(2)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain1", bb(1)));
    assertEquals(HankResponse.value(bb(8, 4)), dumbClient.get("domain1", bb(5)));

    assertEquals(HankResponse.xception(HankException.no_such_domain(true)), dumbClient.get("domain2", bb(1)));

    // take down other ring "unexpectedly"
    stopDaemons(new PartitionServerAddress("localhost", 50002));
    stopDaemons(new PartitionServerAddress("localhost", 50003));

    WaitUntil.orDie(() -> {
        try {
            return HostState.OFFLINE.equals(r2h1.getState()) && HostState.OFFLINE.equals(r2h2.getState());
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    });

    // keep making requests
    assertEquals(HankResponse.xception(HankException.failed_retries(1)), dumbClient.get("domain0", bb(1)));
    assertEquals(HankResponse.xception(HankException.failed_retries(1)), dumbClient.get("domain0", bb(2)));
    assertEquals(HankResponse.xception(HankException.failed_retries(1)), dumbClient.get("domain0", bb(3)));
    assertEquals(HankResponse.xception(HankException.failed_retries(1)), dumbClient.get("domain0", bb(4)));

    assertEquals(HankResponse.xception(HankException.failed_retries(1)), dumbClient.get("domain0", bb(99)));

    assertEquals(HankResponse.xception(HankException.failed_retries(1)), dumbClient.get("domain1", bb(4)));
    assertEquals(HankResponse.xception(HankException.failed_retries(1)), dumbClient.get("domain1", bb(3)));
    assertEquals(HankResponse.xception(HankException.failed_retries(1)), dumbClient.get("domain1", bb(2)));
    assertEquals(HankResponse.xception(HankException.failed_retries(1)), dumbClient.get("domain1", bb(1)));
    assertEquals(HankResponse.xception(HankException.failed_retries(1)), dumbClient.get("domain1", bb(5)));

    // restart one ring
    startDaemons(new PartitionServerAddress("localhost", 50000));
    startDaemons(new PartitionServerAddress("localhost", 50001));

    // tell them to start serving
    Rings.commandAll(rg1r1, HostCommand.SERVE_DATA);

    // Wait until the ring is online
    WaitUntil.orDie(new Condition() {
        @Override
        public boolean test() {
            try {
                LOG.debug("Waiting for ring r1 to come back online");
                return r1h1.getState().equals(HostState.SERVING) && r1h2.getState().equals(HostState.SERVING);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    });

    // keep making requests
    assertEquals(HankResponse.value(bb(1, 1)), dumbClient.get("domain0", bb(1)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain0", bb(2)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain0", bb(3)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain0", bb(4)));

    assertEquals(HankResponse.not_found(true), dumbClient.get("domain0", bb(99)));

    assertEquals(HankResponse.value(bb(41, 41)), dumbClient.get("domain1", bb(4)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain1", bb(3)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain1", bb(2)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain1", bb(1)));
    assertEquals(HankResponse.value(bb(8, 4)), dumbClient.get("domain1", bb(5)));

    assertEquals(HankResponse.xception(HankException.no_such_domain(true)), dumbClient.get("domain2", bb(1)));

    // shut it all down
    stopRingGroupConductor();
    stopSmartClient();

    stopDaemons(new PartitionServerAddress("localhost", 50000));
    stopDaemons(new PartitionServerAddress("localhost", 50001));
}

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

License:Apache License

private void connect() throws IOException {
    if (LOG.isTraceEnabled()) {
        LOG.trace("Trying to connect to " + host.getAddress());
    }/* w ww.ja  va 2  s.  co m*/
    // Use connection timeout to connect
    socket = new TSocket(host.getAddress().getHostName(), host.getAddress().getPortNumber(),
            establishConnectionTimeoutMs);
    transport = new TFramedTransport(socket);
    try {
        transport.open();
        // Set socket timeout to regular mode
        setSocketTimeout(queryTimeoutMs);
    } catch (TTransportException e) {
        LOG.error("Failed to establish connection to host " + host.getAddress(), e);
        disconnect();
        throw new IOException("Failed to establish connection to host " + host.getAddress(), e);
    }
    TProtocol proto = new TCompactProtocol(transport);
    client = new PartitionServer.Client(proto);
    if (LOG.isTraceEnabled()) {
        LOG.trace("Connection to " + host.getAddress() + " opened.");
    }
    state = HostConnectionState.CONNECTED;
}

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

License:Apache License

private void connect() {
    if (isClosed()) {
        LOG.trace("Trying to connect to " + hostConfig.getAddress() + ", waiting on the lock...");
        lock.lock();/*from www.j av  a  2  s .  co m*/
        transport = new TFramedTransport(
                new TSocket(hostConfig.getAddress().getHostName(), hostConfig.getAddress().getPortNumber()));
        try {
            transport.open();
        } catch (TTransportException e) {
            LOG.error("Failed to establish connection to host!", e);
            transport = null;
            return;
        }
        TProtocol proto = new TCompactProtocol(transport);
        client = new PartDaemon.Client(proto);
        closed = false;
        LOG.trace("Connection to " + hostConfig.getAddress() + " opened!");
        lock.unlock();
    }
}

From source file:com.rapleaf.hank.IntegrationTest.java

License:Apache License

public void testItAll() throws Throwable {
    Logger.getLogger("com.rapleaf.hank.coordinator.zk").setLevel(Level.INFO);
    Logger.getLogger("com.rapleaf.hank.part_daemon").setLevel(Level.INFO);
    Logger.getLogger("com.rapleaf.hank.storage").setLevel(Level.TRACE);
    create(domainsRoot);//from w  ww .  j a  v a 2 s.co m
    create(domainGroupsRoot);
    create(ringGroupsRoot);

    PrintWriter pw = new PrintWriter(new FileWriter(clientConfigYml));
    pw.println("coordinator:");
    pw.println("  factory: com.rapleaf.hank.coordinator.zk.ZooKeeperCoordinator$Factory");
    pw.println("  options:");
    pw.println("    connect_string: localhost:" + getZkClientPort());
    pw.println("    session_timeout: 1000000");
    pw.println("    domains_root: " + domainsRoot);
    pw.println("    domain_groups_root: " + domainGroupsRoot);
    pw.println("    ring_groups_root: " + ringGroupsRoot);
    pw.close();

    pw = new PrintWriter(new FileWriter(domain0OptsYml));
    pw.println("key_hash_size: 10");
    pw.println("hasher: " + Murmur64Hasher.class.getName());
    pw.println("max_allowed_part_size: " + 1024 * 1024);
    pw.println("hash_index_bits: 1");
    pw.println("record_file_read_buffer_bytes: 10240");
    pw.println("remote_domain_root: " + DOMAIN_0_DATAFILES);
    pw.println("file_ops_factory: " + LocalFileOps.Factory.class.getName());
    pw.close();
    AddDomain.main(new String[] { "--name", "domain0", "--num-parts", "2", "--storage-engine-factory",
            Curly.Factory.class.getName(), "--storage-engine-options", domain0OptsYml, "--partitioner",
            Murmur64Partitioner.class.getName(), "--config", clientConfigYml, "--initial-version", "1" });

    pw = new PrintWriter(new FileWriter(domain1OptsYml));
    pw.println("key_hash_size: 10");
    pw.println("hasher: " + Murmur64Hasher.class.getName());
    pw.println("max_allowed_part_size: " + 1024 * 1024);
    pw.println("hash_index_bits: 1");
    pw.println("record_file_read_buffer_bytes: 10240");
    pw.println("remote_domain_root: " + DOMAIN_1_DATAFILES);
    pw.println("file_ops_factory: " + LocalFileOps.Factory.class.getName());
    pw.println("compression_codec: " + JavaGzipCompressionCodec.class.getName());
    pw.close();
    AddDomain.main(new String[] { "--name", "domain1", "--num-parts", "2", "--storage-engine-factory",
            Curly.Factory.class.getName(), "--storage-engine-options", domain1OptsYml, "--partitioner",
            Murmur64Partitioner.class.getName(), "--config", clientConfigYml, "--initial-version", "1" });

    Configurator config = new YamlClientConfigurator(clientConfigYml);

    Coordinator coord = config.getCoordinator();

    // write a base version of each domain
    Map<ByteBuffer, ByteBuffer> domain0DataItems = new HashMap<ByteBuffer, ByteBuffer>();
    domain0DataItems.put(bb(1), bb(1, 1));
    domain0DataItems.put(bb(2), bb(2, 2));
    domain0DataItems.put(bb(3), bb(3, 3));
    domain0DataItems.put(bb(4), bb(4, 4));
    domain0DataItems.put(bb(5), bb(5, 1));
    domain0DataItems.put(bb(6), bb(6, 2));
    domain0DataItems.put(bb(7), bb(7, 3));
    domain0DataItems.put(bb(8), bb(8, 4));

    writeOut(coord.getDomain("domain0"), domain0DataItems, 1, true, DOMAIN_0_DATAFILES);

    Map<ByteBuffer, ByteBuffer> domain1DataItems = new HashMap<ByteBuffer, ByteBuffer>();
    domain1DataItems.put(bb(4), bb(1, 1));
    domain1DataItems.put(bb(3), bb(2, 2));
    domain1DataItems.put(bb(2), bb(3, 3));
    domain1DataItems.put(bb(1), bb(4, 4));
    domain1DataItems.put(bb(8), bb(5, 1));
    domain1DataItems.put(bb(7), bb(6, 2));
    domain1DataItems.put(bb(6), bb(7, 3));
    domain1DataItems.put(bb(5), bb(8, 4));

    writeOut(coord.getDomain("domain1"), domain1DataItems, 1, true, DOMAIN_1_DATAFILES);

    // configure domain group
    AddDomainGroup.main(new String[] { "--name", "dg1", "--config", clientConfigYml, });

    LOG.debug("-------- domain is created --------");

    // add our domains
    AddDomainToDomainGroup.main(new String[] { "--domain-group", "dg1", "--domain", "domain0", "--id", "0",
            "--config", clientConfigYml, });

    AddDomainToDomainGroup.main(new String[] { "--domain-group", "dg1", "--domain", "domain1", "--id", "1",
            "--config", clientConfigYml, });

    // simulate publisher pushing out a new version
    DomainGroup domainGroup = null;
    coord = config.getCoordinator();
    for (int i = 0; i < 15; i++) {
        domainGroup = coord.getDomainGroup("dg1");
        if (domainGroup != null) {
            break;
        }
        Thread.sleep(1000);
    }
    assertNotNull("dg1 wasn't found, even after waiting 15 seconds!", domainGroup);

    Map<String, Integer> versionMap = new HashMap<String, Integer>();
    versionMap.put("domain0", 1);
    versionMap.put("domain1", 1);
    domainGroup.createNewVersion(versionMap);

    // configure ring group
    AddRingGroup.main(
            new String[] { "--ring-group", "rg1", "--domain-group", "dg1", "--config", clientConfigYml, });

    // add ring 1
    AddRing.main(new String[] { "--ring-group", "rg1", "--ring-number", "1", "--hosts",
            "localhost:50000,localhost:50001", "--config", clientConfigYml, });

    // add ring 2
    AddRing.main(new String[] { "--ring-group", "rg1", "--ring-number", "2", "--hosts",
            "localhost:50002,localhost:50003", "--config", clientConfigYml, });

    // launch 2x 2-node rings
    startDaemons(new PartDaemonAddress("localhost", 50000));
    startDaemons(new PartDaemonAddress("localhost", 50001));
    startDaemons(new PartDaemonAddress("localhost", 50002));
    startDaemons(new PartDaemonAddress("localhost", 50003));

    // launch the data deployer
    startDataDeployer();

    // launch a smart client server
    startSmartClientServer();

    // open a dumb client (through the smart client)
    TTransport trans = new TFramedTransport(new TSocket("localhost", 50004));
    trans.open();
    TProtocol proto = new TCompactProtocol(trans);
    SmartClient.Client dumbClient = new SmartClient.Client(proto);

    boolean found = false;
    for (int i = 0; i < 15; i++) {
        HankResponse r = dumbClient.get("domain0", bb(1));
        if (r.isSet(_Fields.VALUE)) {
            found = true;
            break;
        }
        LOG.trace(r);
        Thread.sleep(1000);
    }

    if (!found) {
        fail("No ring came online in the time we waited!");
    }

    // make a few requests
    assertEquals(HankResponse.value(bb(1, 1)), dumbClient.get("domain0", bb(1)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain0", bb(2)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain0", bb(3)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain0", bb(4)));

    assertEquals(HankResponse.not_found(true), dumbClient.get("domain0", bb(99)));

    assertEquals(HankResponse.value(bb(1, 1)), dumbClient.get("domain1", bb(4)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain1", bb(3)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain1", bb(2)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain1", bb(1)));

    assertEquals(HankResponse.not_found(true), dumbClient.get("domain1", bb(99)));

    assertEquals(HankResponse.xception(HankExceptions.no_such_domain(true)), dumbClient.get("domain2", bb(1)));

    // push a new version of one of the domains
    Map<ByteBuffer, ByteBuffer> domain1Delta = new HashMap<ByteBuffer, ByteBuffer>();
    domain1Delta.put(bb(4), bb(6, 6));
    domain1Delta.put(bb(5), bb(5, 5));

    writeOut(coord.getDomain("domain1"), domain1Delta, 2, false, DOMAIN_1_DATAFILES);

    versionMap = new HashMap<String, Integer>();
    versionMap.put("domain0", 1);
    versionMap.put("domain1", 2);
    LOG.info("----- stamping new dg1 version -----");
    final DomainGroupVersion newVersion = domainGroup.createNewVersion(versionMap);

    // wait until the rings have been updated to the new version
    coord = config.getCoordinator();
    final RingGroup ringGroupConfig = coord.getRingGroupConfig("rg1");
    for (int i = 0; i < 30; i++) {
        if (ringGroupConfig.isUpdating()) {
            LOG.info("Ring group is still updating. Sleeping...");
        } else {
            if (ringGroupConfig.getCurrentVersion() == newVersion.getVersionNumber()) {
                break;
            } else {
                LOG.info("Ring group is not yet at the correct version. Continuing to wait.");
            }
        }
        Thread.sleep(1000);
    }

    assertFalse("ring group failed to finish updating after 30secs", ringGroupConfig.isUpdating());

    // keep making requests
    assertEquals(HankResponse.value(bb(1, 1)), dumbClient.get("domain0", bb(1)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain0", bb(2)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain0", bb(3)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain0", bb(4)));

    assertEquals(HankResponse.not_found(true), dumbClient.get("domain0", bb(99)));

    assertEquals(HankResponse.value(bb(6, 6)), dumbClient.get("domain1", bb(4)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain1", bb(3)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain1", bb(2)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain1", bb(1)));
    assertEquals(HankResponse.value(bb(5, 5)), dumbClient.get("domain1", bb(5)));

    assertEquals(HankResponse.xception(HankExceptions.no_such_domain(true)), dumbClient.get("domain2", bb(1)));

    // take down one of the nodes in one of the rings "unexpectedly"
    stopDaemons(new PartDaemonAddress("localhost", 50000));
    stopDaemons(new PartDaemonAddress("localhost", 50001));

    // keep making requests
    assertEquals(HankResponse.value(bb(1, 1)), dumbClient.get("domain0", bb(1)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain0", bb(2)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain0", bb(3)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain0", bb(4)));

    assertEquals(HankResponse.not_found(true), dumbClient.get("domain0", bb(99)));

    assertEquals(HankResponse.value(bb(6, 6)), dumbClient.get("domain1", bb(4)));
    assertEquals(HankResponse.value(bb(2, 2)), dumbClient.get("domain1", bb(3)));
    assertEquals(HankResponse.value(bb(3, 3)), dumbClient.get("domain1", bb(2)));
    assertEquals(HankResponse.value(bb(4, 4)), dumbClient.get("domain1", bb(1)));
    assertEquals(HankResponse.value(bb(5, 5)), dumbClient.get("domain1", bb(5)));

    assertEquals(HankResponse.xception(HankExceptions.no_such_domain(true)), dumbClient.get("domain2", bb(1)));

    // shut it all down
    stopDataDeployer();
    stopSmartClient();

    stopDaemons(new PartDaemonAddress("localhost", 50002));
    stopDaemons(new PartDaemonAddress("localhost", 50003));
}

From source file:com.siemens.sw360.attachments.TestAttachmentClient.java

License:Open Source License

public static void main(String[] args) throws TException, IOException {
    THttpClient thriftClient = new THttpClient("http://127.0.0.1:8080/attachmentservice/thrift");
    TProtocol protocol = new TCompactProtocol(thriftClient);
    AttachmentService.Iface client = new AttachmentService.Client(protocol);

    System.out.println(client.getDatabaseAddress().toString());

}