public void DisableDirectWrites() { if (_scheduler != null) { _scheduler = null; Log.Verbose("API will forward writes to leader"); } }
async Task LeaderMethod(CancellationToken token, CloudPageBlob blob) { var processors = Environment.ProcessorCount; int parallelism = processors / 2; if (parallelism < 1) { parallelism = 1; } _log.Information("Node is a leader with {processors} processors. Setting parallelism to {parallelism}", processors, parallelism); using (var source = new CancellationTokenSource()) using (var linked = CancellationTokenSource.CreateLinkedTokenSource(token, source.Token)) using (var scheduler = MessageWriteScheduler.Create(_account, parallelism, source)) { try { _log.Information("Message write scheduler created"); _api.EnableDirectWrites(scheduler); // tell the world who is the leader await _info.WriteToBlob(_account); // sleep till cancelled await Task.Delay(-1, linked.Token); } catch (OperationCanceledException) { // expect this exception to be thrown in normal circumstances or check the cancellation token, because // if the lease can't be renewed, the token will signal a cancellation request. _log.Information("Shutting down the scheduler"); // shutdown the scheduler _api.DisableDirectWrites(); var shutdown = scheduler.Shutdown(); if (shutdown.Wait(5000)) { _log.Information("Scheduler is down"); } else { _log.Error("Scheduler failed to shutdown in time"); } } finally { _api.DisableDirectWrites(); _log.Information("This node is no longer a leader"); } } }
public void DisableDirectWrites() { if (_scheduler != null) { _scheduler = null; Log.Verbose("API will forward writes to leader"); } }
public void EnableDirectWrites(MessageWriteScheduler scheduler) { _scheduler = scheduler; Log.Verbose("API will handle writes on this node"); }
public void EnableDirectWrites(MessageWriteScheduler scheduler) { _scheduler = scheduler; Log.Verbose("API will handle writes on this node"); }