public async Task Handle(SliceReady message)
        {
            _activity.Logger.Info("Slice {0} received dependency for resource {1}@{2}", message.ActivitySlice, message.Resource, message.ResourceSlice);
            var sourceDep = _activity.Dependencies.Single(x => x.Resource == message.Resource);

            if (IsNew)
            {
                Data.ActivitySlice = message.ActivitySlice;
                Data.MissingSlices = _activity.Dependencies.SelectMany(d => d.GetResourceSlices(Data.ActivitySlice).Select(x => new SliceReady()
                {
                    ActivitySlice = Data.ActivitySlice, Resource = d.Resource, ResourceSlice = x
                })).ToList();
            }

            Ensure.Bool.IsTrue(Data.ActivitySlice == message.ActivitySlice);

            Data.MissingSlices.Remove(message);

            if (Data.MissingSlices.Count == 0)
            {
                await _activity.Process(Data.ActivitySlice).ConfigureAwait(false);

                await _bus.Advanced.Topics.Publish(_activity.Resource.ToString(), new ResourceSliceReady()
                {
                    Resource = _activity.Resource,
                    Slice    = Data.ActivitySlice
                });

                _activity.Logger.Info("Completed materialization for slice {0}.", Data.ActivitySlice);
            }
            else
            {
                _activity.Logger.Info("Skipped materialization for slice {0}. Missing {1}", Data.ActivitySlice, string.Join(",", Data.MissingSlices.Select(m => string.Format("{0}@{1}", m.Resource, m.ResourceSlice))));
            }
        }
Esempio n. 2
0
        private async Task _process()
        {
            await _activity.Process(Data.ActivitySlice);

            await _bus.Advanced.Topics.Publish(_activity.Resource.ToString(), new ResourceSliceReady()
            {
                Resource = _activity.Resource,
                Slice    = Data.ActivitySlice
            });

            _activity.Logger.Info("Completed materialization for slice {0}.", Data.ActivitySlice);

            // Reset CD
            Data.IsScheduled  = false;
            Data.CoolDownTill = null;

            if (_activity.CoolDown != null)
            {
                Data.CoolDownTill = DateTimeOffset.UtcNow + _activity.CoolDown;
            }
        }