public TableEntry( ActorStateDataWrapper actorStateDataWrapper, LinkedListNode <ListEntry> listNode) { this.ActorStateDataWrapper = actorStateDataWrapper; this.ListNode = listNode; }
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))); }
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); }
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); }
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); }
internal static ActorStateDataWrapper CreateActorStateDataWrapperForDelete(ActorStateType type, string key) { return(ActorStateDataWrapper.CreateForDelete(type, key)); }
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(); }