Esempio n. 1
0
        public virtual void Update(GlobalSession globalSession, LocalOperationId localOperationId, long logIndex)
        {
            LocalSessionTracker localSessionTracker = ValidateGlobalSessionAndGetLocalSessionTracker(globalSession);

            localSessionTracker.ValidateAndTrackOperation(localOperationId);
            this._logIndex = logIndex;
        }
Esempio n. 2
0
            internal virtual bool ValidateAndTrackOperation(LocalOperationId operationId)
            {
                if (!IsValidOperation(operationId))
                {
                    return(false);
                }

                LastSequenceNumberPerSession[operationId.LocalSessionId()] = operationId.SequenceNumber();
                return(true);
            }
Esempio n. 3
0
        /// <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));
            }
        }
Esempio n. 4
0
//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);
        }
Esempio n. 5
0
            /// <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);
            }
Esempio n. 6
0
 private bool IsFirstOperation(LocalOperationId id)
 {
     return(id.SequenceNumber() == 0);
 }