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

            localSessionTracker.ValidateAndTrackOperation(localOperationId);
            this._logIndex = logIndex;
        }
Example #2
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public void marshal(GlobalSessionTrackerState target, org.neo4j.storageengine.api.WritableChannel channel) throws java.io.IOException
//JAVA TO C# CONVERTER NOTE: Members cannot have the same name as their enclosing type:
            public override void MarshalConflict(GlobalSessionTrackerState target, WritableChannel channel)
            {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.Map<org.neo4j.causalclustering.identity.MemberId, LocalSessionTracker> sessionTrackers = target.sessionTrackers;
                IDictionary <MemberId, LocalSessionTracker> sessionTrackers = target.sessionTrackers;

                channel.PutLong(target._logIndex);
                channel.PutInt(sessionTrackers.Count);

                foreach (KeyValuePair <MemberId, LocalSessionTracker> entry in sessionTrackers.SetOfKeyValuePairs())
                {
                    MemberMarshal.marshal(entry.Key, channel);
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final LocalSessionTracker localSessionTracker = entry.getValue();
                    LocalSessionTracker localSessionTracker = entry.Value;

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.UUID uuid = localSessionTracker.globalSessionId;
                    System.Guid uuid = localSessionTracker.GlobalSessionId;
                    channel.PutLong(uuid.MostSignificantBits);
                    channel.PutLong(uuid.LeastSignificantBits);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.Map<long, long> map = localSessionTracker.lastSequenceNumberPerSession;
                    IDictionary <long, long> map = localSessionTracker.LastSequenceNumberPerSession;

                    channel.PutInt(map.Count);

                    foreach (KeyValuePair <long, long> sessionSequence in map.SetOfKeyValuePairs())
                    {
                        channel.PutLong(sessionSequence.Key);
                        channel.PutLong(sessionSequence.Value);
                    }
                }
            }
Example #3
0
        private LocalSessionTracker ValidateGlobalSessionAndGetLocalSessionTracker(GlobalSession globalSession)
        {
            LocalSessionTracker localSessionTracker = _sessionTrackers[globalSession.Owner()];

            if (localSessionTracker == null || !localSessionTracker.GlobalSessionId.Equals(globalSession.SessionId()))
            {
                localSessionTracker = new LocalSessionTracker(globalSession.SessionId(), new Dictionary <long, long>());
                _sessionTrackers[globalSession.Owner()] = localSessionTracker;
            }

            return(localSessionTracker);
        }
Example #4
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));
            }
        }
Example #5
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
//ORIGINAL LINE: public GlobalSessionTrackerState unmarshal0(org.neo4j.storageengine.api.ReadableChannel channel) throws java.io.IOException, org.neo4j.causalclustering.messaging.EndOfStreamException
            public override GlobalSessionTrackerState Unmarshal0(ReadableChannel channel)
            {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final long logIndex = channel.getLong();
                long logIndex = channel.Long;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final int sessionTrackerSize = channel.getInt();
                int sessionTrackerSize = channel.Int;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.Map<org.neo4j.causalclustering.identity.MemberId, LocalSessionTracker> sessionTrackers = new java.util.HashMap<>();
                IDictionary <MemberId, LocalSessionTracker> sessionTrackers = new Dictionary <MemberId, LocalSessionTracker>();

                for (int i = 0; i < sessionTrackerSize; i++)
                {
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.neo4j.causalclustering.identity.MemberId member = memberMarshal.unmarshal(channel);
                    MemberId member = MemberMarshal.unmarshal(channel);
                    if (member == null)
                    {
                        throw new System.InvalidOperationException("Null member");
                    }

                    long        mostSigBits     = channel.Long;
                    long        leastSigBits    = channel.Long;
                    System.Guid globalSessionId = new System.Guid(mostSigBits, leastSigBits);

//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final int localSessionTrackerSize = channel.getInt();
                    int localSessionTrackerSize = channel.Int;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final java.util.Map<long, long> lastSequenceNumberPerSession = new java.util.HashMap<>();
                    IDictionary <long, long> lastSequenceNumberPerSession = new Dictionary <long, long>();
                    for (int j = 0; j < localSessionTrackerSize; j++)
                    {
                        long localSessionId = channel.Long;
                        long sequenceNumber = channel.Long;
                        lastSequenceNumberPerSession[localSessionId] = sequenceNumber;
                    }
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final LocalSessionTracker localSessionTracker = new LocalSessionTracker(globalSessionId, lastSequenceNumberPerSession);
                    LocalSessionTracker localSessionTracker = new LocalSessionTracker(globalSessionId, lastSequenceNumberPerSession);
                    sessionTrackers[member] = localSessionTracker;
                }
                GlobalSessionTrackerState result = new GlobalSessionTrackerState();

                result.sessionTrackers = sessionTrackers;
                result.logIndex        = logIndex;
                return(result);
            }
Example #6
0
 private bool IsNewSession(GlobalSession globalSession, LocalSessionTracker existingSessionTracker)
 {
     return(existingSessionTracker == null || !existingSessionTracker.GlobalSessionId.Equals(globalSession.SessionId()));
 }