public OperationFetcher(IStateReplicator stateReplicator, OperationProcessorInfo copyOperationProcessor, OperationProcessorInfo replicationOperationProcessor, bool drainQueuesInParallel) { Requires.Argument("partition", stateReplicator).NotNull(); Requires.Argument("copyOperationProcessor", copyOperationProcessor).NotNull(); Requires.Argument("replicationOperationProcessor", replicationOperationProcessor).NotNull(); if (copyOperationProcessor.Callback == null) { throw new ArgumentException("copyOperationProcessor.Callback cannot be null"); } if (replicationOperationProcessor.Callback == null) { throw new ArgumentException("replicationOperationProcessor.Callback cannot be null"); } this.copyOperationQueue = new OperationQueue(() => stateReplicator.GetCopyStream(), copyOperationProcessor) { Name = "CopyQueue" }; this.replicationOperationQueue = new OperationQueue(() => stateReplicator.GetReplicationStream(), replicationOperationProcessor) { Name = "ReplicationQueue" }; this.drainQueuesInParallel = drainQueuesInParallel; this.role = ReplicaRole.None; }