コード例 #1
0
  private void broadcastInvalidateForPrepare(
      List<WriteCommand> modifications, Transaction tx, InvocationContext ctx) throws Throwable {
    if (ctx.isInTxScope() && !isLocalModeForced(ctx)) {
      if (modifications == null || modifications.isEmpty()) return;
      InvalidationFilterVisitor filterVisitor = new InvalidationFilterVisitor(modifications.size());
      filterVisitor.visitCollection(null, modifications);

      if (filterVisitor.containsPutForExternalRead) {
        log.debug("Modification list contains a putForExternalRead operation.  Not invalidating.");
      } else {
        try {
          invalidateAcrossCluster(
              defaultSynchronous, ctx, filterVisitor.result.toArray(), false, null);
        } catch (Throwable t) {
          log.warn("Unable to broadcast evicts as a part of the prepare phase.  Rolling back.", t);
          if (t instanceof RuntimeException) throw (RuntimeException) t;
          else throw new RuntimeException("Unable to broadcast invalidation messages", t);
        }
      }
    }
  }
コード例 #2
0
  private void broadcastInvalidateForPrepare(
      List<WriteCommand> modifications, InvocationContext ctx) throws Throwable {
    // A prepare does not carry flags, so skip checking whether is local or not
    if (ctx.isInTxScope()) {
      if (modifications.isEmpty()) return;
      InvalidationFilterVisitor filterVisitor = new InvalidationFilterVisitor(modifications.size());
      filterVisitor.visitCollection(null, modifications);

      if (filterVisitor.containsPutForExternalRead) {
        log.debug("Modification list contains a putForExternalRead operation.  Not invalidating.");
      } else if (filterVisitor.containsLocalModeFlag) {
        log.debug("Modification list contains a local mode flagged operation.  Not invalidating.");
      } else {
        try {
          invalidateAcrossCluster(defaultSynchronous, filterVisitor.result.toArray(), ctx);
        } catch (Throwable t) {
          log.unableToRollbackEvictionsDuringPrepare(t);
          if (t instanceof RuntimeException) throw (RuntimeException) t;
          else throw new RuntimeException("Unable to broadcast invalidation messages", t);
        }
      }
    }
  }