@Override public ChannelPipeline getPipeline() { ChannelPipeline pipeline = Channels.pipeline(); pipeline.addLast( MONITORING_CHANNEL_HANDLER_NAME, new MonitorChannelHandler( byteCounterMonitor ) ); addLengthFieldPipes( pipeline, frameLength ); BlockingReadHandler<ChannelBuffer> reader = new BlockingReadHandler<>( new ArrayBlockingQueue<>( 100, false ) ); pipeline.addLast( BLOCKING_CHANNEL_HANDLER_NAME, reader ); return pipeline; }
@Override public void init() { chunkSize = config.getChunkSize(); assertChunkSizeIsWithinFrameSize( chunkSize, frameLength ); String className = getClass().getSimpleName(); targetCallExecutor = newCachedThreadPool( named( className + ":" + config.getServerAddress().getPort() ) ); unfinishedTransactionExecutor = newScheduledThreadPool( 2, named( "Unfinished transactions" ) ); silentChannelExecutor = newSingleThreadScheduledExecutor( named( "Silent channel reaper" ) ); silentChannelExecutor.scheduleWithFixedDelay( connectedSlaveChannels, 5, 5, TimeUnit.SECONDS ); }
public static String readString( ChannelBuffer buffer ) { return readString( buffer, buffer.readInt() ); }
protocol.serializeRequest( channelContext.channel(), channelContext.output(), type, context, serializer ); Response<R> response = protocol.deserializeResponse( extractBlockingReadHandler( channelContext ), channelContext.input(), getReadTimeout( type, readTimeout ), deserializer, resourcePoolReleaser, entryReader );
public static void writeString( ChannelBuffer buffer, String name ) { char[] chars = name.toCharArray(); buffer.writeInt( chars.length ); writeChars( buffer, chars ); }
public void serializeRequest( Channel channel, ChannelBuffer buffer, RequestType type, RequestContext ctx, Serializer payload ) throws IOException { buffer.clear(); ChunkingChannelBuffer chunkingBuffer = new ChunkingChannelBuffer( buffer, channel, chunkSize, internalProtocolVersion, applicationProtocolVersion ); chunkingBuffer.writeByte( type.id() ); writeContext( ctx, chunkingBuffer ); payload.write( chunkingBuffer ); chunkingBuffer.done(); }
StoreId storeId = readStoreId( dechunkingBuffer, input );
@Override public void write( ChannelBuffer buffer ) throws IOException { NetworkFlushableChannel channel = new NetworkFlushableChannel( buffer ); writeString( buffer, NeoStoreDataSource.DEFAULT_DATA_SOURCE_NAME ); channel.putInt( tx.getAuthorId() ); channel.putInt( tx.getMasterId() ); channel.putLong( tx.getLatestCommittedTxWhenStarted() ); channel.putLong( tx.getTimeStarted() ); channel.putLong( tx.getTimeCommitted() ); channel.putInt( tx.additionalHeader().length ); channel.put( tx.additionalHeader(), tx.additionalHeader().length ); new LogEntryWriter( channel ).serialize( tx ); } }
@Override public long write( String path, ReadableByteChannel data, ByteBuffer temporaryBuffer, boolean hasData, int requiredElementAlignment ) throws IOException { char[] chars = path.toCharArray(); targetBuffer.writeShort( chars.length ); Protocol.writeChars( targetBuffer, chars ); targetBuffer.writeByte( hasData ? 1 : 0 ); // TODO Make use of temporaryBuffer? BlockLogBuffer buffer = new BlockLogBuffer( targetBuffer, bufferMonitor ); long totalWritten = Short.BYTES + chars.length * Character.BYTES + Byte.BYTES; if ( hasData ) { targetBuffer.writeInt( requiredElementAlignment ); totalWritten += Integer.BYTES; totalWritten += buffer.write( data ); buffer.close(); } return totalWritten; }
assertChunkSizeIsWithinFrameSize( chunkSize, frameLength );
@Override public Void read( ChannelBuffer buffer, ByteBuffer temporaryBuffer ) throws IOException { int pathLength; while ( 0 != (pathLength = buffer.readUnsignedShort()) ) { String path = readString( buffer, pathLength ); boolean hasData = buffer.readByte() == 1; writer.write( path, hasData ? new BlockLogReader( buffer ) : null, temporaryBuffer, hasData, 1 ); } writer.close(); return null; } }
@Override public ChannelPipeline getPipeline() { ChannelPipeline pipeline = Channels.pipeline(); pipeline.addLast( "monitor", new MonitorChannelHandler( byteCounterMonitor ) ); addLengthFieldPipes( pipeline, frameLength ); pipeline.addLast( "serverHandler", this ); return pipeline; }
public Server( T requestTarget, Configuration config, LogProvider logProvider, int frameLength, ProtocolVersion protocolVersion, TxChecksumVerifier txVerifier, Clock clock, ByteCounterMonitor byteCounterMonitor, RequestMonitor requestMonitor ) { this.requestTarget = requestTarget; this.config = config; this.frameLength = frameLength; this.applicationProtocolVersion = protocolVersion.getApplicationProtocol(); this.logProvider = logProvider; this.msgLog = this.logProvider.getLog( getClass() ); this.txVerifier = txVerifier; this.byteCounterMonitor = byteCounterMonitor; this.requestMonitor = requestMonitor; this.connectedSlaveChannels = new IdleChannelReaper( this, logProvider, clock, config.getOldChannelThreshold() ); this.chunkSize = config.getChunkSize(); assertChunkSizeIsWithinFrameSize( chunkSize, frameLength ); }
@Override public Void read( ChannelBuffer buffer, ByteBuffer temporaryBuffer ) throws IOException { int pathLength; while ( 0 != (pathLength = buffer.readUnsignedShort()) ) { String path = readString( buffer, pathLength ); boolean hasData = buffer.readByte() == 1; int recordSize = hasData ? buffer.readInt() : RecordFormat.NO_RECORD_SIZE; writer.write( path, hasData ? new BlockLogReader( buffer ) : null, temporaryBuffer, hasData, recordSize ); } writer.close(); return null; } }