From e6ec1864c5eaeaee60749d4e9673a46904556d92 Mon Sep 17 00:00:00 2001 From: Kaveh Vahedipour Date: Thu, 9 Jun 2016 12:01:44 +0200 Subject: [PATCH] move-shard slightly changed order of actions --- arangod/Agency/Agent.h | 2 +- arangod/Agency/CleanOutServer.cpp | 2 +- arangod/Agency/FailedLeader.cpp | 4 +-- arangod/Agency/FailedServer.cpp | 15 ++------- arangod/Agency/MoveShard.cpp | 40 +++++++++++++----------- arangod/Agency/Supervision.cpp | 52 ++++++++++++++----------------- 6 files changed, 52 insertions(+), 63 deletions(-) diff --git a/arangod/Agency/Agent.h b/arangod/Agency/Agent.h index 75c60382ce..a19f47b55d 100644 --- a/arangod/Agency/Agent.h +++ b/arangod/Agency/Agent.h @@ -195,7 +195,7 @@ inline arangodb::consensus::write_ret_t transact ( LOG_TOPIC(ERR, Logger::AGENCY) << e.what(); } - LOG_TOPIC(DEBUG, Logger::AGENCY) << envelope->toJson(); + LOG_TOPIC(INFO, Logger::AGENCY) << envelope->toJson(); auto ret = _agent->write(envelope); if (waitForCommit) { auto maximum = *std::max_element(ret.indices.begin(), ret.indices.end()); diff --git a/arangod/Agency/CleanOutServer.cpp b/arangod/Agency/CleanOutServer.cpp index 6707c38faa..30bb4b14f4 100644 --- a/arangod/Agency/CleanOutServer.cpp +++ b/arangod/Agency/CleanOutServer.cpp @@ -35,8 +35,8 @@ CleanOutServer::CleanOutServer ( std::string const& server) : Job(snapshot, agent, jobId, creator, prefix), _server(server) { - JOB_STATUS js = status(); try { + JOB_STATUS js = status(); if (js == TODO) { start(); } else if (js == NOTFOUND) { diff --git a/arangod/Agency/FailedLeader.cpp b/arangod/Agency/FailedLeader.cpp index 2474d257e1..3fad480cac 100644 --- a/arangod/Agency/FailedLeader.cpp +++ b/arangod/Agency/FailedLeader.cpp @@ -36,9 +36,9 @@ FailedLeader::FailedLeader( Job(snapshot, agent, jobId, creator, agencyPrefix), _database(database), _collection(collection), _shard(shard), _from(from), _to(to) { - JOB_STATUS js = status(); - try { + JOB_STATUS js = status(); + if (js == TODO) { start(); } else if (js == NOTFOUND) { diff --git a/arangod/Agency/FailedServer.cpp b/arangod/Agency/FailedServer.cpp index 1e73a39d78..f9e59ae42d 100644 --- a/arangod/Agency/FailedServer.cpp +++ b/arangod/Agency/FailedServer.cpp @@ -38,8 +38,8 @@ FailedServer::FailedServer(Node const& snapshot, Job(snapshot, agent, jobId, creator, agencyPrefix), _server(server) { - JOB_STATUS js = status(); try { + JOB_STATUS js = status(); if (js == TODO) { start(); } else if (js == NOTFOUND) { @@ -220,23 +220,12 @@ JOB_STATUS FailedServer::status () { for (auto const& subJob : todos) { if (!subJob.first.compare(0, _jobId.size()+1, _jobId + "-")) { found++; -#if 0 - Node const& sj = *(subJob.second); - std::string subJobId = sj("jobId").slice().copyString(); - std::string creator = sj("creator").slice().copyString(); - FailedLeader(_snapshot, _agent, subJobId, creator, _agencyPrefix); -#endif } } + for (auto const& subJob : pends) { if (!subJob.first.compare(0, _jobId.size()+1, _jobId + "-")) { found++; -#if 0 - Node const& sj = *(subJob.second); - std::string subJobId = sj("jobId").slice().copyString(); - std::string creator = sj("creator").slice().copyString(); - FailedLeader(_snapshot, _agent, subJobId, creator, _agencyPrefix); -#endif } } diff --git a/arangod/Agency/MoveShard.cpp b/arangod/Agency/MoveShard.cpp index d5945a567a..70c4e8464d 100644 --- a/arangod/Agency/MoveShard.cpp +++ b/arangod/Agency/MoveShard.cpp @@ -36,9 +36,9 @@ MoveShard::MoveShard (Node const& snapshot, Agent* agent, Job(snapshot, agent, jobId, creator, prefix), _database(database), _collection(collection), _shard(shard), _from(from), _to(to) { - JOB_STATUS js = status(); - try { + JOB_STATUS js = status(); + if (js == TODO) { start(); } else if (js == NOTFOUND) { @@ -251,29 +251,29 @@ JOB_STATUS MoveShard::status () { Slice current = _snapshot(curPath).slice(), plan = _snapshot(curPath).slice(); + LOG(WARN) << plan.toJson(); + LOG(WARN) << current.toJson(); + if (current == plan) { - if ((current[0].copyString())[0] == '_') { // Retired leader + if (current[0].copyString() == std::string("_")+_from) { // Retired leader - Builder cyclic; // Cyclic shift _serverId to end - cyclic.openArray(); - cyclic.openObject(); + Builder remove; // remove + remove.openArray(); + remove.openObject(); // --- Plan changes - cyclic.add(_agencyPrefix + planPath, VPackValue(VPackValueType::Array)); + remove.add(_agencyPrefix + planPath, VPackValue(VPackValueType::Array)); for (size_t i = 1; i < current.length(); ++i) { - cyclic.add(current[i]); + remove.add(current[i]); } - std::string disabledLeader = current[0].copyString(); - disabledLeader = disabledLeader.substr(1,disabledLeader.size()-1); - cyclic.add(VPackValue(disabledLeader)); - cyclic.close(); + remove.close(); // --- Plan version - cyclic.add(_agencyPrefix + planVersion, + remove.add(_agencyPrefix + planVersion, VPackValue(VPackValueType::Object)); - cyclic.add("op", VPackValue("increment")); - cyclic.close(); - cyclic.close(); cyclic.close(); - transact(_agent, cyclic); + remove.add("op", VPackValue("increment")); + remove.close(); + remove.close(); remove.close(); + transact(_agent, remove); return PENDING; @@ -292,6 +292,8 @@ JOB_STATUS MoveShard::status () { if (foundFrom && foundTo) { + LOG(WARN) << _from << " " << current.toJson(); + if (current[0].copyString() == _from) { // Leader Builder underscore; // serverId -> _serverId @@ -342,7 +344,9 @@ JOB_STATUS MoveShard::status () { } else if (foundTo && !foundFrom) { - return FINISHED; + if (finish("Shards/" + _shard)) { + return FINISHED; + } } diff --git a/arangod/Agency/Supervision.cpp b/arangod/Agency/Supervision.cpp index 486a50442b..caddf6bae7 100644 --- a/arangod/Agency/Supervision.cpp +++ b/arangod/Agency/Supervision.cpp @@ -306,39 +306,35 @@ void Supervision::workJobs() { for (auto const& todoEnt : todos) { Node const& job = *todoEnt.second; - try { - std::string jobType = job("type").getString(), - jobId = job("jobId").getString(), - creator = job("creator").getString(); - if (jobType == "failedServer") { - FailedServer fs(_snapshot, _agent, jobId, creator, _agencyPrefix); - } else if (jobType == "cleanOutServer") { - CleanOutServer cos(_snapshot, _agent, jobId, creator, _agencyPrefix); - } else if (jobType == "moveShard") { - MoveShard mv(_snapshot, _agent, jobId, creator, _agencyPrefix); - } else if (jobType == "failedLeader") { - FailedLeader fl(_snapshot, _agent, jobId, creator, _agencyPrefix); - } - } catch (std::exception const&) {} + std::string jobType = job("type").getString(), + jobId = job("jobId").getString(), + creator = job("creator").getString(); + if (jobType == "failedServer") { + FailedServer fs(_snapshot, _agent, jobId, creator, _agencyPrefix); + } else if (jobType == "cleanOutServer") { + CleanOutServer cos(_snapshot, _agent, jobId, creator, _agencyPrefix); + } else if (jobType == "moveShard") { + MoveShard mv(_snapshot, _agent, jobId, creator, _agencyPrefix); + } else if (jobType == "failedLeader") { + FailedLeader fl(_snapshot, _agent, jobId, creator, _agencyPrefix); + } } for (auto const& pendEnt : pends) { Node const& job = *pendEnt.second; - try { - std::string jobType = job("type").getString(), - jobId = job("jobId").getString(), - creator = job("creator").getString(); - if (jobType == "failedServer") { - FailedServer fs(_snapshot, _agent, jobId, creator, _agencyPrefix); - } else if (jobType == "cleanOutServer") { - CleanOutServer cos(_snapshot, _agent, jobId, creator, _agencyPrefix); - } else if (jobType == "moveShard") { - MoveShard mv(_snapshot, _agent, jobId, creator, _agencyPrefix); - } else if (jobType == "failedLeader") { - FailedLeader fl(_snapshot, _agent, jobId, creator, _agencyPrefix); - } - } catch (std::exception const&) {} + std::string jobType = job("type").getString(), + jobId = job("jobId").getString(), + creator = job("creator").getString(); + if (jobType == "failedServer") { + FailedServer fs(_snapshot, _agent, jobId, creator, _agencyPrefix); + } else if (jobType == "cleanOutServer") { + CleanOutServer cos(_snapshot, _agent, jobId, creator, _agencyPrefix); + } else if (jobType == "moveShard") { + MoveShard mv(_snapshot, _agent, jobId, creator, _agencyPrefix); + } else if (jobType == "failedLeader") { + FailedLeader fl(_snapshot, _agent, jobId, creator, _agencyPrefix); + } } }