private async Task InitializeAndStartLogicalTimeManagerAsync(CancellationToken cancellationToken) { ActorTrace.Source.WriteInfoWithId(TraceType, this.traceId, "Initializing logical time manager..."); if (this.isLogicalTimeManagerInitialized == true) { ActorTrace.Source.WriteInfoWithId(TraceType, this.traceId, "Logical time manager already initialized..."); return; } using (ITransaction tx = this.stateManager.CreateTransaction()) { var condVal = await this.logicalTimeDictionary.TryGetValueAsync(tx, LogicalTimestampKey); if (condVal.HasValue) { var logicalTimeStamp = LogicalTimestampSerializer.Deserialize(condVal.Value); this.logicalTimeManager.CurrentLogicalTime = logicalTimeStamp.Timestamp; } } this.logicalTimeManager.Start(); Volatile.Write(ref this.isLogicalTimeManagerInitialized, true); ActorTrace.Source.WriteInfoWithId(TraceType, this.traceId, "Initializing logical time manager SUCCEEDED."); }
async Task VolatileLogicalTimeManager.ISnapshotHandler.OnSnapshotAsync(TimeSpan currentLogicalTime) { var logicalTimedata = new LogicalTimestamp(currentLogicalTime); var data = LogicalTimestampSerializer.Serialize(logicalTimedata); try { using (var tx = this.stateManager.CreateTransaction()) { await this.logicalTimeDictionary.AddOrUpdateAsync(tx, LogicalTimestampKey, data, (k, v) => data); await tx.CommitAsync(); } } catch (FabricException) { // Ignore any fabric exception. } catch (Exception ex) { ActorTrace.Source.WriteErrorWithId( TraceType, this.traceId, string.Format("OnSnapshotAsync() unexpected exception: {0}.", ex.ToString())); } }