public boolean removeFromList(RecordList rl) { if (rl != null && rl.size() > 0 && rec != null) { boolean forgotten = forgetRec || rec.forgetHeuristic(); boolean removeAllowed = arjPropertyManager.getObjectStoreEnvironmentBean().isIgnoreMBeanHeuristics(); if (forgotten || removeAllowed) { // remove the transaction log for the record if (rl.remove(rec)) { removed = true; return true; } } } return false; } }
/** * Add a record to the atomic action. This function returns AR_ADDED if the * record is added. AR_REJECTED if the record cannot be added because the * action is past the prepare phase, and IGNORED otherwise. * * @return <code>AddOutcome</code> indicating outcome. */ public final synchronized int add (AbstractRecord A) { int result = AddOutcome.AR_REJECTED; criticalStart(); if ((actionStatus <= ActionStatus.ABORTING) && ((recordBeingHandled == null) || !(recordBeingHandled.equals(A)))) { if (pendingList == null) pendingList = new RecordList(); result = (pendingList.insert(A) ? AddOutcome.AR_ADDED : AddOutcome.AR_DUPLICATE); } criticalEnd(); return result; }
public static String[] toStringArray(RecordList rl) { String[] res = new String[rl.size()]; AbstractRecord rec = rl.peekFront(); int i = 0; while (rec != null) { res[i++] = rec.getTypeOfObject(); rec = rl.peekNext(rec); } return res; }
ok = recordBeingHandled.topLevelAbort(); else ok = recordBeingHandled.nestedAbort(); && (recordBeingHandled.propagateOnAbort())) merge(recordBeingHandled); updateHeuristic(TwoPhaseOutcome.FINISH_OK, false); // remember || (ok == TwoPhaseOutcome.HEURISTIC_MIXED) || (ok == TwoPhaseOutcome.HEURISTIC_HAZARD))) { if (actionType == ActionType.TOP_LEVEL) tsLogger.i18NLogger.warn_coordinator_BasicAction_52(get_uid(), TwoPhaseOutcome.stringForm(ok)); else tsLogger.i18NLogger.warn_coordinator_BasicAction_53(get_uid(), TwoPhaseOutcome.stringForm(ok)); updateHeuristic(ok, false); heuristicList.insert(recordBeingHandled); tsLogger.i18NLogger.warn_coordinator_BasicAction_54(get_uid(), TwoPhaseOutcome.stringForm(ok), RecordType.typeToClass(recordBeingHandled.typeIs()).getCanonicalName()); else
if (newRecord.shouldMerge(current)) tsLogger.logger.trace("RecordList::insert("+this+") : merging "+newRecord.type()+ " and "+current.type()+" for "+newRecord.order()); newRecord.merge(current); replace(newRecord, current); replace(newRecord, current); insertBefore(newRecord, current); insertBefore(newRecord, current); putRear(newRecord); insertBefore(newRecord, current);
+ get_uid()); tsLogger.i18NLogger.warn_coordinator_BasicAction_43(get_uid()); Abort(); heuristicList = new RecordList(); failedList = new RecordList(); recordBeingHandled = pendingList.getFront(); && recordBeingHandled.propagateOnCommit()) merge(recordBeingHandled); if (!failedList.insert(recordBeingHandled)) recordBeingHandled = null; else tsLogger.i18NLogger.warn_coordinator_BasicAction_47(get_uid(), TwoPhaseOutcome.stringForm(p)); if (!heuristicList.insert(recordBeingHandled)) recordBeingHandled = null; else { if (stateToSave && ((heuristicList.size() > 0) || (failedList.size() > 0)))
+ get_uid()); switch (actionStatus) { case ActionStatus.CREATED: tsLogger.i18NLogger.warn_coordinator_BasicAction_39(get_uid()); break; case ActionStatus.ABORTED: tsLogger.i18NLogger.warn_coordinator_BasicAction_40(get_uid()); break; default: tsLogger.i18NLogger.warn_coordinator_BasicAction_41(get_uid()); break; while (pendingList.size() > 0) doAbort(pendingList, false); // turn off heuristics reporting ActionManager.manager().remove(get_uid());
if (list_toprocess.size() > 0) RecordList tmpList = new RecordList(); while (((recordBeingHandled = list_toprocess.getFront())) != null) if (recordBeingHandled.forgetHeuristic()) recordBeingHandled = null; else tmpList.putFront(recordBeingHandled); if (tmpList.size() > 0) while ((recordBeingHandled = tmpList.getFront()) != null) list_toprocess.putFront(recordBeingHandled);
public void getParticipants(Collection<String> enlistmentIds) { if (pendingList == null) return; // only add faults for pending records AbstractRecord r = pendingList.peekFront(); while (r != null) { if (r instanceof RESTRecord) enlistmentIds.add(r.get_uid().fileStringForm()); r = pendingList.peekNext(r); } }
/** * Add the specified abstract record to the transaction. Does not do any of * the runtime checking of BasicAction.add, so should be used with care. * Currently used by crash recovery. */ protected final synchronized void addRecord (AbstractRecord A) { preparedList.insert(A); }
private final void createPreparedLists () { if (preparedList == null) preparedList = new RecordList(); if (readonlyList == null) readonlyList = new RecordList(); if (failedList == null) failedList = new RecordList(); if (heuristicList == null) heuristicList = new RecordList(); if (pendingList == null) pendingList = new RecordList(); }
public void updateCommitMarkableResourceRecord(boolean committed) { activate(); CommitMarkableResourceRecord peekFront = (CommitMarkableResourceRecord) preparedList .peekFront(); peekFront.updateOutcome(committed); if (tsLogger.logger.isTraceEnabled()) { tsLogger.logger.trace("Moving " + get_uid() + " to an AAR so it won't get processed this time"); } deactivate(); } }
ok = recordBeingHandled.topLevelAbort(); else ok = recordBeingHandled.nestedAbort(); && (recordBeingHandled.propagateOnAbort())) merge(recordBeingHandled); updateHeuristic(TwoPhaseOutcome.FINISH_OK, false); // remember || (ok == TwoPhaseOutcome.HEURISTIC_MIXED) || (ok == TwoPhaseOutcome.HEURISTIC_HAZARD))) { if (actionType == ActionType.TOP_LEVEL) tsLogger.i18NLogger.warn_coordinator_BasicAction_52(get_uid(), TwoPhaseOutcome.stringForm(ok)); else tsLogger.i18NLogger.warn_coordinator_BasicAction_53(get_uid(), TwoPhaseOutcome.stringForm(ok)); updateHeuristic(ok, false); heuristicList.insert(recordBeingHandled); addDeferredThrowables(recordBeingHandled, deferredThrowables); tsLogger.i18NLogger.warn_coordinator_BasicAction_54(get_uid(), TwoPhaseOutcome.stringForm(ok), RecordType.typeToClass(recordBeingHandled.typeIs()).getCanonicalName()); else "BasicAction::doAbort() result for action-id (%s) on record id: (%s) is (%s) node id: (%s)", get_uid(), record.order(), TwoPhaseOutcome.stringForm(ok), arjPropertyManager.getCoreEnvironmentBean().getNodeIdentifier());
if (newRecord.shouldMerge(current)) tsLogger.logger.trace("RecordList::insert("+this+") : merging "+newRecord.type()+ " and "+current.type()+" for "+newRecord.order()); newRecord.merge(current); replace(newRecord, current); replace(newRecord, current); insertBefore(newRecord, current); insertBefore(newRecord, current); putRear(newRecord); insertBefore(newRecord, current);
+ get_uid()); tsLogger.i18NLogger.warn_coordinator_BasicAction_43(get_uid()); Abort(); heuristicList = new RecordList(); failedList = new RecordList(); recordBeingHandled = pendingList.getFront(); && recordBeingHandled.propagateOnCommit()) merge(recordBeingHandled); if (!failedList.insert(recordBeingHandled)) recordBeingHandled = null; else tsLogger.i18NLogger.warn_coordinator_BasicAction_47(get_uid(), TwoPhaseOutcome.stringForm(p)); if (!heuristicList.insert(recordBeingHandled)) recordBeingHandled = null; else { if (stateToSave && ((heuristicList.size() > 0) || (failedList.size() > 0)))
+ get_uid()); switch (actionStatus) { case ActionStatus.CREATED: tsLogger.i18NLogger.warn_coordinator_BasicAction_39(get_uid()); break; case ActionStatus.ABORTED: tsLogger.i18NLogger.warn_coordinator_BasicAction_40(get_uid()); break; default: tsLogger.i18NLogger.warn_coordinator_BasicAction_41(get_uid()); break; while (pendingList.size() > 0) doAbort(pendingList, false); // turn off heuristics reporting ActionManager.manager().remove(get_uid());