summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl/election_winner_declarer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/repl/election_winner_declarer.cpp')
-rw-r--r--src/mongo/db/repl/election_winner_declarer.cpp148
1 files changed, 71 insertions, 77 deletions
diff --git a/src/mongo/db/repl/election_winner_declarer.cpp b/src/mongo/db/repl/election_winner_declarer.cpp
index 04175335cbd..55016dc373a 100644
--- a/src/mongo/db/repl/election_winner_declarer.cpp
+++ b/src/mongo/db/repl/election_winner_declarer.cpp
@@ -41,86 +41,80 @@
namespace mongo {
namespace repl {
- ElectionWinnerDeclarer::Algorithm::Algorithm(const std::string& setName,
- long long winnerId,
- long long term,
- const std::vector<HostAndPort>& targets) :
- _setName(setName),
- _winnerId(winnerId),
- _term(term),
- _targets(targets) {}
-
- ElectionWinnerDeclarer::Algorithm::~Algorithm() {}
-
- std::vector<RemoteCommandRequest>
- ElectionWinnerDeclarer::Algorithm::getRequests() const {
- BSONObjBuilder declareElectionWinnerCmdBuilder;
- declareElectionWinnerCmdBuilder.append("replSetDeclareElectionWinner", 1);
- declareElectionWinnerCmdBuilder.append("setName", _setName);
- declareElectionWinnerCmdBuilder.append("winnerId", _winnerId);
- declareElectionWinnerCmdBuilder.append("term", _term);
- const BSONObj declareElectionWinnerCmd = declareElectionWinnerCmdBuilder.obj();
-
- std::vector<RemoteCommandRequest> requests;
- for (const auto& target : _targets) {
- requests.push_back(RemoteCommandRequest(
- target,
- "admin",
- declareElectionWinnerCmd,
- Milliseconds(30*1000))); // trying to match current Socket timeout
- }
-
- return requests;
+ElectionWinnerDeclarer::Algorithm::Algorithm(const std::string& setName,
+ long long winnerId,
+ long long term,
+ const std::vector<HostAndPort>& targets)
+ : _setName(setName), _winnerId(winnerId), _term(term), _targets(targets) {}
+
+ElectionWinnerDeclarer::Algorithm::~Algorithm() {}
+
+std::vector<RemoteCommandRequest> ElectionWinnerDeclarer::Algorithm::getRequests() const {
+ BSONObjBuilder declareElectionWinnerCmdBuilder;
+ declareElectionWinnerCmdBuilder.append("replSetDeclareElectionWinner", 1);
+ declareElectionWinnerCmdBuilder.append("setName", _setName);
+ declareElectionWinnerCmdBuilder.append("winnerId", _winnerId);
+ declareElectionWinnerCmdBuilder.append("term", _term);
+ const BSONObj declareElectionWinnerCmd = declareElectionWinnerCmdBuilder.obj();
+
+ std::vector<RemoteCommandRequest> requests;
+ for (const auto& target : _targets) {
+ requests.push_back(RemoteCommandRequest(
+ target,
+ "admin",
+ declareElectionWinnerCmd,
+ Milliseconds(30 * 1000))); // trying to match current Socket timeout
}
- void ElectionWinnerDeclarer::Algorithm::processResponse(
- const RemoteCommandRequest& request,
- const ResponseStatus& response) {
- _responsesProcessed++;
- if (!response.isOK()) { // failed response
- log() << "ElectionWinnerDeclarer: Got failed response from " << request.target
- << ": " << response.getStatus();
- return;
- }
-
- Status cmdResponseStatus = getStatusFromCommandResult(response.getValue().data);
- if (!cmdResponseStatus.isOK()) { // disagreement response
- _failed = true;
- _status = cmdResponseStatus;
- log() << "ElectionWinnerDeclarer: Got error response from " << request.target
- << " with term: " << response.getValue().data["term"].Number()
- << " and error: " << cmdResponseStatus;
- }
- }
-
- bool ElectionWinnerDeclarer::Algorithm::hasReceivedSufficientResponses() const {
- return _failed || _responsesProcessed == static_cast<int>(_targets.size());
- }
-
- ElectionWinnerDeclarer::ElectionWinnerDeclarer() : _isCanceled(false) {}
- ElectionWinnerDeclarer::~ElectionWinnerDeclarer() {}
+ return requests;
+}
- StatusWith<ReplicationExecutor::EventHandle> ElectionWinnerDeclarer::start(
- ReplicationExecutor* executor,
- const std::string& setName,
- long long winnerId,
- long long term,
- const std::vector<HostAndPort>& targets,
- const stdx::function<void ()>& onCompletion) {
-
- _algorithm.reset(new Algorithm(setName, winnerId, term, targets));
- _runner.reset(new ScatterGatherRunner(_algorithm.get()));
- return _runner->start(executor, onCompletion);
- }
-
- void ElectionWinnerDeclarer::cancel(ReplicationExecutor* executor) {
- _isCanceled = true;
- _runner->cancel(executor);
+void ElectionWinnerDeclarer::Algorithm::processResponse(const RemoteCommandRequest& request,
+ const ResponseStatus& response) {
+ _responsesProcessed++;
+ if (!response.isOK()) { // failed response
+ log() << "ElectionWinnerDeclarer: Got failed response from " << request.target << ": "
+ << response.getStatus();
+ return;
}
- Status ElectionWinnerDeclarer::getStatus() const {
- return _algorithm->getStatus();
+ Status cmdResponseStatus = getStatusFromCommandResult(response.getValue().data);
+ if (!cmdResponseStatus.isOK()) { // disagreement response
+ _failed = true;
+ _status = cmdResponseStatus;
+ log() << "ElectionWinnerDeclarer: Got error response from " << request.target
+ << " with term: " << response.getValue().data["term"].Number()
+ << " and error: " << cmdResponseStatus;
}
-
-} // namespace repl
-} // namespace mongo
+}
+
+bool ElectionWinnerDeclarer::Algorithm::hasReceivedSufficientResponses() const {
+ return _failed || _responsesProcessed == static_cast<int>(_targets.size());
+}
+
+ElectionWinnerDeclarer::ElectionWinnerDeclarer() : _isCanceled(false) {}
+ElectionWinnerDeclarer::~ElectionWinnerDeclarer() {}
+
+StatusWith<ReplicationExecutor::EventHandle> ElectionWinnerDeclarer::start(
+ ReplicationExecutor* executor,
+ const std::string& setName,
+ long long winnerId,
+ long long term,
+ const std::vector<HostAndPort>& targets,
+ const stdx::function<void()>& onCompletion) {
+ _algorithm.reset(new Algorithm(setName, winnerId, term, targets));
+ _runner.reset(new ScatterGatherRunner(_algorithm.get()));
+ return _runner->start(executor, onCompletion);
+}
+
+void ElectionWinnerDeclarer::cancel(ReplicationExecutor* executor) {
+ _isCanceled = true;
+ _runner->cancel(executor);
+}
+
+Status ElectionWinnerDeclarer::getStatus() const {
+ return _algorithm->getStatus();
+}
+
+} // namespace repl
+} // namespace mongo