public virtual void Update(GlobalSession globalSession, LocalOperationId localOperationId, long logIndex) { LocalSessionTracker localSessionTracker = ValidateGlobalSessionAndGetLocalSessionTracker(globalSession); localSessionTracker.ValidateAndTrackOperation(localOperationId); this._logIndex = logIndex; }
internal virtual bool ValidateAndTrackOperation(LocalOperationId operationId) { if (!IsValidOperation(operationId)) { return(false); } LastSequenceNumberPerSession[operationId.LocalSessionId()] = operationId.SequenceNumber(); return(true); }
/// <summary> /// Tracks the operation and returns true iff this operation should be allowed. /// </summary> public virtual bool ValidateOperation(GlobalSession globalSession, LocalOperationId localOperationId) { LocalSessionTracker existingSessionTracker = _sessionTrackers[globalSession.Owner()]; if (IsNewSession(globalSession, existingSessionTracker)) { return(IsFirstOperation(localOperationId)); } else { return(existingSessionTracker.IsValidOperation(localOperationId)); } }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes: //ORIGINAL LINE: @Test public void sessionAcquirementIncreasesOperationId() public virtual void SessionAcquirementIncreasesOperationId() { LocalSessionPool sessionPool = new LocalSessionPool(_globalSession); OperationContext context; context = sessionPool.AcquireSession(); LocalOperationId operationA = context.LocalOperationId(); sessionPool.ReleaseSession(context); context = sessionPool.AcquireSession(); LocalOperationId operationB = context.LocalOperationId(); sessionPool.ReleaseSession(context); assertEquals(operationB.SequenceNumber(), operationA.SequenceNumber() + 1); }
/// <summary> /// The sequence numbers under a single local session must come strictly in order and are only valid once only. /// </summary> internal virtual bool IsValidOperation(LocalOperationId operationId) { long?lastSequenceNumber = LastSequenceNumberPerSession[operationId.LocalSessionId()]; if (lastSequenceNumber == null) { if (operationId.SequenceNumber() != 0) { return(false); } } else if (operationId.SequenceNumber() != lastSequenceNumber + 1) { return(false); } return(true); }
private bool IsFirstOperation(LocalOperationId id) { return(id.SequenceNumber() == 0); }