Package com.yahoo.omid.replication.SharedMessageBuffer

Examples of com.yahoo.omid.replication.SharedMessageBuffer.ReadingBuffer


                e.printStackTrace();
                return;
            }
        }

        ReadingBuffer buffer;
        Channel channel = ctx.getChannel();
        boolean bootstrap = false;
        synchronized (messageBuffersMap) {
            buffer = messageBuffersMap.get(ctx.getChannel());
            if (buffer == null) {
                 synchronized (sharedMsgBufLock) {
                     bootstrap = true;
                     buffer = sharedState.sharedMessageBuffer.getReadingBuffer(ctx);
                     messageBuffersMap.put(channel, buffer);
                     channelGroup.add(channel);
                     LOG.warn("Channel connected: " + messageBuffersMap.size());
                 }
            }
        }
        if (bootstrap) {
           synchronized (sharedState) {
              synchronized (sharedMsgBufLock) {
                 channel.write(buffer.getZipperState());
                 buffer.initializeIndexes();
              }
           }
           for (AbortedTransaction halfAborted : sharedState.hashmap.halfAborted) {
              channel.write(new AbortedTransactionReport(halfAborted.getStartTimestamp()));
           }
        }
        ChannelBuffer cb;
        ChannelFuture future = Channels.future(channel);
        synchronized (sharedMsgBufLock) {
            cb = buffer.flush(future);
        }
        Channels.write(ctx, future, cb);
        Channels.write(channel, new TimestampResponse(timestamp));
   }
View Full Code Here


        final DecoderEmbedder<TSOMessage> decoder = new DecoderEmbedder<TSOMessage>(new TSODecoder(new Zipper()));
        ChannelDownstreamHandler handler = new SimpleChannelDownstreamHandler();
        EncoderEmbedder<ChannelBuffer> encoder = new EncoderEmbedder<ChannelBuffer>(handler);
        ChannelHandlerContext ctx = encoder.getPipeline().getContext(handler);
        Channel channel = ctx.getChannel();
        ReadingBuffer rb = smb.getReadingBuffer(ctx);
        rb.initializeIndexes();
        Random rand = new Random();

        Deque<TSOMessage> expectedMessages = new ArrayDeque<TSOMessage>();
        int checked = 0;

        // Write one message to the shared buffer and read it as a client
        for (int i = 0; i < ITERATIONS; ++i) {
            writeRandomMessage(smb, rand, expectedMessages);

            ChannelFuture future = Channels.succeededFuture(channel);
            ChannelBuffer buffer = rb.flush(future);
            Channels.write(ctx, future, buffer);

            forwardMessages(encoder, decoder);

            checked += checkExpectedMessage(decoder, expectedMessages);
View Full Code Here

        final DecoderEmbedder<TSOMessage> decoder = new DecoderEmbedder<TSOMessage>(new TSODecoder(new Zipper()));
        ChannelDownstreamHandler handler = new SimpleChannelDownstreamHandler();
        EncoderEmbedder<ChannelBuffer> encoder = new EncoderEmbedder<ChannelBuffer>(handler);
        ChannelHandlerContext ctx = encoder.getPipeline().getContext(handler);
        Channel channel = ctx.getChannel();
        ReadingBuffer rb = smb.getReadingBuffer(ctx);
        rb.initializeIndexes();
        Random rand = new Random();

        Deque<TSOMessage> expectedMessages = new ArrayDeque<TSOMessage>();

        for (int i = 0; i < ITERATIONS; ++i) {
            writeRandomMessage(smb, rand, expectedMessages);
        }

        // Flush the remaining messages
        ChannelFuture future = Channels.succeededFuture(channel);
        ChannelBuffer buffer = rb.flush(future);
        Channels.write(ctx, future, buffer);

        forwardMessages(encoder, decoder);

        int checked = checkExpectedMessage(decoder, expectedMessages);
View Full Code Here

                e.printStackTrace();
                return;
            }
        }

        ReadingBuffer buffer;
        Channel channel = ctx.getChannel();
        boolean bootstrap = false;
        synchronized (messageBuffersMap) {
            buffer = messageBuffersMap.get(ctx.getChannel()); //应该直接用channel,第一次是buffer一定是null
            if (buffer == null) {
                synchronized (sharedMsgBufLock) {
                    bootstrap = true;
                    buffer = sharedState.sharedMessageBuffer.getReadingBuffer(ctx);
                    messageBuffersMap.put(channel, buffer);
                    channelGroup.add(channel);
                    LOG.warn("Channel connected: " + messageBuffersMap.size());
                }
            }
        }
        if (bootstrap) {
            synchronized (sharedState) {
                synchronized (sharedMsgBufLock) {
                    //这里会写一个TSOMessage.ZipperState消息并发送到Client
                    //见com.yahoo.omid.tso.serialization.TSOEncoder.encode(ChannelHandlerContext, Channel, Object)
                    //和com.yahoo.omid.replication.ZipperState.writeObject(ChannelBuffer)
                    //先在TSOEncoder.encode中写一个字节,然后在ZipperState.writeObject中写32个字节
                    channel.write(buffer.getZipperState());
                    buffer.initializeIndexes(); //进行完channel.write(buffer.getZipperState())后并不对buffer的read和write有任何影响
                }
            }
            for (AbortedTransaction halfAborted : sharedState.hashmap.halfAborted) {
                channel.write(new AbortedTransactionReport(halfAborted.getStartTimestamp()));
            }
        }
        ChannelBuffer cb;
        ChannelFuture future = Channels.future(channel);
        synchronized (sharedMsgBufLock) {
            cb = buffer.flush(future);
        }
        Channels.write(ctx, future, cb); //cb中放的是什么消息类型在client进行TSODecoder.decode时才懂
        Channels.write(channel, new TimestampResponse(timestamp));
    }
View Full Code Here

TOP

Related Classes of com.yahoo.omid.replication.SharedMessageBuffer.ReadingBuffer

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.