@Override public void close() { shutdown(ResponseCode.OK, "View closed.", null); }
/** * Shuts down this multiplexer permanently after an exception. */ private void shutdown(String message, ChannelException e) { shutdown(e.getResponseCode(), message, e); }
/** * Handles failure of the view channel or an operation channel. * * @param e The exception that caused the channel to fail. */ private void onChannelException(ChannelException e) { if (e.getRecoverable() != Recoverable.RECOVERABLE) { shutdown(e.getResponseCode(), "Channel Exception", e); } else { reconnect(e); } }
@Override public void createOperationChannel(WaveletId waveletId, ParticipantId creator) { if (channels.containsKey(waveletId)) { Preconditions.illegalArgument("Operation channel already exists for: " + waveletId); } // Create the new channel, and fake an initial snapshot. // TODO(anorth): inject a clock for providing timestamps. HashedVersion v0 = hashFactory.createVersionZero(WaveletName.of(waveId, waveletId)); final ObservableWaveletData emptySnapshot = dataFactory.create( new EmptyWaveletSnapshot(waveId, waveletId, creator, v0, System.currentTimeMillis())); try { boolean dropAdditionalSnapshot = true; addOperationChannel(waveletId, emptySnapshot, v0, Accessibility.READ_WRITE, dropAdditionalSnapshot); } catch (ChannelException e) { shutdown("Creating operation channel failed.", e); } }
@Override public void open(Listener listener, IdFilter waveletFilter, Collection<KnownWavelet> knownWavelets) { this.muxListener = listener; this.waveletFilter = waveletFilter; try { if (!knownWavelets.isEmpty()) { for (KnownWavelet knownWavelet : knownWavelets) { Preconditions.checkNotNull(knownWavelet.snapshot, "Snapshot has no wavelet"); Preconditions.checkNotNull(knownWavelet.committedVersion, "Known wavelet has null committed version"); boolean dropAdditionalSnapshot = false; addOperationChannel(knownWavelet.snapshot.getWaveletId(), knownWavelet.snapshot, knownWavelet.committedVersion, knownWavelet.accessibility, dropAdditionalSnapshot); } // consider the wave as if open has finished. maybeOpenFinished(); } Map<WaveletId, List<HashedVersion>> knownSignatures = signaturesFromWavelets(knownWavelets); connect(knownSignatures); } catch (ChannelException e) { shutdown("Multiplexer open failed.", e); } }