public TableEntry(
     ActorStateDataWrapper actorStateDataWrapper,
     LinkedListNode <ListEntry> listNode)
 {
     this.ActorStateDataWrapper = actorStateDataWrapper;
     this.ListNode = listNode;
 }
Esempio n. 2
0
        internal static ActorStateDataWrapper CreateActorStateDataWrapper(string key, string reminderName)
        {
            var reminder = new ActorReminderData(
                new ActorId(reminderName),
                new MockReminder(reminderName),
                TimeSpan.FromSeconds(reminderName.Length));

            return(ActorStateDataWrapper.CreateForUpdate(ActorStateType.Reminder, key, new ActorStateData(reminder)));
        }
Esempio n. 3
0
        internal static ActorStateDataWrapper CreateActorStateDataWrapper(string key, long dataLength)
        {
            var bytes = new byte[dataLength];

            for (var ix = 0; ix < dataLength; ++ix)
            {
                bytes[ix] = (byte)ix;
            }

            return(ActorStateDataWrapper.CreateForUpdate(ActorStateType.Actor, key, new ActorStateData(bytes)));
        }
            public ListEntry(
                ActorStateDataWrapper actorStateDataWrapper,
                ReplicationContext replicationContext)
            {
                this.ActorStateDataWrapper     = actorStateDataWrapper;
                this.PendingReplicationContext = replicationContext;

                if (this.PendingReplicationContext != null)
                {
                    this.PendingReplicationContext.AssociateListEntry();
                }
            }
        /*
         *  1. VolatileActorStateProvider.ActorActivatedAsync => VolatileActorStateProvider.ReplicateUpdateAsync =>
         *  VolatileActorStateProvider.ReplicateStateChangesAsync => VolatileActorStateTable.CommitUpdateAsync =>
         *  VolatileActorStateTable.ApplyUpdate_UnderWriteLock
         */

        private void ApplyUpdate_UnderWriteLock(LinkedListNode <ListEntry> listNode)
        {
            ActorStateDataWrapper actorStateDataWrapper = listNode.Value.ActorStateDataWrapper;
            TType type     = actorStateDataWrapper.Type;
            TKey  key      = actorStateDataWrapper.Key;
            bool  isDelete = actorStateDataWrapper.IsDelete;

            TableEntry tableEntry = new TableEntry(actorStateDataWrapper, listNode);
            Dictionary <TKey, TableEntry> dictionary;

            if (!_committedEntriesTable.TryGetValue(type, out dictionary))
            {
                if (isDelete)
                {
                    return;
                }

                dictionary = new Dictionary <TKey, TableEntry>();
                _committedEntriesTable[type] = dictionary;
            }

            // 从 _committedEntriesList 移除原有的 TableEntry
            TableEntry originalTableEntry;

            if (dictionary.TryGetValue(key, out originalTableEntry))
            {
                _committedEntriesList.Remove(originalTableEntry.ListNode);
            }

            // 从 _committedEntriesTable 移除 TableEntry
            if (isDelete)
            {
                dictionary.Remove(key);
            }
            else
            {
                dictionary[key] = tableEntry;
            }

            //TODO: 意图不明
            if (_committedEntriesList.Last?.Value.ActorStateDataWrapper.IsDelete == true)
            {
                _committedEntriesList.RemoveLast();
            }

            _committedEntriesList.AddLast(listNode);
        }
Esempio n. 6
0
        internal static void ValidateStateData(ActorStateDataWrapper stateData, string dataString, long lastSequenceNumber)
        {
            TestLog(
                "[{0}] '{1}' {2} {3}",
                stateData.SequenceNumber,
                stateData.Type,
                stateData.Key,
                dataString);

            FailTestIf(string.IsNullOrEmpty(dataString), "Data not null or empty");

            FailTestIf(
                stateData.SequenceNumber <= lastSequenceNumber,
                "Sequence number: previous={0} current={1}",
                lastSequenceNumber,
                stateData.SequenceNumber);
        }
Esempio n. 7
0
        internal static string GetDataString(ActorStateDataWrapper actorStateDataWrapper)
        {
            string dataString = null;

            if (actorStateDataWrapper.IsDelete)
            {
                dataString = "Delete";
            }
            else if (actorStateDataWrapper.Value.ActorReminderData != null)
            {
                dataString = actorStateDataWrapper.Value.ActorReminderData.Name;
            }
            else if (actorStateDataWrapper.Value.LogicalTimestamp.HasValue)
            {
                dataString = actorStateDataWrapper.Value.LogicalTimestamp.Value.ToString();
            }
            else if (actorStateDataWrapper.Value.ActorState != null)
            {
                dataString = string.Format("{0} bytes", actorStateDataWrapper.Value.ActorState.Length);
            }

            return(dataString);
        }
Esempio n. 8
0
 internal static ActorStateDataWrapper CreateActorStateDataWrapperForDelete(ActorStateType type, string key)
 {
     return(ActorStateDataWrapper.CreateForDelete(type, key));
 }
Esempio n. 9
0
 internal static ActorStateDataWrapper CreateActorStateDataWrapper(string key, TimeSpan timestamp)
 {
     return(ActorStateDataWrapper.CreateForUpdate(ActorStateType.LogicalTimestamp, key, new ActorStateData(timestamp)));
 }
 public ListEntry(ActorStateDataWrapper actorStateDataWrapper, ReplicationContext replicationContext)
 {
     ActorStateDataWrapper     = actorStateDataWrapper;
     PendingReplicationContext = replicationContext;
     PendingReplicationContext?.AssociateListEntry();
 }