// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once #include #include #include namespace storage::lib { class NodeType; } namespace storage::distributor { class PendingMessageTracker; class OperationSequencer; class DistributorMessageSender : public MessageSender { public: /** Sends the storage command to the given node, returns message id. */ virtual uint64_t sendToNode(const lib::NodeType& nodeType, uint16_t node, const std::shared_ptr& cmd, bool useDocumentAPI = false); virtual int getDistributorIndex() const = 0; virtual const ClusterContext& cluster_context() const = 0; }; class DistributorStripeMessageSender : public DistributorMessageSender { public: virtual PendingMessageTracker& getPendingMessageTracker() = 0; virtual const PendingMessageTracker& getPendingMessageTracker() const = 0; virtual const OperationSequencer& operation_sequencer() const noexcept = 0; virtual OperationSequencer& operation_sequencer() noexcept = 0; }; }