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); } } } }
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); } } } }