List of usage examples for org.apache.thrift.protocol TCompactProtocol TCompactProtocol
public TCompactProtocol(TTransport transport)
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()); }