Exemplo n.º 1
0
 /// <summary>
 /// Queues an event to be logged asynchronously.
 /// </summary>
 /// <param name="snapshot">The snapshot immediately following the event.</param>
 public void Log(OverridesSnapshot <TSubApp, TTier, TDataCenter> snapshot)
 {
     Task.Run(async() =>
     {
         try
         {
             await LogAsyncImpl(snapshot);
         }
         catch (Exception e)
         {
             _onLogException(e, snapshot);
         }
     });
 }
Exemplo n.º 2
0
        /// <summary>
        /// Actual implementation for logging. Must be provided by inheriting classes.
        /// </summary>
        static int CompareLogs(OverridesSnapshot <TSubApp, TTier, TDataCenter> a, OverridesSnapshot <TSubApp, TTier, TDataCenter> b)
        {
            if (a.LastEvent.Timestamp > b.LastEvent.Timestamp)
            {
                return(1);
            }

            if (a.LastEvent.Timestamp == b.LastEvent.Timestamp)
            {
                return(0);
            }

            return(-1);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Logging implementation.
        /// </summary>
        protected override Task LogAsyncImpl(OverridesSnapshot <TSubApp, TTier, TDataCenter> snapshot)
        {
            lock (_history)
            {
                var needsResort = _history.Count > 0 && snapshot.LastEvent.Timestamp < _history[_history.Count - 1].LastEvent.Timestamp;
                _history.Add(snapshot);

                if (needsResort)
                {
                    _history.Sort(CompareLogs);
                }
            }

            return(Task.FromResult(0));
        }
Exemplo n.º 4
0
        public static TSettings GetSettings <TSettings>(
            this SettingsFactory <TSettings, SubApp, Tier, DataCenter> factory,
            OverridesSnapshot <SubApp, Tier, DataCenter> snapshot = null)
            where TSettings : class, INFigSettings <SubApp, Tier, DataCenter>, new()
        {
            if (snapshot == null)
            {
                snapshot = CreateSnapshot(factory.GlobalAppName);
            }

            TSettings settings;
            var       ex = factory.TryGetSettingsForGlobalApp(out settings, snapshot);

            if (ex != null)
            {
                throw ex;
            }

            return(settings);
        }
Exemplo n.º 5
0
 /// <summary>
 /// Actual implementation for logging. Must be provided by inheriting classes.
 /// </summary>
 protected abstract Task LogAsyncImpl(OverridesSnapshot <TSubApp, TTier, TDataCenter> snapshot);
Exemplo n.º 6
0
 protected override void DeleteOrphanedOverrides(OverridesSnapshot <TSubApp, TTier, TDataCenter> snapshot)
 {
     // there's never going to be orphaned overrides for an in-memory store
 }
Exemplo n.º 7
0
 protected override Task DeleteOrphanedOverridesAsync(OverridesSnapshot <TSubApp, TTier, TDataCenter> snapshot)
 {
     // there's never going to be orphaned overrides for an in-memory store
     return(Task.FromResult(0));
 }
Exemplo n.º 8
0
        protected override OverridesSnapshot <TSubApp, TTier, TDataCenter> RestoreSnapshotImpl(OverridesSnapshot <TSubApp, TTier, TDataCenter> snapshot, string user)
        {
            var data = _appData;

            lock (data)
            {
                data.Commit = NewCommit();

                var log = new NFigLogEvent <TDataCenter>(
                    type: NFigLogEventType.RestoreSnapshot,
                    globalAppName: snapshot.GlobalAppName,
                    commit: data.Commit,
                    timestamp: DateTime.UtcNow,
                    settingName: null,
                    settingValue: null,
                    restoredCommit: snapshot.Commit,
                    dataCenter: default(TDataCenter),
                    user: user);

                data.LastEvent = log.BinarySerialize();

                data.Overrides.Clear();
                foreach (var o in snapshot.Overrides)
                {
                    var key = GetOverrideKey(o.Name, o.SubApp, o.DataCenter);
                    data.Overrides.Add(key, o.Value);
                }

                return(CreateSnapshot(data));
            }
        }
Exemplo n.º 9
0
 protected override Task <OverridesSnapshot <TSubApp, TTier, TDataCenter> > RestoreSnapshotAsyncImpl(OverridesSnapshot <TSubApp, TTier, TDataCenter> snapshot, string user)
 {
     return(Task.FromResult(RestoreSnapshot(snapshot, user)));
 }