/// <summary> /// Enumerate infos of all cloud service schedules. /// </summary> public List <CloudServiceSchedulingInfo> GetSchedules() { // TODO: Redesign to make it self-contained (so that we don't need to pass the name as well) return(_blobs.ListBlobNames(ScheduledServiceStateName.GetPrefix()) .Select(name => Tuple.Create(name, _blobs.GetBlob(name, _runtimeSerializer))) .Where(pair => pair.Item2.HasValue) .Select(pair => { var state = pair.Item2.Value; var info = new CloudServiceSchedulingInfo { ServiceName = pair.Item1.ServiceName, TriggerInterval = state.TriggerInterval, LastExecuted = state.LastExecuted, WorkerScoped = state.SchedulePerWorker, LeasedBy = Maybe <string> .Empty, LeasedSince = Maybe <DateTimeOffset> .Empty, LeasedUntil = Maybe <DateTimeOffset> .Empty }; if (state.Lease != null) { info.LeasedBy = state.Lease.Owner; info.LeasedSince = state.Lease.Acquired; info.LeasedUntil = state.Lease.Timeout; } return info; }) .ToList()); }
/// <summary> /// Forcibly remove the synchronization lease of a periodic cloud service /// </summary> public void ReleaseLease(string serviceName) { var blobRef = new ScheduledServiceStateName(serviceName); _blobProvider.UpdateIfNotModified( blobRef, currentState => { if (!currentState.HasValue) { return Result<ScheduledServiceState>.CreateError("No service state available."); } var state = currentState.Value; // remove lease state.Lease = null; return Result.CreateSuccess(state); }); }
/// <summary> /// Remove the scheduling information of a cloud service /// </summary> public void ResetSchedule(string serviceName) { var blobRef = new ScheduledServiceStateName(serviceName); _blobProvider.DeleteBlob(blobRef); }
/// <summary> /// Set the trigger interval of a cloud service. /// </summary> public void SetTriggerInterval(string serviceName, TimeSpan triggerInterval) { var blobRef = new ScheduledServiceStateName(serviceName); _blobProvider.UpdateIfNotModified(blobRef, blob => { var state = blob.Value; state.TriggerInterval = triggerInterval; return state; }); }
/// <summary> /// Enumerate the names of all scheduled cloud service. /// </summary> public List <string> GetScheduledServiceNames() { return(_blobs.ListBlobNames(ScheduledServiceStateName.GetPrefix()) .Select(reference => reference.ServiceName).ToList()); }