@Override public MultiplexedDeltaChannel create(WaveletChannel waveletChannel) { return new WaveletDeltaChannelImpl(waveletChannel, logger); } };
/** * Simulates channel termination. */ private void closeChannel() { deltaChannel.reset(null); }
/** * Sends a delta on a channel. The sendState is set to "sending" when * the channel takes the delta. */ private void sendDelta(final WaveletDelta delta) { deltaChannel.send(new WaveletDeltaChannel.Transmitter() { public ClientMessage takeMessage() { assertEquals("initial", sendState); sendState = "sending"; return new ClientMessage(delta, false); } }); }
/** * Processes deltas from an incoming server message. * * @param deltas container with deltas */ private void processDeltas(List<TransformedWaveletDelta> deltas) throws ChannelException { for (TransformedWaveletDelta delta : deltas) { logDelta("Incoming", delta); ServerMessage.ServerDelta serverDelta = new ServerMessage.ServerDelta(delta); int queuePos = onServerMessage(serverDelta); checkForMissingMessages(serverDelta, queuePos); } }
/** * Processes a subsequent (not first) incoming stream message. Either * parameter may be null. * * @param deltas message deltas * @param lastCommittedVersion committed version information */ private void processUpdateMessage(List<TransformedWaveletDelta> deltas, HashedVersion lastCommittedVersion) throws ChannelException { if (deltas != null) { // Update must contain deltas or lastCommittedVersion, no wave. if (deltas.size() == 0 && (lastCommittedVersion == null)) { throw new ChannelException("Delta channel: invalid non-first wave stream message: count " + (deltas.size()) + "deltas (lastServerVersion: " + lastServerVersion + ")", NOT_RECOVERABLE); } processDeltas(deltas); } processLastCommittedVersion(lastCommittedVersion); flushServerMessages(); }
@Override public void setUp() { waveletChannel = new MockWaveletChannel(); receiver = new MockReceiver(); deltaChannel = new WaveletDeltaChannelImpl(waveletChannel, logger); deltaChannel.reset(receiver); }
if (deltaIsInFlight()) { final WaveletDelta delta = takeArgs(); logTrace("Outgoing " + summariseDelta(delta));
/** * Reconnects the channel at the current version by sending an initial message with a * version and signature. * * @param reconnect reconnection message * @param committed last committed version at reconnection */ private void reconnectChannel(List<TransformedWaveletDelta> reconnect, long committed, byte[] commitSignature) throws ChannelException { HashedVersion commitVersion = HashedVersion.of(committed, commitSignature); deltaChannel.onWaveletUpdate(reconnect, commitVersion, null); }
/** * Connects the channel by sending an initial message with a wavelet snapshot. * The message includes a committed version. * * @param snapshot initial wavelet snapshot * @param committed last committed version at connection (or -1) * @param commitSignature last committed signature at connection */ private void connectChannel(ObservableWaveletData snapshot, long committed, byte[] commitSignature) throws ChannelException { HashedVersion commitVersion = HashedVersion.of(committed, commitSignature); deltaChannel.onWaveletSnapshot(snapshot, commitVersion, null); }
private void processConnect(HashedVersion connectVersion, HashedVersion lastCommittedVersion, HashedVersion currentSignedVersion) throws ChannelException { // The first update must contain a committed version. if (lastCommittedVersion == null) { throw new ChannelException("Channel connect message lacks committed version", NOT_RECOVERABLE); } // Update must contain either wavelet (+ blips etc) // or deltas (beginning with an empty delta to communicate the initial // version and signature). state = State.CONNECTED; connectionTag++; HashedVersion currentVersion; if (currentSignedVersion != null) { currentVersion = currentSignedVersion; } else { currentVersion = connectVersion; } lastServerVersion = connectVersion.getVersion(); if (receiver != null) { receiver.onConnection(connectVersion, currentVersion); } processLastCommittedVersion(lastCommittedVersion); flushServerMessages(); }
@Override public void reset(Receiver receiver) { internalReset(); this.receiver = receiver; }
if (deltaIsInFlight() && (queuePos == 0)) { if (gap > transmitDelta.size()) { throw new ChannelException("Message missing! Incoming message " + incoming
@Override public void setUp() { waveletChannel = new MockWaveletChannel(); receiver = new MockReceiver(); deltaChannel = new WaveletDeltaChannelImpl(waveletChannel, logger); deltaChannel.reset(receiver); }
/** * Reconnects the channel at the current version by sending an initial message with a * version and signature. * * @param reconnect reconnection message * @param committed last committed version at reconnection */ private void reconnectChannel(List<TransformedWaveletDelta> reconnect, long committed, byte[] commitSignature) throws ChannelException { HashedVersion commitVersion = HashedVersion.of(committed, commitSignature); deltaChannel.onWaveletUpdate(reconnect, commitVersion, null); }
/** * Connects the channel by sending an initial message with a wavelet snapshot. * The message includes a committed version. * * @param snapshot initial wavelet snapshot * @param committed last committed version at connection (or -1) * @param commitSignature last committed signature at connection */ private void connectChannel(ObservableWaveletData snapshot, long committed, byte[] commitSignature) throws ChannelException { HashedVersion commitVersion = HashedVersion.of(committed, commitSignature); deltaChannel.onWaveletSnapshot(snapshot, commitVersion, null); }
/** * Simulates channel termination. */ private void closeChannel() { deltaChannel.reset(null); }
/** * Receives a delta message on a connected channel. * * @param delta delta to receive, or null for no delta * @param committed last committed version, or -1 to omit */ private void receiveUpdateOnConnectedChannel(TransformedWaveletDelta delta, long committed, byte[] commitSignature) throws ChannelException { HashedVersion commitVersion = null; List<TransformedWaveletDelta> deltas = CollectionUtils.newArrayList(); if (delta != null) { deltas.add(delta); } if (committed != -1) { commitVersion = HashedVersion.of(committed, commitSignature); } deltaChannel.onWaveletUpdate(deltas, commitVersion, null); }
/** * Sends a delta on a channel. The sendState is set to "sending" when * the channel takes the delta. */ private void sendDelta(final WaveletDelta delta) { deltaChannel.send(new WaveletDeltaChannel.Transmitter() { public ClientMessage takeMessage() { assertEquals("initial", sendState); sendState = "sending"; return new ClientMessage(delta, false); } }); }
/** * Tests that resetting a new channel does nothing. */ public void testResetNewChannel() { deltaChannel.reset(null); waveletChannel.checkExpectationsSatisfied(); }
/** * Receives a delta message on a connected channel. * * @param delta delta to receive, or null for no delta * @param committed last committed version, or -1 to omit */ private void receiveUpdateOnConnectedChannel(TransformedWaveletDelta delta, long committed, byte[] commitSignature) throws ChannelException { HashedVersion commitVersion = null; List<TransformedWaveletDelta> deltas = CollectionUtils.newArrayList(); if (delta != null) { deltas.add(delta); } if (committed != -1) { commitVersion = HashedVersion.of(committed, commitSignature); } deltaChannel.onWaveletUpdate(deltas, commitVersion, null); }