Package com.google.walkaround.util.server.appengine.CheckedDatastore

Examples of com.google.walkaround.util.server.appengine.CheckedDatastore.CheckedTransaction


  public void testOversizedProperties() throws Exception {
    String massiveString = makeMassiveString();
    final List<String> movedProperties = Lists.newArrayList();
    SlobId objectId = new SlobId(OBJECT_ID);
    CheckedTransaction tx = datastore.beginTransaction();
    MutationLog mutationLog =
        new MutationLog(datastore,
            ROOT_ENTITY_KIND, DELTA_ENTITY_KIND, SNAPSHOT_ENTITY_KIND,
            new MutationLog.DefaultDeltaEntityConverter(),
            tx, objectId, new TestModel(massiveString), new MutationLog.StateCache(1),
            new OversizedPropertyMover.BlobWriteListener() {
              @Override public void blobCreated(
                  Key entityKey, MovableProperty property, BlobKey blobKey) {
                movedProperties.add(property.getPropertyName());
              }
              @Override public void blobDeleted(
                  Key entityKey, MovableProperty property, BlobKey blobKey) {
                throw new AssertionError();
              }
            });
    MutationLog.Appender appender = mutationLog.prepareAppender().getAppender();
    ClientId clientId = new ClientId("fake-clientid");
    // This will generate one snapshot.
    appender.appendAll(
        ImmutableList.of(
            new ChangeData<String>(clientId, "delta 0 " + massiveString),
            new ChangeData<String>(clientId, "delta 1 " + massiveString),
            new ChangeData<String>(clientId, "delta 2 " + massiveString)));
    // This will generate another snapshot.
    appender.append(new ChangeData<String>(clientId, "delta 3 " + massiveString));
    appender.finish();
    tx.commit();
    assertEquals(ImmutableList.of("op", "op", "op", "op", "Data", "Data"), movedProperties);

    CheckedTransaction tx2 = datastore.beginTransaction();
    MutationLog mutationLog2 =
        // TODO: eliminate code duplication
        new MutationLog(datastore,
            ROOT_ENTITY_KIND, DELTA_ENTITY_KIND, SNAPSHOT_ENTITY_KIND,
            new MutationLog.DefaultDeltaEntityConverter(),
View Full Code Here


    assertEquals(null, directory.lookup(OBJECT_ID));
  }

  private static Entity get(CheckedDatastore store, Key key)
      throws PermanentFailure, RetryableFailure {
    CheckedTransaction tx = store.beginTransaction();
    try {
      return tx.get(key);
    } finally {
      tx.rollback();
    }
  }
View Full Code Here

  // Provider because we need to set up the UserContext before this can be instantiated.
  @Inject Provider<TaskDispatcher> taskDispatcher;

  private ImportTask readTask(StableUserId userId, long taskId) throws IOException {
    try {
      CheckedTransaction tx = datastore.beginTransaction();
      try {
        return perUserTable.getTask(tx, userId, taskId);
      } finally {
        tx.rollback();
      }
    } catch (RetryableFailure e) {
      // If we can't even read the task, let the task queue retry rather than
      // doing it here.  Seems better because it means we don't use waste a
      // thread for waiting.
View Full Code Here

    // tasks may have been scheduled.)
    try {
      new RetryHelper().run(
          new RetryHelper.VoidBody() {
            @Override public void run() throws RetryableFailure, PermanentFailure {
              CheckedTransaction tx = datastore.beginTransaction();
              try {
                if (perUserTable.getTask(tx, userId, taskId) == null) {
                  // If the task is already gone, make sure we don't schedule follow-up tasks.
                  log.info(
                      "Task is gone from datastore; either completed concurrently or cancelled");
                  return;
                }
                perUserTable.deleteTask(tx, userId, taskId);
                for (ImportTaskPayload payload : followupTasks) {
                  perUserTable.addTask(tx, userId, payload);
                }
                tx.commit();
              } finally {
                tx.close();
              }
            }
          });
    } catch (PermanentFailure e) {
      // Ugh, all the real work is done but then we failed to delete the task
View Full Code Here

    for (final List<RemoteConvWavelet> partition
        : Iterables.partition(results, MAX_WAVELETS_PER_TRANSACTION)) {
      new RetryHelper().run(
          new RetryHelper.VoidBody() {
            @Override public void run() throws RetryableFailure, PermanentFailure {
              CheckedTransaction tx = datastore.beginTransaction();
              try {
                if (perUserTable.addRemoteWavelets(tx, userId, partition)) {
                  tx.commit();
                }
              } finally {
                tx.close();
              }
            }
          });
    }
    log.info("Successfully added " + results.size() + " remote waves");
View Full Code Here

            // 5 tasks per transaction.
            5)) {
      new RetryHelper().run(
          new RetryHelper.VoidBody() {
            @Override public void run() throws RetryableFailure, PermanentFailure {
              CheckedTransaction tx = datastore.beginTransaction();
              try {
                for (RobotSearchDigest result : partition) {
                  FindWaveletsForRemoteWaveTask task = new FindWaveletsForRemoteWaveTaskGsonImpl();
                  task.setInstance(instance.serialize());
                  task.setWaveDigest(result);
                  if (autoImportSettings != null) {
                    task.setAutoImportSettings(autoImportSettings);
                  }
                  ImportTaskPayload payload = new ImportTaskPayloadGsonImpl();
                  payload.setFindWaveletsTask(task);
                  perUserTable.addTask(tx, userId, payload);
                }
                tx.commit();
              } finally {
                tx.close();
              }
            }
          });
    }
    log.info("Successfully scheduled import of " + results.size() + " waves");
View Full Code Here

            // 5 tasks per transaction.
            5)) {
      new RetryHelper().run(
          new RetryHelper.VoidBody() {
            @Override public void run() throws RetryableFailure, PermanentFailure {
              CheckedTransaction tx = datastore.beginTransaction();
              try {
                for (RemoteConvWavelet wavelet : partition) {
                  ImportWaveletTask task = new ImportWaveletTaskGsonImpl();
                  task.setInstance(wavelet.getSourceInstance().serialize());
                  task.setWaveId(wavelet.getDigest().getWaveId());
                  task.setWaveletId(wavelet.getWaveletId().serialise());
                  task.setSettings(autoImportSettings);
                  ImportTaskPayload payload = new ImportTaskPayloadGsonImpl();
                  payload.setImportWaveletTask(task);
                  perUserTable.addTask(tx, userId, payload);
                }
                tx.commit();
              } finally {
                tx.close();
              }
            }
          });
    }
    log.info("Successfully scheduled import of " + results.size() + " waves");
View Full Code Here

  public void taskInvoked(final SlobId slobId) {
    try {
      new RetryHelper().run(new RetryHelper.VoidBody() {
        @Override
        public void run() throws RetryableFailure, PermanentFailure {
          CheckedTransaction tx = datastore.beginTransaction();
          tx.put(new Entity(KeyFactory.createKey(
              MutationLog.makeRootEntityKey(rootEntityKind, slobId),
              syncEntityKind, SYNC_ENTITY_NAME)));
          tx.commit();
        }
      });
    } catch (PermanentFailure e) {
      throw new RuntimeException("Failed to touch sync entity, trying again later", e);
    }
View Full Code Here

  @Nullable public T getOrAdd(final T newEntry) throws IOException {
    Preconditions.checkNotNull(newEntry, "Null newEntry");
    try {
      return new RetryHelper().run(new RetryHelper.Body<T>() {
        @Override public T run() throws RetryableFailure, PermanentFailure {
          CheckedTransaction tx = datastore.beginTransaction();
          try {
            Entity existing = tx.get(makeKey(getId(newEntry)));
            if (existing != null) {
              log.info("Read " + existing + " in " + tx);
              return parse(existing);
            } else {
              put(tx, newEntry);
              tx.commit();
              log.info("Committed " + tx);
              return null;
            }
          } finally {
            tx.close();
          }
        }
      });
    } catch (PermanentFailure e) {
      throw new IOException(e);
View Full Code Here

          new RetryHelper.Body<BlobKey>() {
            @Override public BlobKey run() throws RetryableFailure, PermanentFailure {
              // HACK(ohler): The file service incorrectly uses the current
              // transaction.  Make a dummy transaction as a workaround.
              // Apparently it even needs to be XG.
              CheckedTransaction tx = datastore.beginTransactionXG();
              try {
                BlobKey key = getFileService().getBlobKey(finalizedBlobFile);
                if (key == null) {
                  // I have the impression that this can happen because of HRD's
                  // eventual consistency.  Retry.
                  throw new RetryableFailure(this + ": getBlobKey() returned null");
                }
                return key;
              } finally {
                tx.close();
              }
            }
          });
    } catch (PermanentFailure e) {
      throw new IOException("Failed to get blob key for " + finalizedBlobFile, e);
View Full Code Here

TOP

Related Classes of com.google.walkaround.util.server.appengine.CheckedDatastore.CheckedTransaction

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.