package com.alibaba.doris.client.net.netty; import java.net.InetSocketAddress; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import com.alibaba.doris.client.net.Connection; import com.alibaba.doris.client.net.ConnectionFactory; import com.alibaba.doris.client.net.NetException; import com.alibaba.doris.client.net.OperationFuture; import com.alibaba.doris.client.net.command.CheckCommand.CheckType; import com.alibaba.doris.client.net.command.result.CheckResult; import com.alibaba.doris.common.data.Key; import com.alibaba.doris.common.data.KeyFactory; import com.alibaba.doris.common.data.Value; import com.alibaba.doris.common.data.ValueFactory; import com.alibaba.doris.common.data.impl.NullValueImpl; import com.alibaba.doris.common.data.util.ByteUtils; /** * @author ajun Email:jack.yuj@alibaba-inc.com */ public class MultiThreadConnectionTestRuning { public static void main(String[] args) { ConnectionFactory factory = ConnectionFactory.getInstance(); InetSocketAddress remoteAddress = new InetSocketAddress("127.0.0.1", 9000); Connection con = factory.getConnection(remoteAddress); try { con.open(); runTask(con); } catch (Throwable e) { e.printStackTrace(); } finally { con.close(); factory.releaseResources(); } } private static void runTask(final Connection client) throws InterruptedException { final int len = 10000; int nThreads = 100; StringBuilder value = new StringBuilder(); for (int i = 0; i < 512; i++) { value.append("1"); } ExecutorService executor = Executors.newFixedThreadPool(nThreads); final CountDownLatch startGate = new CountDownLatch(1); final CountDownLatch endGate = new CountDownLatch(nThreads); for (int i = 0; i < nThreads; i++) { executor.execute(new Runnable() { public void run() { Connection con = null; try { ConnectionFactory factory = ConnectionFactory.getInstance(); InetSocketAddress remoteAddress = new InetSocketAddress("127.0.0.1", 9000); con = factory.getConnection(remoteAddress); con.open(); Random random = new Random(); String key = Thread.currentThread().getName() + "_KEY_"; StringBuilder value = new StringBuilder(); int strLen = random.nextInt(512); for (int j = 0; j < strLen; j++) { value.append("1"); } String v = value.toString(); int j = 0; startGate.await(); for (int i = 0; i < len; i++) { sizeCount.addAndGet(value.length()); Key keyObj = KeyFactory.createKey(1000, key + i, 0); keyObj.setVNode(10); Value valueObj = ValueFactory.createValue(ByteUtils.stringToByte(v), System.currentTimeMillis()); Boolean bReturn = con.put(keyObj, valueObj).get(); if (bReturn == false) { putFailCount.incrementAndGet(); System.out.println("Put failed."); continue; } // client.set("key_" + i, v + "1", 0); OperationFuture<Value> vi = con.get(keyObj); Value vnew = vi.get(); if (vnew == null) { errCount.incrementAndGet(); } if ((vnew instanceof NullValueImpl)) { System.out.println("Null value:" + keyObj.getPhysicalKey()); nullCount.incrementAndGet(); } if (j % 100 == 0) { System.out.println("operation .nullCount:" + nullCount.get() + " Error Count:" + errCount.get()); } j++; } } catch (Exception e) { e.printStackTrace(); } finally { endGate.countDown(); con.close(); } } }); } Thread.sleep(1000); long start = System.currentTimeMillis(); startGate.countDown(); endGate.await(); long end = System.currentTimeMillis(); executor.shutdown(); long size = (sizeCount.get() * 2) / 1024; long total = end - start; Thread.sleep(100); System.out.println("-------------------" + client.getClass().getName() + "---------------"); System.out.println("total time:" + total + " error count: (null)" + errCount.get() + " NullValue:" + nullCount.get() + " put fail:" + putFailCount.get()); System.out.println("size:" + size + "KB"); System.out.println("len=" + len + " avg:" + total / len + " size:" + size + "KB " + (size) / ((total) / 1000) + "K/S total:" + total); System.out.println("-------------------end---------------"); } public static void postGetAndSet(Connection connection, String key, String value) throws InterruptedException, ExecutionException { sizeCount.addAndGet(value.length()); Key keyObj = KeyFactory.createKey(100, key, 0); Value valueObj = ValueFactory.createValue(ByteUtils.stringToByte(value), System.currentTimeMillis()); Boolean bReturn = connection.put(keyObj, valueObj).get(); if (bReturn == false) { putFailCount.incrementAndGet(); System.out.println("Put failed."); return; } // client.set("key_" + i, v + "1", 0); OperationFuture<Value> vi = connection.get(keyObj); Value vnew = vi.get(); if (vnew == null) { errCount.incrementAndGet(); } if ((vnew instanceof NullValueImpl)) { System.out.println("Null value:" + keyObj.getPhysicalKey()); nullCount.incrementAndGet(); } } private static void runTask0(final Connection client) throws InterruptedException { final int len = 100000; int nThreads = 10; StringBuilder value = new StringBuilder(); for (int i = 0; i < 512; i++) { value.append("1"); } ExecutorService executor = Executors.newFixedThreadPool(nThreads); final CountDownLatch startGate = new CountDownLatch(1); final CountDownLatch endGate = new CountDownLatch(nThreads); for (int i = 0; i < nThreads; i++) { executor.execute(new Runnable() { public void run() { try { startGate.await(); for (int i = 0; i < len; i++) { ConnectionFactory factory = ConnectionFactory.getInstance(); InetSocketAddress remoteAddress = new InetSocketAddress("127.0.0.1", 9000); Connection con = factory.getConnection(remoteAddress); try { con.open(); if (con.isConnected() == false) { errCount.incrementAndGet(); } CheckResult result = con.check(CheckType.CHECK_NORMAL_NODE).get(1, TimeUnit.SECONDS); if (null == result) { nullCount.incrementAndGet(); } putFailCount.incrementAndGet(); } catch (NetException net) { errCount.incrementAndGet(); net.printStackTrace(); Thread.sleep(1000); } finally { con.close(); } } } catch (Exception e) { e.printStackTrace(); } finally { endGate.countDown(); } } }); } Thread.sleep(1000); long start = System.currentTimeMillis(); startGate.countDown(); endGate.await(); long end = System.currentTimeMillis(); executor.shutdown(); long size = (sizeCount.get() * 2) / 1024; long total = end - start; Thread.sleep(100); System.out.println("-------------------" + client.getClass().getName() + "---------------"); System.out.println("total time:" + total + " error count: (null)" + errCount.get() + " NullValue:" + nullCount.get() + " put fail:" + putFailCount.get()); System.out.println("size:" + size + "KB"); System.out.println("len=" + len + " avg:" + total / len + " size:" + size + "KB " + (size) / ((total) / 1000) + "K/S total:" + total); System.out.println("-------------------end---------------"); } private static AtomicInteger errCount = new AtomicInteger(); private static AtomicInteger nullCount = new AtomicInteger(); private static AtomicInteger putFailCount = new AtomicInteger(); private static AtomicLong sizeCount = new AtomicLong(); }