Package org.waveprotocol.wave.concurrencycontrol.common

Examples of org.waveprotocol.wave.concurrencycontrol.common.ChannelException


    view.expectClose();
    MockViewChannel view2 = viewFactory.expectCreate();
    view2.expectOpen(IdFilters.ALL_IDS, createKnownVersions(WAVELET_ID_1, 1, SIG1,
        WAVELET_ID_2, 20, SIG2));
    viewListener.onException(new ChannelException("failed for testing", Recoverable.RECOVERABLE));

    ViewChannel.Listener viewListener2 = reconnectView(view2, chInfo1, chInfo2);
    // Don't expect the mux nor any channel to know about reconnection.
    muxListener.verifyNoMoreInteractions();
    ch1.listener.checkOpsReceived(0);
View Full Code Here


    muxListener.verifyNoMoreInteractions(); // No callback on reconnection.

    checkAckDelta(view2, ch.channel, ch.listener, 1, chInfo1.initialVersion + 1, SIG2);

    // If the first view later disconnects, it should be ignored
    viewListener.onException(new ChannelException("failed for testing", Recoverable.RECOVERABLE));

    checkReceiveAndSend(viewListener2, view2, ch, WAVELET_ID_1, chInfo1.initialVersion + 1);
    view.checkExpectationsSatisified();
    view2.checkExpectationsSatisified();
    ch.listener.checkOpsReceived(0);
View Full Code Here

      MockViewChannel failingView, String failureReason,
      Map<WaveletId, List<HashedVersion>> expectedReconnectionSigs) {
    failingView.expectClose();
    MockViewChannel newView = viewFactory.expectCreate();
    newView.expectOpen(IdFilters.ALL_IDS, expectedReconnectionSigs);
    viewListenerToFail.onException(new ChannelException(failureReason, Recoverable.RECOVERABLE));
    viewListenerToFail.onClosed();
    failingView.checkExpectationsSatisified();
    return newView;
  }
View Full Code Here

      public void onOpenFinished() throws ChannelException {
        if (connectionTag == expectedTag) {
          if (missingWavelets == null) {
            // TODO(anorth): Add an error code for a protocol error and use
            // it here.
            throw new ChannelException(ResponseCode.INTERNAL_ERROR,
                "Multiplexer received openFinished twice", null, Recoverable.NOT_RECOVERABLE,
                waveId, null);
          }

          // If a missing wavelet could be reconnected at version zero then
          // fake the resync message here. The server no longer knows about
          // the wavelet so we should resubmit changes from version zero.
          Iterator<WaveletId> itr = missingWavelets.iterator();
          while (itr.hasNext()) {
            WaveletId maybeMissing = itr.next();
            List<HashedVersion> resyncVersions = expectedWavelets.get(maybeMissing);
            Preconditions.checkState(!resyncVersions.isEmpty(),
                "Empty resync versions for wavelet " + maybeMissing);
            if (resyncVersions.get(0).getVersion() == 0) {
              Stacklet stacklet = channels.get(maybeMissing);
              if (stacklet == null) {
                Preconditions.illegalState("Resync wavelet has no stacklet. Channels: "
                    + channels.keySet() + ", resync: " + expectedWavelets.keySet());
              }
              WaveletName wavelet = WaveletName.of(waveId, maybeMissing);
              List<TransformedWaveletDelta> resyncDeltaList = createVersionZeroResync(wavelet);
              HashedVersion v0 = hashFactory.createVersionZero(wavelet);
              stacklet.onWaveletUpdate(resyncDeltaList, v0, v0);
              itr.remove();
            }
          }

          // Check we received a message for each expected wavelet.
          if (!missingWavelets.isEmpty()) {
            throw new ChannelException(ResponseCode.NOT_AUTHORIZED,
                "Server didn't acknowledge known wavelets; perhaps access has been lost: "
                    + missingWavelets, null, Recoverable.NOT_RECOVERABLE, waveId, null);
          }
          missingWavelets = null;
          maybeOpenFinished();
View Full Code Here

  /**
   * Wraps a channel exception in another providing wave and wavelet id context.
   */
  private ChannelException exceptionWithContext(ChannelException e, WaveletId waveletId) {
    return new ChannelException(e.getResponseCode(), "Nested ChannelException", e,
        e.getRecoverable(), waveId, waveletId);
  }
View Full Code Here

  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).
View Full Code Here

   */
  private void processConnectSnapshotMessage(ObservableWaveletData wavelet,
      HashedVersion lastCommittedVersion, HashedVersion currentSignedVersion)
      throws ChannelException {
    if (wavelet == null) {
      throw new ChannelException("Delta channel: invalid first wave stream message: null"
          + ", last committed version: " + lastCommittedVersion
          + "currentSignedVersion: " + currentSignedVersion, NOT_RECOVERABLE);
    }

    HashedVersion connectVersion;
View Full Code Here

   */
  private void processConnectUpdateMessage(List<TransformedWaveletDelta> deltas,
      HashedVersion lastCommittedVersion, HashedVersion currentSignedVersion)
      throws ChannelException {
    if (deltas == null || deltas.size() == 0) {
      throw new ChannelException("Delta channel: no deltas in first wave stream message",
          NOT_RECOVERABLE);
    }

    HashedVersion connectVersion;
    // This stream has reconnected at a previous version of the wavelet.
    // The first delta has zero operations. It carries the reconnect version
    // and signature.
    TransformedWaveletDelta firstDelta = deltas.get(0);
    if (firstDelta.size() != 0) {
      throw new ChannelException("Delta channel: invalid first wave stream message, "
          + "expected no ops, got " + firstDelta.size(), NOT_RECOVERABLE);
    }
    connectVersion = HashedVersion.of(firstDelta.getAppliedAtVersion(),
        firstDelta.getResultingVersion().getHistoryHash());
    logTrace("Delta channel reconnecting, connect version ",
View Full Code Here

  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);
    }
View Full Code Here

   * @return the position in {@code queue} at which the message was inserted
   * @see #flushServerMessages()
   */
  private int onServerMessage(ServerMessage message) throws ChannelException {
    if (message.startVersion() < lastServerVersion) {
      throw new ChannelException("Delta channel: out of sequence server message with version "
          + message.startVersion() + ": " + message + ", " + this.toString()
          + "; lastServerVersion: " + lastServerVersion, NOT_RECOVERABLE);
    }
    int pos = queue.size();
    while (pos > 0 && (queue.get(pos - 1).compareTo(message) > 0)) {
View Full Code Here

TOP

Related Classes of org.waveprotocol.wave.concurrencycontrol.common.ChannelException

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.