Package org.waveprotocol.wave.model.operation.wave

Examples of org.waveprotocol.wave.model.operation.wave.TransformedWaveletDelta


      wavelets.put(waveletName.waveletId, wavelet);
    }

    // Add the delta to the history and update the wavelet's version.
    HashedVersion resultingVersion = updateAndGetVersion(waveletName, delta.getOperationCount());
    TransformedWaveletDelta versionedDelta = CoreWaveletOperationSerializer.deserialize(delta,
        resultingVersion, APP_TIMESTAMP);
    deltas.put(waveletName, versionedDelta);

    // Confirm submit success.
    doSubmitSuccess(waveletName, resultingVersion, APP_TIMESTAMP);
View Full Code Here


        return;
      }

      try {
        WaveletDeltaRecord submitResult = wavelet.submitRequest(waveletName, signedDelta);
        TransformedWaveletDelta transformedDelta = submitResult.getTransformedDelta();
        LOG.info("Submit result for " + waveletName + " by "
            + transformedDelta.getAuthor() + " applied "
            + transformedDelta.size() + " ops at v: "
            + transformedDelta.getAppliedAtVersion() + " t: "
            + transformedDelta.getApplicationTimestamp());
        resultListener.onSuccess(transformedDelta.size(),
            CoreWaveletOperationSerializer.serialize(transformedDelta.getResultingVersion()),
            transformedDelta.getApplicationTimestamp());
      } catch (OperationException e) {
        resultListener.onFailure(FederationErrors.badRequest(e.getMessage()));
      } catch (InvalidProtocolBufferException e) {
        resultListener.onFailure(FederationErrors.badRequest(e.getMessage()));
      } catch (InvalidHashException e) {
View Full Code Here

      Preconditions.checkState(
          transformed.getTargetVersion().getVersion() <= currentVersion.getVersion());
      // The delta was transformed away. That's OK but we don't call either
      // applyWaveletOperations(), because that will throw IllegalArgumentException, or
      // commitAppliedDelta(), because empty deltas cannot be part of the delta history.
      TransformedWaveletDelta emptyDelta = new TransformedWaveletDelta(transformed.getAuthor(),
          transformed.getTargetVersion(), applicationTimestamp, transformed);
      return new WaveletDeltaRecord(transformed.getTargetVersion(), null, emptyDelta);
    }

    if (!transformed.getTargetVersion().equals(currentVersion)) {
      Preconditions.checkState(
          transformed.getTargetVersion().getVersion() < currentVersion.getVersion());
      // The delta was a duplicate of an existing server delta.
      // We duplicate-eliminate it (don't apply it to the wavelet state and don't store it in
      // the delta history) and return the server delta which it was a duplicate of
      // (so delta submission becomes idempotent).
      ByteStringMessage<ProtocolAppliedWaveletDelta> existingDeltaBytes =
          lookupAppliedDelta(transformed.getTargetVersion());
      TransformedWaveletDelta dupDelta = lookupTransformedDelta(transformed.getTargetVersion());
      LOG.info("Duplicate delta " + dupDelta + " for wavelet " + getWaveletName());
      // TODO(anorth): Replace these comparisons with methods on delta classes.
      Preconditions.checkState(dupDelta.getAuthor().equals(transformed.getAuthor()),
          "Duplicate delta detected but mismatched author, expected %s found %s",
          transformed.getAuthor(), dupDelta.getAuthor());
      Preconditions.checkState(Iterables.elementsEqual(dupDelta, transformed),
          "Duplicate delta detected but mismatched ops, expected %s found %s",
          transformed, dupDelta);

      return new WaveletDeltaRecord(transformed.getTargetVersion(), existingDeltaBytes, dupDelta);
View Full Code Here

     *         the next delta is empty
     */
    @Override
    public TransformedWaveletDelta next() {
      try {
        TransformedWaveletDelta delta = reader.getTransformedDelta(nextVersion);
        Preconditions.checkState(delta != null, "no delta at version %s", nextVersion);
        Preconditions.checkState(
            delta.getAppliedAtVersion() < delta.getResultingVersion().getVersion(),
            "delta [%s, %s) is empty", delta.getAppliedAtVersion(), delta.getResultingVersion());
        nextVersion = delta.getResultingVersion().getVersion();
        return delta;
      } catch (IOException e) {
        throw new RuntimeIOException(e);
      }
    }
View Full Code Here

  }

  @Override
  public HashedVersion getResultingVersion(long version) throws IOException {
    checkIsOpen();
    TransformedWaveletDelta transformed = getTransformedDelta(version);

    return (transformed != null) ? transformed.getResultingVersion() : null;
  }
View Full Code Here

            if (nextRecord == null) {
              // Read the next record
              try {
                file.seek(nextPosition);
                TransformedWaveletDelta transformed = readTransformedDeltaFromRecord();
                nextRecord = Pair.of(Pair.of(transformed.getAppliedAtVersion(),
                        transformed.size()), nextPosition);
                nextPosition = file.getFilePointer();
              } catch (IOException e) {
                // The next entry is invalid. There was probably a write error / crash.
                LOG.severe("Error reading delta file for " + waveletName + " starting at " +
                    nextPosition, e);
View Full Code Here

  private WaveletDeltaRecord readRecord() throws IOException {
    DeltaHeader header = readDeltaHeader();

    ByteStringMessage<ProtocolAppliedWaveletDelta> appliedDelta =
        readAppliedDelta(header.appliedDeltaLength);
    TransformedWaveletDelta transformedDelta = readTransformedWaveletDelta(
        header.transformedDeltaLength);

    return new WaveletDeltaRecord(AppliedDeltaUtil.getHashedVersionAppliedAt(appliedDelta),
        appliedDelta, transformedDelta);
  }
View Full Code Here

   */
  private TransformedWaveletDelta readTransformedDeltaFromRecord() throws IOException {
    DeltaHeader header = readDeltaHeader();

    file.skipBytes(header.appliedDeltaLength);
    TransformedWaveletDelta transformedDelta = readTransformedWaveletDelta(
        header.transformedDeltaLength);

    return transformedDelta;
  }
View Full Code Here

   * The delta must be non-empty.
   */
  protected WaveletDeltaRecord applyDelta(
      ByteStringMessage<ProtocolAppliedWaveletDelta> appliedDelta, WaveletDelta transformed)
      throws InvalidProtocolBufferException, OperationException {
    TransformedWaveletDelta transformedDelta =
        AppliedDeltaUtil.buildTransformedDelta(appliedDelta, transformed);

    WaveletDeltaRecord deltaRecord = new WaveletDeltaRecord(transformed.getTargetVersion(),
        appliedDelta, transformedDelta);
    waveletState.appendDelta(deltaRecord);
View Full Code Here

        context = new WaveletOperationContext(author, applicationTimestamp, 1);
      }
      operations.add(deserializeWaveletOperation((DBObject) dbOps.get(i), context));
    }

    return new TransformedWaveletDelta(author, resultingVersion, applicationTimestamp,
        operations.build());
  }
View Full Code Here

TOP

Related Classes of org.waveprotocol.wave.model.operation.wave.TransformedWaveletDelta

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.