List of usage examples for io.netty.util HashedWheelTimer HashedWheelTimer
public HashedWheelTimer()
From source file:com.linkedin.pinot.transport.netty.NettySingleConnectionIntegrationTest.java
License:Apache License
@Test public void testCancelOutstandingRequest() throws Exception { NettyClientMetrics metric = new NettyClientMetrics(null, "abc"); String response = "dummy response"; int port = 9089; CountDownLatch latch = new CountDownLatch(1); MyRequestHandler handler = new MyRequestHandler(response, latch); MyRequestHandlerFactory handlerFactory = new MyRequestHandlerFactory(handler); NettyTCPServer serverConn = new NettyTCPServer(port, handlerFactory, null); Thread serverThread = new Thread(serverConn, "ServerMain"); serverThread.start();/*w ww . j a v a 2s.c om*/ Thread.sleep(1000); ServerInstance server = new ServerInstance("localhost", port); EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); NettyTCPClientConnection clientConn = new NettyTCPClientConnection(server, eventLoopGroup, new HashedWheelTimer(), metric); LOGGER.info("About to connect the client !!"); boolean connected = clientConn.connect(); LOGGER.info("Client connected !!"); Assert.assertTrue(connected, "connected"); Thread.sleep(1000); String request = "dummy request"; LOGGER.info("Sending the request !!"); ResponseFuture serverRespFuture = clientConn.sendRequest(Unpooled.wrappedBuffer(request.getBytes()), 1L, 5000L); serverRespFuture.cancel(false); latch.countDown(); ByteBuf serverResp = serverRespFuture.getOne(); Assert.assertNull(serverResp); Assert.assertTrue(serverRespFuture.isCancelled(), "Is Cancelled"); clientConn.close(); serverConn.shutdownGracefully(); }
From source file:com.linkedin.pinot.transport.netty.NettySingleConnectionIntegrationTest.java
License:Apache License
@Test public void testConcurrentRequestDispatchError() throws Exception { NettyClientMetrics metric = new NettyClientMetrics(null, "abc"); String response = "dummy response"; int port = 9089; CountDownLatch latch = new CountDownLatch(1); MyRequestHandler handler = new MyRequestHandler(response, latch); MyRequestHandlerFactory handlerFactory = new MyRequestHandlerFactory(handler); NettyTCPServer serverConn = new NettyTCPServer(port, handlerFactory, null); Thread serverThread = new Thread(serverConn, "ServerMain"); serverThread.start();//ww w . j a va2 s .c o m Thread.sleep(1000); ServerInstance server = new ServerInstance("localhost", port); EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); NettyTCPClientConnection clientConn = new NettyTCPClientConnection(server, eventLoopGroup, new HashedWheelTimer(), metric); LOGGER.info("About to connect the client !!"); boolean connected = clientConn.connect(); LOGGER.info("Client connected !!"); Assert.assertTrue(connected, "connected"); Thread.sleep(1000); String request = "dummy request"; LOGGER.info("Sending the request !!"); ResponseFuture serverRespFuture = clientConn.sendRequest(Unpooled.wrappedBuffer(request.getBytes()), 1L, 5000L); boolean gotException = false; try { clientConn.sendRequest(Unpooled.wrappedBuffer(request.getBytes()), 1L, 5000L); } catch (IllegalStateException ex) { gotException = true; // Second request should have failed. LOGGER.info("got exception ", ex); } latch.countDown(); ByteBuf serverResp = serverRespFuture.getOne(); byte[] b2 = new byte[serverResp.readableBytes()]; serverResp.readBytes(b2); String gotResponse = new String(b2); Assert.assertEquals(gotResponse, response, "Response Check at client"); Assert.assertEquals(handler.getRequest(), request, "Request Check at server"); clientConn.close(); serverConn.shutdownGracefully(); Assert.assertTrue(gotException, "GotException "); }
From source file:com.linkedin.pinot.transport.netty.NettySingleConnectionIntegrationTest.java
License:Apache License
@Test /**//w ww. ja v a 2 s .c o m * Test Single Large ( 2 MB) request response * @throws Exception */ public void testSingleLargeRequestResponse() throws Exception { NettyClientMetrics metric = new NettyClientMetrics(null, "abc"); String response_prefix = "response_"; String response = generatePayload(response_prefix, 1024 * 1024 * 2); int port = 9089; MyRequestHandler handler = new MyRequestHandler(response, null); MyRequestHandlerFactory handlerFactory = new MyRequestHandlerFactory(handler); NettyTCPServer serverConn = new NettyTCPServer(port, handlerFactory, null); Thread serverThread = new Thread(serverConn, "ServerMain"); serverThread.start(); Thread.sleep(1000); ServerInstance server = new ServerInstance("localhost", port); EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); NettyTCPClientConnection clientConn = new NettyTCPClientConnection(server, eventLoopGroup, new HashedWheelTimer(), metric); try { LOGGER.info("About to connect the client !!"); boolean connected = clientConn.connect(); LOGGER.info("Client connected !!"); Assert.assertTrue(connected, "connected"); Thread.sleep(1000); String request_prefix = "request_"; String request = generatePayload(request_prefix, 1024 * 1024 * 2); LOGGER.info("Sending the request !!"); ResponseFuture serverRespFuture = clientConn.sendRequest(Unpooled.wrappedBuffer(request.getBytes()), 1L, 5000L); LOGGER.info("Request sent !!"); ByteBuf serverResp = serverRespFuture.getOne(); byte[] b2 = new byte[serverResp.readableBytes()]; serverResp.readBytes(b2); String gotResponse = new String(b2); Assert.assertEquals(gotResponse, response, "Response Check at client"); Assert.assertEquals(handler.getRequest(), request, "Request Check at server"); } finally { if (null != clientConn) { clientConn.close(); } if (null != serverConn) { serverConn.shutdownGracefully(); } } }
From source file:com.linkedin.pinot.transport.netty.NettySingleConnectionIntegrationTest.java
License:Apache License
@Test /**//from w ww . j a va2 s.c o m * Send 10K small sized request in sequence. Verify each request and response. * @throws Exception */ public void test10KSmallRequestResponses() throws Exception { NettyClientMetrics metric = new NettyClientMetrics(null, "abc"); int port = 9089; MyRequestHandler handler = new MyRequestHandler(null, null); MyRequestHandlerFactory handlerFactory = new MyRequestHandlerFactory(handler); NettyTCPServer serverConn = new NettyTCPServer(port, handlerFactory, null); Thread serverThread = new Thread(serverConn, "ServerMain"); serverThread.start(); Thread.sleep(1000); ServerInstance server = new ServerInstance("localhost", port); EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); NettyTCPClientConnection clientConn = new NettyTCPClientConnection(server, eventLoopGroup, new HashedWheelTimer(), metric); try { LOGGER.info("About to connect the client !!"); boolean connected = clientConn.connect(); LOGGER.info("Client connected !!"); Assert.assertTrue(connected, "connected"); Thread.sleep(1000); for (int i = 0; i < 10000; i++) { String request = "dummy request :" + i; String response = "dummy response :" + i; handler.setResponse(response); LOGGER.info("Sending the request (" + request + ")"); ResponseFuture serverRespFuture = clientConn.sendRequest(Unpooled.wrappedBuffer(request.getBytes()), 1L, 5000L); LOGGER.info("Request sent !!"); ByteBuf serverResp = serverRespFuture.getOne(); if (null == serverResp) { LOGGER.error("Got unexpected error while trying to get response.", serverRespFuture.getError()); } byte[] b2 = new byte[serverResp.readableBytes()]; serverResp.readBytes(b2); String gotResponse = new String(b2); Assert.assertEquals(gotResponse, response, "Response Check at client"); Assert.assertEquals(handler.getRequest(), request, "Request Check at server"); } } finally { if (null != clientConn) { clientConn.close(); } if (null != serverConn) { serverConn.shutdownGracefully(); } } }
From source file:com.linkedin.pinot.transport.netty.NettySingleConnectionIntegrationTest.java
License:Apache License
/** * Send 100 large ( 2MB) sized request in sequence. Verify each request and response. * @throws Exception// w w w . j a v a 2 s. co m */ //@Test public void test100LargeRequestResponses() throws Exception { NettyClientMetrics metric = new NettyClientMetrics(null, "abc"); int port = 9089; MyRequestHandler handler = new MyRequestHandler(null, null); MyRequestHandlerFactory handlerFactory = new MyRequestHandlerFactory(handler); NettyTCPServer serverConn = new NettyTCPServer(port, handlerFactory, null); Thread serverThread = new Thread(serverConn, "ServerMain"); serverThread.start(); Thread.sleep(1000); ServerInstance server = new ServerInstance("localhost", port); EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); NettyTCPClientConnection clientConn = new NettyTCPClientConnection(server, eventLoopGroup, new HashedWheelTimer(), metric); LOGGER.info("About to connect the client !!"); boolean connected = clientConn.connect(); LOGGER.info("Client connected !!"); Assert.assertTrue(connected, "connected"); Thread.sleep(1000); try { for (int i = 0; i < 100; i++) { String request_prefix = "request_"; String request = generatePayload(request_prefix, 1024 * 1024 * 20); String response_prefix = "response_"; String response = generatePayload(response_prefix, 1024 * 1024 * 20); handler.setResponse(response); //LOG.info("Sending the request (" + request + ")"); ResponseFuture serverRespFuture = clientConn.sendRequest(Unpooled.wrappedBuffer(request.getBytes()), 1L, 5000L); //LOG.info("Request sent !!"); ByteBuf serverResp = serverRespFuture.getOne(); byte[] b2 = new byte[serverResp.readableBytes()]; serverResp.readBytes(b2); String gotResponse = new String(b2); Assert.assertEquals(gotResponse, response, "Response Check at client"); Assert.assertEquals(handler.getRequest(), request, "Request Check at server"); } } finally { if (null != clientConn) { clientConn.close(); } if (null != serverConn) { serverConn.shutdownGracefully(); } } }
From source file:com.linkedin.pinot.transport.perf.ScatterGatherPerfClient.java
License:Apache License
private void setup() { MetricsRegistry registry = new MetricsRegistry(); _timedExecutor = new ScheduledThreadPoolExecutor(1); _service = new ThreadPoolExecutor(10, 10, 10, TimeUnit.DAYS, new LinkedBlockingDeque<Runnable>()); _eventLoopGroup = new NioEventLoopGroup(10); _timer = new HashedWheelTimer(); NettyClientMetrics clientMetrics = new NettyClientMetrics(registry, "client_"); PooledNettyClientResourceManager rm = new PooledNettyClientResourceManager(_eventLoopGroup, _timer, clientMetrics);/*w w w. ja v a2 s .co m*/ _pool = new KeyedPoolImpl<ServerInstance, NettyClientConnection>(1, _maxActiveConnections, 300000, 10, rm, _timedExecutor, MoreExecutors.sameThreadExecutor(), registry); rm.setPool(_pool); _scatterGather = new ScatterGatherImpl(_pool, _service); for (AsyncReader r : _readerThreads) { r.start(); } }
From source file:com.linkedin.pinot.transport.scattergather.ScatterGatherTest.java
License:Apache License
@Test public void testSingleServer() throws Exception { MetricsRegistry registry = new MetricsRegistry(); // Server start int serverPort = 7071; NettyTCPServer server1 = new NettyTCPServer(serverPort, new TestRequestHandlerFactory(0, 1), null); Thread t1 = new Thread(server1); t1.start();/*from w w w . j av a2s . com*/ //Client setup ScheduledExecutorService timedExecutor = new ScheduledThreadPoolExecutor(1); ExecutorService poolExecutor = MoreExecutors.sameThreadExecutor(); ExecutorService service = new ThreadPoolExecutor(1, 1, 1, TimeUnit.DAYS, new LinkedBlockingDeque<Runnable>()); EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); NettyClientMetrics clientMetrics = new NettyClientMetrics(registry, "client_"); PooledNettyClientResourceManager rm = new PooledNettyClientResourceManager(eventLoopGroup, new HashedWheelTimer(), clientMetrics); KeyedPoolImpl<ServerInstance, NettyClientConnection> pool = new KeyedPoolImpl<ServerInstance, NettyClientConnection>( 1, 1, 300000, 1, rm, timedExecutor, poolExecutor, registry); rm.setPool(pool); ScatterGatherImpl scImpl = new ScatterGatherImpl(pool, service); SegmentIdSet pg = new SegmentIdSet(); pg.addSegment(new SegmentId("0")); ServerInstance serverInstance1 = new ServerInstance("localhost", serverPort); List<ServerInstance> instances = new ArrayList<ServerInstance>(); instances.add(serverInstance1); Map<ServerInstance, SegmentIdSet> pgMap = new HashMap<ServerInstance, SegmentIdSet>(); pgMap.put(serverInstance1, pg); String request = "request_0"; Map<SegmentIdSet, String> pgMapStr = new HashMap<SegmentIdSet, String>(); pgMapStr.put(pg, request); ScatterGatherRequest req = new TestScatterGatherRequest(pgMap, pgMapStr); CompositeFuture<ServerInstance, ByteBuf> fut = scImpl.scatterGather(req); Map<ServerInstance, ByteBuf> v = fut.get(); ByteBuf b = v.get(serverInstance1); byte[] b2 = new byte[b.readableBytes()]; b.readBytes(b2); String response = new String(b2); Assert.assertEquals(response, "response_0_0"); Assert.assertEquals(v.size(), 1); server1.shutdownGracefully(); pool.shutdown(); service.shutdown(); eventLoopGroup.shutdownGracefully(); }
From source file:com.linkedin.pinot.transport.scattergather.ScatterGatherTest.java
License:Apache License
@Test public void testMultipleServerHappy() throws Exception { MetricsRegistry registry = new MetricsRegistry(); // Server start int serverPort1 = 7071; int serverPort2 = 7072; int serverPort3 = 7073; int serverPort4 = 7074; NettyTCPServer server1 = new NettyTCPServer(serverPort1, new TestRequestHandlerFactory(0, 1), null); NettyTCPServer server2 = new NettyTCPServer(serverPort2, new TestRequestHandlerFactory(1, 1), null); NettyTCPServer server3 = new NettyTCPServer(serverPort3, new TestRequestHandlerFactory(2, 1), null); NettyTCPServer server4 = new NettyTCPServer(serverPort4, new TestRequestHandlerFactory(3, 1), null); Thread t1 = new Thread(server1); Thread t2 = new Thread(server2); Thread t3 = new Thread(server3); Thread t4 = new Thread(server4); t1.start();//from w ww . ja va 2 s. co m t2.start(); t3.start(); t4.start(); //Client setup ScheduledExecutorService timedExecutor = new ScheduledThreadPoolExecutor(1); ExecutorService poolExecutor = MoreExecutors.sameThreadExecutor(); ExecutorService service = new ThreadPoolExecutor(1, 1, 1, TimeUnit.DAYS, new LinkedBlockingDeque<Runnable>()); EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); NettyClientMetrics clientMetrics = new NettyClientMetrics(registry, "client_"); PooledNettyClientResourceManager rm = new PooledNettyClientResourceManager(eventLoopGroup, new HashedWheelTimer(), clientMetrics); KeyedPoolImpl<ServerInstance, NettyClientConnection> pool = new KeyedPoolImpl<ServerInstance, NettyClientConnection>( 1, 1, 300000, 1, rm, timedExecutor, poolExecutor, registry); rm.setPool(pool); SegmentIdSet pg1 = new SegmentIdSet(); pg1.addSegment(new SegmentId("0")); SegmentIdSet pg2 = new SegmentIdSet(); pg2.addSegment(new SegmentId("1")); SegmentIdSet pg3 = new SegmentIdSet(); pg3.addSegment(new SegmentId("2")); SegmentIdSet pg4 = new SegmentIdSet(); pg4.addSegment(new SegmentId("3")); ServerInstance serverInstance1 = new ServerInstance("localhost", serverPort1); ServerInstance serverInstance2 = new ServerInstance("localhost", serverPort2); ServerInstance serverInstance3 = new ServerInstance("localhost", serverPort3); ServerInstance serverInstance4 = new ServerInstance("localhost", serverPort4); Map<ServerInstance, SegmentIdSet> pgMap = new HashMap<ServerInstance, SegmentIdSet>(); pgMap.put(serverInstance1, pg1); pgMap.put(serverInstance2, pg2); pgMap.put(serverInstance3, pg3); pgMap.put(serverInstance4, pg4); String request1 = "request_0"; String request2 = "request_1"; String request3 = "request_2"; String request4 = "request_3"; Map<SegmentIdSet, String> pgMapStr = new HashMap<SegmentIdSet, String>(); pgMapStr.put(pg1, request1); pgMapStr.put(pg2, request2); pgMapStr.put(pg3, request3); pgMapStr.put(pg4, request4); ScatterGatherRequest req = new TestScatterGatherRequest(pgMap, pgMapStr); ScatterGatherImpl scImpl = new ScatterGatherImpl(pool, service); CompositeFuture<ServerInstance, ByteBuf> fut = scImpl.scatterGather(req); Map<ServerInstance, ByteBuf> v = fut.get(); Assert.assertEquals(v.size(), 4); ByteBuf b = v.get(serverInstance1); byte[] b2 = new byte[b.readableBytes()]; b.readBytes(b2); String response = new String(b2); Assert.assertEquals(response, "response_0_0"); b = v.get(serverInstance2); b2 = new byte[b.readableBytes()]; b.readBytes(b2); response = new String(b2); Assert.assertEquals(response, "response_1_0"); b = v.get(serverInstance3); b2 = new byte[b.readableBytes()]; b.readBytes(b2); response = new String(b2); Assert.assertEquals(response, "response_2_0"); b = v.get(serverInstance4); b2 = new byte[b.readableBytes()]; b.readBytes(b2); response = new String(b2); Assert.assertEquals(response, "response_3_0"); server1.shutdownGracefully(); server2.shutdownGracefully(); server3.shutdownGracefully(); server4.shutdownGracefully(); pool.shutdown(); service.shutdown(); eventLoopGroup.shutdownGracefully(); }
From source file:com.linkedin.pinot.transport.scattergather.ScatterGatherTest.java
License:Apache License
@Test public void testMultipleServerTimeout() throws Exception { MetricsRegistry registry = new MetricsRegistry(); // Server start int serverPort1 = 7081; int serverPort2 = 7082; int serverPort3 = 7083; int serverPort4 = 7084; // Timeout server NettyTCPServer server1 = new NettyTCPServer(serverPort1, new TestRequestHandlerFactory(0, 1), null); NettyTCPServer server2 = new NettyTCPServer(serverPort2, new TestRequestHandlerFactory(1, 1), null); NettyTCPServer server3 = new NettyTCPServer(serverPort3, new TestRequestHandlerFactory(2, 1), null); NettyTCPServer server4 = new NettyTCPServer(serverPort4, new TestRequestHandlerFactory(3, 1, 7000, false), null);// ww w . ja v a 2 s . c o m Thread t1 = new Thread(server1); Thread t2 = new Thread(server2); Thread t3 = new Thread(server3); Thread t4 = new Thread(server4); t1.start(); t2.start(); t3.start(); t4.start(); //Client setup ScheduledExecutorService timedExecutor = new ScheduledThreadPoolExecutor(1); ExecutorService service = new ThreadPoolExecutor(5, 5, 5, TimeUnit.DAYS, new LinkedBlockingDeque<Runnable>()); EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); NettyClientMetrics clientMetrics = new NettyClientMetrics(registry, "client_"); PooledNettyClientResourceManager rm = new PooledNettyClientResourceManager(eventLoopGroup, new HashedWheelTimer(), clientMetrics); KeyedPoolImpl<ServerInstance, NettyClientConnection> pool = new KeyedPoolImpl<ServerInstance, NettyClientConnection>( 1, 1, 300000, 1, rm, timedExecutor, service, registry); rm.setPool(pool); SegmentIdSet pg1 = new SegmentIdSet(); pg1.addSegment(new SegmentId("0")); SegmentIdSet pg2 = new SegmentIdSet(); pg2.addSegment(new SegmentId("1")); SegmentIdSet pg3 = new SegmentIdSet(); pg3.addSegment(new SegmentId("2")); SegmentIdSet pg4 = new SegmentIdSet(); pg4.addSegment(new SegmentId("3")); ServerInstance serverInstance1 = new ServerInstance("localhost", serverPort1); ServerInstance serverInstance2 = new ServerInstance("localhost", serverPort2); ServerInstance serverInstance3 = new ServerInstance("localhost", serverPort3); ServerInstance serverInstance4 = new ServerInstance("localhost", serverPort4); Map<ServerInstance, SegmentIdSet> pgMap = new HashMap<ServerInstance, SegmentIdSet>(); pgMap.put(serverInstance1, pg1); pgMap.put(serverInstance2, pg2); pgMap.put(serverInstance3, pg3); pgMap.put(serverInstance4, pg4); String request1 = "request_0"; String request2 = "request_1"; String request3 = "request_2"; String request4 = "request_3"; Map<SegmentIdSet, String> pgMapStr = new HashMap<SegmentIdSet, String>(); pgMapStr.put(pg1, request1); pgMapStr.put(pg2, request2); pgMapStr.put(pg3, request3); pgMapStr.put(pg4, request4); ScatterGatherRequest req = new TestScatterGatherRequest(pgMap, pgMapStr, new RoundRobinReplicaSelection(), ReplicaSelectionGranularity.SEGMENT_ID_SET, 0, 1000); ScatterGatherImpl scImpl = new ScatterGatherImpl(pool, service); CompositeFuture<ServerInstance, ByteBuf> fut = scImpl.scatterGather(req); Map<ServerInstance, ByteBuf> v = fut.get(); //Only 3 servers return value. Assert.assertEquals(v.size(), 3); ByteBuf b = v.get(serverInstance1); byte[] b2 = new byte[b.readableBytes()]; b.readBytes(b2); String response = new String(b2); Assert.assertEquals(response, "response_0_0"); b = v.get(serverInstance2); b2 = new byte[b.readableBytes()]; b.readBytes(b2); response = new String(b2); Assert.assertEquals(response, "response_1_0"); b = v.get(serverInstance3); b2 = new byte[b.readableBytes()]; b.readBytes(b2); response = new String(b2); Assert.assertEquals(response, "response_2_0"); //No response from 4th server Assert.assertNull(v.get(serverInstance4), "No response from 4th server"); Map<ServerInstance, Throwable> errorMap = fut.getError(); Assert.assertEquals(errorMap.size(), 1, "One error"); Assert.assertNotNull(errorMap.get(serverInstance4), "Server4 returned timeout"); System.out.println("Error is :" + errorMap.get(serverInstance4)); Thread.sleep(3000); System.out.println("Pool Stats :" + pool.getStats()); pool.getStats().refresh(); Assert.assertEquals(pool.getStats().getTotalBadDestroyed(), 1, "Total Bad destroyed"); pool.shutdown(); service.shutdown(); eventLoopGroup.shutdownGracefully(); server1.shutdownGracefully(); server2.shutdownGracefully(); server3.shutdownGracefully(); server4.shutdownGracefully(); }
From source file:com.linkedin.pinot.transport.scattergather.ScatterGatherTest.java
License:Apache License
@Test public void testMultipleServerError() throws Exception { MetricsRegistry registry = new MetricsRegistry(); // Server start int serverPort1 = 7091; int serverPort2 = 7092; int serverPort3 = 7093; int serverPort4 = 7094; // error server NettyTCPServer server1 = new NettyTCPServer(serverPort1, new TestRequestHandlerFactory(0, 1), null); NettyTCPServer server2 = new NettyTCPServer(serverPort2, new TestRequestHandlerFactory(1, 1), null); NettyTCPServer server3 = new NettyTCPServer(serverPort3, new TestRequestHandlerFactory(2, 1), null); NettyTCPServer server4 = new NettyTCPServer(serverPort4, new TestRequestHandlerFactory(3, 1, 1000, true), null);/* ww w . ja v a 2 s. co m*/ Thread t1 = new Thread(server1); Thread t2 = new Thread(server2); Thread t3 = new Thread(server3); Thread t4 = new Thread(server4); t1.start(); t2.start(); t3.start(); t4.start(); //Client setup ScheduledExecutorService timedExecutor = new ScheduledThreadPoolExecutor(1); ExecutorService poolExecutor = MoreExecutors.sameThreadExecutor(); ExecutorService service = new ThreadPoolExecutor(1, 1, 1, TimeUnit.DAYS, new LinkedBlockingDeque<Runnable>()); EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); NettyClientMetrics clientMetrics = new NettyClientMetrics(registry, "client_"); PooledNettyClientResourceManager rm = new PooledNettyClientResourceManager(eventLoopGroup, new HashedWheelTimer(), clientMetrics); KeyedPoolImpl<ServerInstance, NettyClientConnection> pool = new KeyedPoolImpl<ServerInstance, NettyClientConnection>( 1, 1, 300000, 1, rm, timedExecutor, poolExecutor, registry); rm.setPool(pool); SegmentIdSet pg1 = new SegmentIdSet(); pg1.addSegment(new SegmentId("0")); SegmentIdSet pg2 = new SegmentIdSet(); pg2.addSegment(new SegmentId("1")); SegmentIdSet pg3 = new SegmentIdSet(); pg3.addSegment(new SegmentId("2")); SegmentIdSet pg4 = new SegmentIdSet(); pg4.addSegment(new SegmentId("3")); ServerInstance serverInstance1 = new ServerInstance("localhost", serverPort1); ServerInstance serverInstance2 = new ServerInstance("localhost", serverPort2); ServerInstance serverInstance3 = new ServerInstance("localhost", serverPort3); ServerInstance serverInstance4 = new ServerInstance("localhost", serverPort4); Map<ServerInstance, SegmentIdSet> pgMap = new HashMap<ServerInstance, SegmentIdSet>(); pgMap.put(serverInstance1, pg1); pgMap.put(serverInstance2, pg2); pgMap.put(serverInstance3, pg3); pgMap.put(serverInstance4, pg4); String request1 = "request_0"; String request2 = "request_1"; String request3 = "request_2"; String request4 = "request_3"; Map<SegmentIdSet, String> pgMapStr = new HashMap<SegmentIdSet, String>(); pgMapStr.put(pg1, request1); pgMapStr.put(pg2, request2); pgMapStr.put(pg3, request3); pgMapStr.put(pg4, request4); ScatterGatherRequest req = new TestScatterGatherRequest(pgMap, pgMapStr, new RoundRobinReplicaSelection(), ReplicaSelectionGranularity.SEGMENT_ID_SET, 0, 1000); ScatterGatherImpl scImpl = new ScatterGatherImpl(pool, service); CompositeFuture<ServerInstance, ByteBuf> fut = scImpl.scatterGather(req); Map<ServerInstance, ByteBuf> v = fut.get(); //Only 3 servers return value. Assert.assertEquals(v.size(), 3); ByteBuf b = v.get(serverInstance1); byte[] b2 = new byte[b.readableBytes()]; b.readBytes(b2); String response = new String(b2); Assert.assertEquals(response, "response_0_0"); b = v.get(serverInstance2); b2 = new byte[b.readableBytes()]; b.readBytes(b2); response = new String(b2); Assert.assertEquals(response, "response_1_0"); b = v.get(serverInstance3); b2 = new byte[b.readableBytes()]; b.readBytes(b2); response = new String(b2); Assert.assertEquals(response, "response_2_0"); //No response from 4th server Assert.assertNull(v.get(serverInstance4), "No response from 4th server"); Map<ServerInstance, Throwable> errorMap = fut.getError(); Assert.assertEquals(errorMap.size(), 1, "One error"); Assert.assertNotNull(errorMap.get(serverInstance4), "Server4 returned timeout"); System.out.println("Error is :" + errorMap.get(serverInstance4)); Thread.sleep(3000); System.out.println("Pool Stats :" + pool.getStats()); pool.getStats().refresh(); Assert.assertEquals(pool.getStats().getTotalBadDestroyed(), 1, "Total Bad destroyed"); pool.shutdown(); service.shutdown(); eventLoopGroup.shutdownGracefully(); server1.shutdownGracefully(); server2.shutdownGracefully(); server3.shutdownGracefully(); server4.shutdownGracefully(); }