Esempio n. 1
0
        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.");
        }
Esempio n. 2
0
        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()));
            }
        }