List of usage examples for io.netty.channel.embedded EmbeddedChannel config
ChannelConfig config
To view the source code for io.netty.channel.embedded EmbeddedChannel config.
Click Source Link
From source file:com.ebay.jetstream.http.netty.client.HttpClient.java
License:MIT License
public void post(URI uri, Object content, Map<String, String> headers, ResponseFuture responsefuture) throws Exception { if (m_shutDown.get()) { throw new IOException("IO has been Shutdown = "); }/*from ww w . j a va 2s . c om*/ if (uri == null) throw new NullPointerException("uri is null or incorrect"); if (!m_started.get()) { synchronized (this) { if (!m_started.get()) { start(); m_started.set(true); } } } ByteBuf byteBuf = Unpooled.buffer(m_config.getInitialRequestBufferSize()); ByteBufOutputStream outputStream = new ByteBufOutputStream(byteBuf); // transform to json try { m_mapper.writeValue(outputStream, content); } catch (JsonGenerationException e) { throw e; } catch (JsonMappingException e) { throw e; } catch (IOException e) { throw e; } finally { outputStream.close(); } EmbeddedChannel encoder; String contenteEncoding; if ("gzip".equals(m_config.getCompressEncoder())) { encoder = new EmbeddedChannel(ZlibCodecFactory.newZlibEncoder(ZlibWrapper.GZIP, 1)); contenteEncoding = "gzip"; } else if ("deflate".equals(m_config.getCompressEncoder())) { encoder = new EmbeddedChannel(ZlibCodecFactory.newZlibEncoder(ZlibWrapper.ZLIB, 1)); contenteEncoding = "deflate"; } else { encoder = null; contenteEncoding = null; } if (encoder != null) { encoder.config().setAllocator(UnpooledByteBufAllocator.DEFAULT); encoder.writeOutbound(byteBuf); encoder.finish(); byteBuf = (ByteBuf) encoder.readOutbound(); encoder.close(); } DefaultFullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST, uri.toString(), byteBuf); if (contenteEncoding != null) { HttpHeaders.setHeader(request, HttpHeaders.Names.CONTENT_ENCODING, contenteEncoding); } HttpHeaders.setHeader(request, HttpHeaders.Names.ACCEPT_ENCODING, "gzip, deflate"); HttpHeaders.setHeader(request, HttpHeaders.Names.CONTENT_TYPE, "application/json"); HttpHeaders.setContentLength(request, byteBuf.readableBytes()); if (isKeepAlive()) HttpHeaders.setHeader(request, HttpHeaders.Names.CONNECTION, "keep-alive"); if (headers != null) { @SuppressWarnings("rawtypes") Iterator it = headers.entrySet().iterator(); while (it.hasNext()) { @SuppressWarnings("rawtypes") Map.Entry pairs = (Map.Entry) it.next(); HttpHeaders.setHeader(request, (String) pairs.getKey(), pairs.getValue()); } } if (responsefuture != null) { RequestId reqid = RequestId.newRequestId(); m_responseDispatcher.add(reqid, responsefuture); HttpHeaders.setHeader(request, "X_EBAY_REQ_ID", reqid.toString()); // we expect this to be echoed in the response used for correlation. } if (m_dataQueue.size() < m_workQueueCapacity) { ProcessHttpWorkRequest workRequest = new ProcessHttpWorkRequest(this, uri, request); if (!m_dataQueue.offer(workRequest)) { if (responsefuture != null) { responsefuture.setFailure(); m_responseDispatcher.remove(request.headers().get("X_EBAY_REQ_ID")); } } } else { throw new IOException("downstream Queue is full "); } }
From source file:eu.stratosphere.runtime.io.network.netty.InboundEnvelopeDecoderTest.java
License:Apache License
@Test public void testBufferStaging() throws Exception { final InboundEnvelopeDecoder decoder = new InboundEnvelopeDecoder(this.bufferProviderBroker); final EmbeddedChannel ch = new EmbeddedChannel(new OutboundEnvelopeEncoder(), decoder); when(this.bufferProviderBroker.getBufferProvider(anyJobId(), anyChannelId())) .thenReturn(this.bufferProvider); // -------------------------------------------------------------------- Envelope[] envelopes = nextEnvelopes(3, true); ByteBuf buf = encode(ch, envelopes); when(this.bufferProvider .registerBufferAvailabilityListener(Matchers.<BufferAvailabilityListener>anyObject())) .thenReturn(BufferAvailabilityRegistration.SUCCEEDED_REGISTERED); Buffer buffer = allocBuffer(envelopes[2].getBuffer().size()); when(this.bufferProvider.requestBuffer(anyInt())).thenReturn(null, null, buffer, null); // -------------------------------------------------------------------- // slices: [0] => full envelope, [1] => half envelope, [2] => remaining half + full envelope ByteBuf[] slices = slice(buf, OutboundEnvelopeEncoder.HEADER_SIZE + envelopes[0].getBuffer().size(), OutboundEnvelopeEncoder.HEADER_SIZE + envelopes[1].getBuffer().size() / 2); // 1. no buffer available, incoming slice contains all data int refCount = slices[0].refCnt(); decodeAndVerify(ch, slices[0]);/*from w ww. j av a 2 s . co m*/ Assert.assertEquals(refCount + 1, slices[0].refCnt()); Assert.assertFalse(ch.config().isAutoRead()); // notify of available buffer (=> bufferAvailable() callback does return a buffer // of the current network buffer size; the decoder needs to adjust its size to the // requested size decoder.bufferAvailable(allocBuffer(envelopes[0].getBuffer().size() * 2)); ch.runPendingTasks(); Assert.assertEquals(refCount - 1, slices[0].refCnt()); Assert.assertTrue(ch.config().isAutoRead()); decodeAndVerify(ch, envelopes[0]); // 2. no buffer available, incoming slice does NOT contain all data refCount = slices[1].refCnt(); decodeAndVerify(ch, slices[1]); Assert.assertEquals(refCount + 1, slices[1].refCnt()); Assert.assertFalse(ch.config().isAutoRead()); decoder.bufferAvailable(allocBuffer()); ch.runPendingTasks(); Assert.assertEquals(refCount - 1, slices[1].refCnt()); Assert.assertTrue(ch.config().isAutoRead()); decodeAndVerify(ch); // 3. buffer available refCount = slices[2].refCnt(); decodeAndVerify(ch, slices[2], envelopes[1], envelopes[2]); Assert.assertEquals(refCount - 1, slices[2].refCnt()); Assert.assertTrue(ch.config().isAutoRead()); Assert.assertEquals(1, buf.refCnt()); buf.release(); }
From source file:eu.stratosphere.runtime.io.network.netty.InboundEnvelopeDecoderTest.java
License:Apache License
@Test public void testBufferStagingStagedBufferException() throws Exception { final EmbeddedChannel ch = new EmbeddedChannel(new OutboundEnvelopeEncoder(), new InboundEnvelopeDecoder(this.bufferProviderBroker)); when(this.bufferProviderBroker.getBufferProvider(anyJobId(), anyChannelId())) .thenReturn(this.bufferProvider); // -------------------------------------------------------------------- ByteBuf buf = encode(ch, nextEnvelope(true)); when(this.bufferProvider.requestBuffer(anyInt())).thenReturn(null); when(this.bufferProvider .registerBufferAvailabilityListener(Matchers.<BufferAvailabilityListener>anyObject())) .thenReturn(BufferAvailabilityRegistration.SUCCEEDED_REGISTERED); // -------------------------------------------------------------------- int refCount = buf.refCnt(); decodeAndVerify(ch, buf);//from w w w . j av a 2 s . co m Assert.assertFalse(ch.config().isAutoRead()); Assert.assertEquals(refCount + 1, buf.refCnt()); try { decodeAndVerify(ch, buf); Assert.fail("Expected IllegalStateException not thrown"); } catch (IllegalStateException e) { // expected exception } buf.release(); }
From source file:eu.stratosphere.runtime.io.network.netty.InboundEnvelopeDecoderTest.java
License:Apache License
@Test public void testEncodeDecodeRandomEnvelopes() throws Exception { final InboundEnvelopeDecoder decoder = new InboundEnvelopeDecoder(this.bufferProviderBroker); final EmbeddedChannel ch = new EmbeddedChannel(new OutboundEnvelopeEncoder(), decoder); when(this.bufferProviderBroker.getBufferProvider(anyJobId(), anyChannelId())) .thenReturn(this.bufferProvider); when(this.bufferProvider.requestBuffer(anyInt())).thenAnswer(new Answer<Object>() { @Override/*from www. ja va 2 s . c o m*/ public Object answer(InvocationOnMock invocation) throws Throwable { // fulfill the buffer request with the requested size return allocBuffer((Integer) invocation.getArguments()[0]); } }); Random randomAnswerSource = new Random(RANDOM_SEED); RandomBufferRequestAnswer randomBufferRequestAnswer = new RandomBufferRequestAnswer(randomAnswerSource); RandomBufferAvailabilityRegistrationAnswer randomBufferAvailabilityRegistrationAnswer = new RandomBufferAvailabilityRegistrationAnswer( randomAnswerSource, randomBufferRequestAnswer); when(this.bufferProvider.requestBuffer(anyInt())).thenAnswer(randomBufferRequestAnswer); when(this.bufferProvider .registerBufferAvailabilityListener(Matchers.<BufferAvailabilityListener>anyObject())) .thenAnswer(randomBufferAvailabilityRegistrationAnswer); // -------------------------------------------------------------------- Envelope[] envelopes = nextRandomEnvelopes(1024); ByteBuf buf = encode(ch, envelopes); ByteBuf[] slices = randomSlices(buf); for (ByteBuf slice : slices) { int refCount = slice.refCnt(); ch.writeInbound(slice); // registered BufferAvailabilityListener => call bufferAvailable(buffer) while (randomBufferAvailabilityRegistrationAnswer.isRegistered()) { randomBufferAvailabilityRegistrationAnswer.unregister(); Assert.assertFalse(ch.config().isAutoRead()); Assert.assertEquals(refCount + 1, slice.refCnt()); // return a buffer of max size => decoder needs to limit buffer size decoder.bufferAvailable(allocBuffer(MAX_BUFFER_SIZE)); ch.runPendingTasks(); } Assert.assertEquals(refCount - 1, slice.refCnt()); Assert.assertTrue(ch.config().isAutoRead()); } Envelope[] expected = randomBufferAvailabilityRegistrationAnswer.removeSkippedEnvelopes(envelopes); decodeAndVerify(ch, expected); Assert.assertEquals(1, buf.refCnt()); buf.release(); }
From source file:org.apache.flink.runtime.query.netty.KvStateServerHandlerTest.java
License:Apache License
/** * Tests that large responses are chunked. *//*from w w w . java2s . c o m*/ @Test public void testChunkedResponse() throws Exception { KvStateRegistry registry = new KvStateRegistry(); KvStateRequestStats stats = new AtomicKvStateRequestStats(); KvStateServerHandler handler = new KvStateServerHandler(registry, TEST_THREAD_POOL, stats); EmbeddedChannel channel = new EmbeddedChannel(getFrameDecoder(), handler); int numKeyGroups = 1; AbstractStateBackend abstractBackend = new MemoryStateBackend(); DummyEnvironment dummyEnv = new DummyEnvironment("test", 1, 0); dummyEnv.setKvStateRegistry(registry); AbstractKeyedStateBackend<Integer> backend = abstractBackend.createKeyedStateBackend(dummyEnv, new JobID(), "test_op", IntSerializer.INSTANCE, numKeyGroups, new KeyGroupRange(0, 0), registry.createTaskRegistry(dummyEnv.getJobID(), dummyEnv.getJobVertexId())); final TestRegistryListener registryListener = new TestRegistryListener(); registry.registerListener(registryListener); // Register state ValueStateDescriptor<byte[]> desc = new ValueStateDescriptor<>("any", BytePrimitiveArraySerializer.INSTANCE); desc.setQueryable("vanilla"); ValueState<byte[]> state = backend.getPartitionedState(VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE, desc); // Update KvState byte[] bytes = new byte[2 * channel.config().getWriteBufferHighWaterMark()]; byte current = 0; for (int i = 0; i < bytes.length; i++) { bytes[i] = current++; } int key = 99812822; backend.setCurrentKey(key); state.update(bytes); // Request byte[] serializedKeyAndNamespace = KvStateRequestSerializer.serializeKeyAndNamespace(key, IntSerializer.INSTANCE, VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE); long requestId = Integer.MAX_VALUE + 182828L; assertTrue(registryListener.registrationName.equals("vanilla")); ByteBuf request = KvStateRequestSerializer.serializeKvStateRequest(channel.alloc(), requestId, registryListener.kvStateId, serializedKeyAndNamespace); // Write the request and wait for the response channel.writeInbound(request); Object msg = readInboundBlocking(channel); assertTrue("Not ChunkedByteBuf", msg instanceof ChunkedByteBuf); }
From source file:org.helios.octo.ReadSuspendTest.java
License:Open Source License
/** * @param args//from ww w .ja v a 2 s . c om */ public static void main(String[] args) { BasicConfigurator.configure(); InternalLoggerFactory.setDefaultFactory(new Log4JLoggerFactory()); EmbeddedChannel channel = new EmbeddedChannel(new Throttler(), new Decoder()); channel.config().setAutoRead(false); for (int i = 0; i < 20; i++) { LOG.info("Writing [" + i + "]"); channel.write(Unpooled.wrappedBuffer("any payload".getBytes())).syncUninterruptibly(); LOG.info("Wrote [" + i + "]"); } }