From 7f9bd1baa2d97db003f79647a92b82c47da0ee4d Mon Sep 17 00:00:00 2001 From: ArangoDB Release Bot Date: Thu, 23 Nov 2017 00:58:01 +0000 Subject: [PATCH 1/7] nightly frontend build --- .../APP/frontend/build/index-min.html | 2 +- .../APP/frontend/build/index-min.html.gz | Bin 35200 -> 35201 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html b/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html index 4f2dafe047..1658a1fac0 100644 --- a/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html +++ b/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html @@ -2912,4 +2912,4 @@ var cutByResolution = function (str) {
-
\ No newline at end of file +
\ No newline at end of file diff --git a/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html.gz b/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html.gz index 075d6e852d339be30957c2939221e0b68d4c3ed9..be9895e8bb195628f0b4a495a351ad88ccb92013 100644 GIT binary patch delta 2771 zcmV;^3M}=2lLCR00(**qa^xL1l45| zEO@O9#*nP%VHRXY>`$^!fP6S9^@2~Zy9IfdWS(82btl7QlN<&VJe6K ziGDpVzDHp234py>e+C0Qoo}%O(dzoe z=rjdNM!=zTbshipBUp4i%yIo@PQ8MIK1ZA*?|qqI8OSXMPP(5a%!uaL3o_cOeilNZ+^rUM!;DS zpQTe&b-!Bi}yKa!mbw6v?Ghb%>lv3g5i{B|3l;ELzL@yy*ny2az|uk=kAiVb)j z-+0z{gojf8$xG-#;VjIP>V)@uKL|m6n2^ zn5o>A3b3|4f$M9~$kPg@@tZ|BA)WNG4Esr&x$JA(YjqEB+fVwjpVdM`sJ8RCsU3?U z2z}sdy%Q7%t!|)yp~(vUXeqh`6sTk`^$f@JR_+d96%IKIU{WugOQoR$auNe}p-Tskl zApk3IT_G?k!`;V!N~TJ#Tu4No)-L0Ae;mAEA%`3_)QB@cem?yMn$S~)Ad?=N$tWcO*uAB4 z4um-wJim{V8GO3}-aV7nd@BK+lLCD}0kV@reLyJ#Kj}M|>ruxXseVlX*|!o7H?FpV zwzxk*o57Ee&zfAEPaq}^$sX?MldOFw0(xJQ)qPVV=duD(v>F?8QnZ2AP5zQ+?B{m)-T zz5E!Hpnjty4qR{0<|dx271V1s>rad7I_#Zdw>?AUwdm&r(`ji8G=JSMlV^WSBeox2 z*a8NqJJ+4o_QO^ozMA@on1P*E7(SH>l@=E^S4HB5lh%JT0c(>AfGjP9o>~l%^#2V7 zli;~_D+$Zu0jsrz^^o8iq{>`vBHDtY8%tc%O|}REwae5UlVgB18L;h>Nn`6UNJ>OP zWBY8lv=^{>_my?sl zfg}OQlj?yRKAz>wj7cac8wdSOUSPj_j0^;-f_#x=W6D3AOn1e-tT`osj3V$i;DFuW z3Q6TU=#|-^j#dB9$iJSGuXmH&gGV0= z_2+6OUP9Zag%MV>22gmNV{g!rozgWoT1>I0xwex+gjNM)y9WmclbwVoC^eXAV)J5K z#t;Vm2i>J@HjyHmX5cEwfk=z+h2e{PSK48msya%)tds17I1B>94)Xl!XsS_|ZU~bw zg%*EXi5*u0bJ{Df2DOs@DpYOFHR26)+cD%i?x|{r4XwED3Q`)B` zq@P(jIrFzw{@pgtZrCW^5Pdf7h&P67(= zuTZzST@vuNtq-?L@?CCyxYGcqlcp_N6MZDDN&{32&T984hW#XOj+wE*uZn{Y!vm7JM&Bd@s*vlh3|VA902|!UX(a=M0lr zhE4%9lc$C_0b!HihB*Tu*awpwhczpTlc?7lc9$h8}<=TFpQC^rPBIC^v{>)M<5y>kh@V9tGB+H`s@k#3-8 zWGO^Y z%?L$SX)Ud`uWA4F-iz_5Ki~Xi{*5g=JCC*>J=%Km^;cUDx3|7Vn;oqTw8&in8TwK0 Z!-q?K(@`a$!&KPa{{s4?u@Kj10swK{P4oZ& delta 2770 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 Yhbw*4Q6-?mRM_4B0-5_Q%hzWD0J^zMTmS$7 From 42a694d0d7a1744440a4e8f350c33deeb9ca398e Mon Sep 17 00:00:00 2001 From: ArangoDB Release Bot Date: Fri, 24 Nov 2017 00:57:57 +0000 Subject: [PATCH 2/7] nightly frontend build --- .../APP/frontend/build/index-min.html | 2 +- .../APP/frontend/build/index-min.html.gz | Bin 35201 -> 35200 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html b/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html index 1658a1fac0..722a488f67 100644 --- a/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html +++ b/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html @@ -2912,4 +2912,4 @@ var cutByResolution = function (str) {
-
\ No newline at end of file +
\ No newline at end of file diff --git a/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html.gz b/js/apps/system/_admin/aardvark/APP/frontend/build/index-min.html.gz index be9895e8bb195628f0b4a495a351ad88ccb92013..532d82e050ad64684f63ac39d4515e73ab644b50 100644 GIT binary patch delta 4537 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 XaiMQIsswbH3cLGX*3acE*JlC%8o0TP delta 4538 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 Yhf96aQ6-?mRM_4B0{Wz}5Z7k{0Be!I)Bpeg From 2beaef41ff5344256057ca4986a68cba258b27b9 Mon Sep 17 00:00:00 2001 From: Kaveh Vahedipour Date: Fri, 24 Nov 2017 10:31:07 +0100 Subject: [PATCH 3/7] Bug fix/agencycomm validate methods broken (#3784) --- arangod/Agency/AgencyComm.cpp | 50 +++---- arangod/Agency/Agent.cpp | 53 +++---- arangod/Agency/Agent.h | 2 +- arangod/Agency/RestAgencyHandler.cpp | 19 ++- arangod/Agency/State.cpp | 22 +-- arangod/Agency/State.h | 2 +- js/client/tests/agency/agency-test.js | 199 ++++++++------------------ 7 files changed, 124 insertions(+), 223 deletions(-) diff --git a/arangod/Agency/AgencyComm.cpp b/arangod/Agency/AgencyComm.cpp index c30019486d..202f427828 100644 --- a/arangod/Agency/AgencyComm.cpp +++ b/arangod/Agency/AgencyComm.cpp @@ -1481,43 +1481,27 @@ AgencyCommResult AgencyComm::sendWithFailover( result = send( connection.get(), method, conTimeout, url, b.toJson(), ""); - if (result.successful()) { - std::shared_ptr bodyBuilder - = VPackParser::fromJson(result._body); - VPackSlice outer = bodyBuilder->slice(); + // Inquire returns a body like write or if the write is still ongoing + // We check, if the operation is still ongoing then body is {"ongoing:true"} + // _statusCode can be 200 or 412 + if (result.successful() || result._statusCode == 412) { + std::shared_ptr resultBody + = VPackParser::fromJson(result._body); + VPackSlice outer = resultBody->slice(); // If the operation is still ongoing, simply ask again later: - if (outer.isString() && outer.copyString() == "ongoing") { + if (outer.isObject() && outer.hasKey("ongoing")) { continue; } - - // If we get an answer, we have to look at it, the condition is - // that we get that our transaction has been logged with a certain - // positive log index: - if (outer.isArray() && outer.length() > 0) { - uint64_t index = 0; - for (auto const& inner : VPackArrayIterator(outer)) { - if (inner.isArray() && inner.length() > 0) { - for (auto const& i : VPackArrayIterator(inner)) { - if (i.isObject()) { - VPackSlice indexSlice = i.get("index"); - if (indexSlice.isInteger()) { - index = indexSlice.getUInt(); - break; - } - } - } - } - } - if (index > 0) { + + // If we get an answer, and it contains a "results" key, + // we release the connection and break out of the loop letting the + // inquiry result go to the client. Otherwise try again. + if (outer.isObject() && outer.hasKey("results")) { + VPackSlice results = outer.get("results"); + if (results.length() > 0) { LOG_TOPIC(DEBUG, Logger::AGENCYCOMM) - << body << " succeeded (" << outer.toJson() << ")"; - bodyBuilder->clear(); - { - VPackArrayBuilder guard(bodyBuilder.get()); - bodyBuilder->add(VPackValue(index)); - } - result.set(200, "200 OK", clientId); - result._body = bodyBuilder->toJson(); + << "Inquired " << resultBody->toJson(); + AgencyCommManager::MANAGER->release(std::move(connection), endpoint); break; } else { // Nothing known, so do a retry of the original operation: diff --git a/arangod/Agency/Agent.cpp b/arangod/Agency/Agent.cpp index 7e4d30810d..ad7aa99fce 100644 --- a/arangod/Agency/Agent.cpp +++ b/arangod/Agency/Agent.cpp @@ -258,14 +258,17 @@ void Agent::reportIn(std::string const& peerId, index_t index, size_t toLog) { // Update last acknowledged answer auto t = system_clock::now(); std::chrono::duration d = t - _lastAcked[peerId]; - if (peerId != id() && d.count() > _config.minPing() * _config.timeoutMult()) { - LOG_TOPIC(WARN, Logger::AGENCY) << "Last confirmation from peer " - << peerId << " was received more than minPing ago: " << d.count(); + auto secsSince = d.count(); + if (secsSince < 1.5e9 && peerId != id() + && secsSince > _config.minPing() * _config.timeoutMult()) { + LOG_TOPIC(WARN, Logger::AGENCY) + << "Last confirmation from peer " << peerId + << " was received more than minPing ago: " << secsSince; } - LOG_TOPIC(DEBUG, Logger::AGENCY) << "Setting _lastAcked[" - << peerId << "] to time " + LOG_TOPIC(DEBUG, Logger::AGENCY) + << "Setting _lastAcked[" << peerId << "] to time " << std::chrono::duration_cast( - t.time_since_epoch()).count(); + t.time_since_epoch()).count(); _lastAcked[peerId] = t; if (index > _confirmed[peerId]) { // progress this follower? @@ -278,7 +281,6 @@ void Agent::reportIn(std::string const& peerId, index_t index, size_t toLog) { } } - duration reportInTime = system_clock::now() - startTime; if (reportInTime.count() > 0.1) { LOG_TOPIC(DEBUG, Logger::AGENCY) @@ -945,8 +947,7 @@ trans_ret_t Agent::transient(query_t const& queries) { } -inquire_ret_t Agent::inquire(query_t const& query) { - inquire_ret_t ret; +write_ret_t Agent::inquire(query_t const& query) { // Note that we are leading (_constituent.leading()) if and only // if _constituent.leaderId == our own ID. Therefore, we do not have @@ -954,45 +955,27 @@ inquire_ret_t Agent::inquire(query_t const& query) { // look at the leaderID. auto leader = _constituent.leaderID(); if (leader != id()) { - return inquire_ret_t(false, leader); + return write_ret_t(false, leader); } + + write_ret_t ret; _tiLock.assertNotLockedByCurrentThread(); MUTEX_LOCKER(ioLocker, _ioLock); - auto si = _state.inquire(query); - - bool found = false; - auto builder = std::make_shared(); - { - VPackArrayBuilder b(builder.get()); - for (auto const& i : si) { - VPackArrayBuilder bb(builder.get()); - for (auto const& j : i) { - found = true; - VPackObjectBuilder bbb(builder.get()); - builder->add("index", VPackValue(j.index)); - builder->add("term", VPackValue(j.term)); - builder->add("query", VPackSlice(j.entry->data())); - } - } - } - - ret = inquire_ret_t(true, id(), builder); - - if (!found) { - return ret; - } + ret.indices = _state.inquire(query); // Check ongoing ones: for (auto const& s : VPackArrayIterator(query->slice())) { std::string ss = s.copyString(); if (isTrxOngoing(ss)) { - ret.result->clear(); - ret.result->add(VPackValue("ongoing")); + ret.indices.clear(); + break; } } + ret.accepted = true; + return ret; } diff --git a/arangod/Agency/Agent.h b/arangod/Agency/Agent.h index 4e5664daf2..0c6d58bda9 100644 --- a/arangod/Agency/Agent.h +++ b/arangod/Agency/Agent.h @@ -115,7 +115,7 @@ class Agent : public arangodb::Thread, read_ret_t read(query_t const&); /// @brief Inquire success of logs given clientIds - inquire_ret_t inquire(query_t const&); + write_ret_t inquire(query_t const&); /// @brief Attempt read/write transaction trans_ret_t transact(query_t const&) override; diff --git a/arangod/Agency/RestAgencyHandler.cpp b/arangod/Agency/RestAgencyHandler.cpp index cb0d4cb4b5..3f98658f9e 100644 --- a/arangod/Agency/RestAgencyHandler.cpp +++ b/arangod/Agency/RestAgencyHandler.cpp @@ -508,7 +508,7 @@ RestStatus RestAgencyHandler::handleInquire() { return RestStatus::DONE; } - inquire_ret_t ret; + write_ret_t ret; try { ret = _agent->inquire(query); } catch (std::exception const& e) { @@ -519,7 +519,22 @@ RestStatus RestAgencyHandler::handleInquire() { if (ret.accepted) { // I am leading - generateResult(rest::ResponseCode::OK, ret.result->slice()); + + Builder body; + bool failed = false; + { VPackObjectBuilder b(&body); + if (ret.indices.empty()) { + body.add("ongoing", VPackValue(true)); + } else { + body.add(VPackValue("results")); + { VPackArrayBuilder bb(&body); + for (auto const& index : ret.indices) { + body.add(VPackValue(index)); + failed = (failed || index == 0); + }}} + } + generateResult(failed ? rest::ResponseCode::PRECONDITION_FAILED : + rest::ResponseCode::OK, body.slice()); } else { // Redirect to leader diff --git a/arangod/Agency/State.cpp b/arangod/Agency/State.cpp index a1d096e38e..354dbcfd35 100644 --- a/arangod/Agency/State.cpp +++ b/arangod/Agency/State.cpp @@ -1250,7 +1250,7 @@ query_t State::allLogs() const { } -std::vector> State::inquire(query_t const& query) const { +std::vector State::inquire(query_t const& query) const { if (!query->slice().isArray()) { THROW_ARANGO_EXCEPTION_MESSAGE( 20001, @@ -1258,31 +1258,31 @@ std::vector> State::inquire(query_t const& query) const { + ". We got " + query->toJson()); } - std::vector> result; + std::vector result; size_t pos = 0; MUTEX_LOCKER(mutexLocker, _logLock); // Cannot be read lock (Compaction) for (auto const& i : VPackArrayIterator(query->slice())) { - + if (!i.isString()) { THROW_ARANGO_EXCEPTION_MESSAGE( 210002, std::string("ClientIds must be strings. On position ") - + std::to_string(pos) + " we got " + i.toJson()); + + std::to_string(pos++) + " we got " + i.toJson()); } - - std::vector transactions; + auto ret = _clientIdLookupTable.equal_range(i.copyString()); + index_t index = 0; for (auto it = ret.first; it != ret.second; ++it) { if (it->second < _log[0].index) { continue; } - transactions.push_back(_log.at(it->second-_cur)); + if (index < _log.at(it->second-_cur).index) { + index = _log.at(it->second-_cur).index; + } } - result.push_back(transactions); - - pos++; + result.push_back(index); } - + return result; } diff --git a/arangod/Agency/State.h b/arangod/Agency/State.h index f35e24e59b..ba12314b2b 100644 --- a/arangod/Agency/State.h +++ b/arangod/Agency/State.h @@ -101,7 +101,7 @@ class State { bool has(index_t, term_t) const; /// @brief Get log entries by client Id - std::vector> inquire(query_t const&) const; + std::vector inquire(query_t const&) const; /// @brief Get complete logged commands by lower and upper bounds. /// Default: [first, last] diff --git a/js/client/tests/agency/agency-test.js b/js/client/tests/agency/agency-test.js index 413a6bb993..84868d3bd4 100644 --- a/js/client/tests/agency/agency-test.js +++ b/js/client/tests/agency/agency-test.js @@ -259,7 +259,7 @@ function agencyTestSuite () { assertEqual(readAndCheck([["/a"]]), [{a:13}]); var res = accessAgency("write", [[{"/a":14},{"/a":12}]]); // fail precond {a:12} assertEqual(res.statusCode, 412); - assertEqual(res.bodyParsed, {"results":[0]}); + assertEqual(res.bodyParsed, {"results":[0]}); writeAndCheck([[{a:{op:"delete"}}]]); // fail precond oldEmpty res = accessAgency("write",[[{"a":14},{"a":{"oldEmpty":false}}]]); @@ -415,163 +415,83 @@ function agencyTestSuite () { testClientIds : function () { var res; + var cur; + res = accessAgency("write", [[{"a":12}]]).bodyParsed; + cur = res.results[0]; + + writeAndCheck([[{"/a":12}]]); var id = [guid(),guid(),guid(),guid(),guid(),guid(), guid(),guid(),guid(),guid(),guid(),guid(), guid(),guid(),guid()]; var query = [{"a":12},{"a":13},{"a":13}]; var pre = [{},{"a":12},{"a":12}]; + cur += 2; - writeAndCheck([[query[0], pre[0], id[0]]]); + var wres = writeAndCheck([[query[0], pre[0], id[0]]]); res = accessAgency("inquire",[id[0]]).bodyParsed; - assertEqual(res.length, 1); - assertEqual(res[0].length, 1); - assertEqual(res[0][0].query, query[0]); + assertEqual(res, {"results":[cur]}); + assertEqual(res, wres); - writeAndCheck([[query[1], pre[1], id[0]]]); + wres = writeAndCheck([[query[1], pre[1], id[0]]]); res = accessAgency("inquire",[id[0]]).bodyParsed; - assertEqual(res.length, 1); - assertEqual(res[0].length, 2); - assertEqual(res[0][0].query, query[0]); - assertEqual(res[0][1].query, query[1]); + assertEqual(res, {"results":[++cur]}); + assertEqual(res, wres); - res = accessAgency("write",[[query[1], pre[1], id[2]]]); - assertEqual(res.statusCode,412); - res = accessAgency("inquire",[id[2]]).bodyParsed; - assertEqual(res[0].length, 0); + wres = accessAgency("write",[[query[1], pre[1], id[2]]]); + assertEqual(wres.statusCode,412); + res = accessAgency("inquire",[id[2]]); + assertEqual(res.bodyParsed, {"results":[0]}); + assertEqual(res, wres); - res = accessAgency("write",[[query[0], pre[0], id[3]], - [query[1], pre[1], id[3]]]); + wres = accessAgency("write",[[query[0], pre[0], id[3]], + [query[1], pre[1], id[3]]]); + assertEqual(wres.statusCode,200); + cur += 2; + res = accessAgency("inquire",[id[3]]); + assertEqual(res.bodyParsed, {"results":[cur]}); + assertEqual(res.bodyParsed.results[0], wres.bodyParsed.results[1]); assertEqual(res.statusCode,200); - res = accessAgency("inquire",[id[3]]).bodyParsed; - assertEqual(res.length, 1); - assertEqual(res[0][0].query, query[0]); - assertEqual(res[0][1].query, query[1]); - - res = accessAgency("write",[[query[0], pre[0], id[4]], - [query[1], pre[1], id[4]], - [query[2], pre[2], id[4]]]); - assertEqual(res.statusCode,412); - res = accessAgency("inquire",[id[4]]).bodyParsed; - assertEqual(res.length, 1); - assertEqual(res[0].length, 2); - assertEqual(res[0][0].query, query[0]); - assertEqual(res[0][1].query, query[1]); - - res = accessAgency("write",[[query[0], pre[0], id[5]], - [query[2], pre[2], id[5]], - [query[1], pre[1], id[5]]]); - assertEqual(res.statusCode,412); - res = accessAgency("inquire",[id[5]]).bodyParsed; - assertEqual(res.length, 1); - assertEqual(res[0].length, 2); - assertEqual(res[0][0].query, query[0]); - assertEqual(res[0][1].query, query[1]); + + wres = accessAgency("write",[[query[0], pre[0], id[4]], + [query[1], pre[1], id[4]], + [query[2], pre[2], id[4]]]); + assertEqual(wres.statusCode,412); + cur += 2; + res = accessAgency("inquire",[id[4]]); + assertEqual(res.bodyParsed, {"results":[cur]}); + assertEqual(res.bodyParsed.results[0], wres.bodyParsed.results[1]); + assertEqual(res.statusCode,200); - res = accessAgency("write",[[query[2], pre[2], id[6]], - [query[0], pre[0], id[6]], - [query[1], pre[1], id[6]]]); - assertEqual(res.statusCode,412); - res = accessAgency("inquire",[id[6]]).bodyParsed; - assertEqual(res.length, 1); - assertEqual(res[0].length, 2); - assertEqual(res[0][0].query, query[0]); - assertEqual(res[0][1].query, query[1]); + wres = accessAgency("write",[[query[0], pre[0], id[5]], + [query[2], pre[2], id[5]], + [query[1], pre[1], id[5]]]); + assertEqual(wres.statusCode,412); + cur += 2; + res = accessAgency("inquire",[id[5]]); + assertEqual(res.bodyParsed, {"results":[cur]}); + assertEqual(res.bodyParsed.results[0], wres.bodyParsed.results[1]); + assertEqual(res.statusCode,200); - res = accessAgency("write",[[query[2], pre[2], id[7]], + wres = accessAgency("write",[[query[2], pre[2], id[6]], + [query[0], pre[0], id[6]], + [query[1], pre[1], id[6]]]); + assertEqual(wres.statusCode,412); + cur += 2; + res = accessAgency("inquire",[id[6]]); + assertEqual(res.bodyParsed, {"results":[cur]}); + assertEqual(res.bodyParsed.results[0], wres.bodyParsed.results[2]); + assertEqual(res.statusCode,200); + + wres = accessAgency("write",[[query[2], pre[2], id[7]], [query[0], pre[0], id[8]], [query[1], pre[1], id[9]]]); - assertEqual(res.statusCode,412); - res = accessAgency("inquire",[id[7],id[8],id[9]]).bodyParsed; - assertEqual(res.length, 3); - assertEqual(res[0].length, 0); - assertEqual(res[1].length, 1); - assertEqual(res[1][0].query, query[0]); - assertEqual(res[2].length, 1); - assertEqual(res[2][0].query, query[1]); + assertEqual(res.statusCode,200); + cur += 2; + res = accessAgency("inquire",[id[7],id[8],id[9]]); + assertEqual(res, wres); - res = accessAgency("inquire",[id[9],id[7],id[8]]).bodyParsed; - assertEqual(res.length, 3); - assertEqual(res[0].length, 1); - assertEqual(res[0][0].query, query[1]); - assertEqual(res[1].length, 0); - assertEqual(res[2].length, 1); - assertEqual(res[2][0].query, query[0]); - - res = accessAgency("inquire",[id[8],id[9],id[7]]).bodyParsed; - assertEqual(res.length, 3); - assertEqual(res[0].length, 1); - assertEqual(res[0][0].query, query[0]); - assertEqual(res[1].length, 1); - assertEqual(res[1][0].query, query[1]); - assertEqual(res[2].length, 0); - - res = accessAgency("inquire",[id[7],id[9],id[8]]).bodyParsed; - assertEqual(res.length, 3); - assertEqual(res[0].length, 0); - assertEqual(res[1].length, 1); - assertEqual(res[1][0].query, query[1]); - assertEqual(res[2].length, 1); - assertEqual(res[2][0].query, query[0]); - - res = accessAgency("inquire",[id[8],id[7],id[9]]).bodyParsed; - assertEqual(res.length, 3); - assertEqual(res[0].length, 1); - assertEqual(res[0][0].query, query[0]); - assertEqual(res[1].length, 0); - assertEqual(res[2].length, 1); - assertEqual(res[2][0].query, query[1]); - - res = accessAgency("inquire",[id[7],id[8],id[9]]).bodyParsed; - assertEqual(res.length, 3); - assertEqual(res[0].length, 0); - assertEqual(res[1].length, 1); - assertEqual(res[1][0].query, query[0]); - assertEqual(res[2].length, 1); - assertEqual(res[2][0].query, query[1]); - - res = accessAgency("inquire",[id[7],id[8],id[9]]).bodyParsed; - assertEqual(res.length, 3); - assertEqual(res[0].length, 0); - assertEqual(res[1].length, 1); - assertEqual(res[1][0].query, query[0]); - assertEqual(res[2].length, 1); - assertEqual(res[2][0].query, query[1]); - - res = accessAgency("write",[[query[2], pre[2], id[10]], - [query[0], pre[0], id[11]], - [query[1], pre[1], id[12]], - [query[0], pre[0], id[12]]]); - - res = accessAgency("inquire",[id[10],id[11],id[12]]).bodyParsed; - assertEqual(res.length, 3); - assertEqual(res[0].length, 0); - assertEqual(res[1].length, 1); - assertEqual(res[1][0].query, query[0]); - assertEqual(res[2].length, 2); - assertEqual(res[2][0].query, query[1]); - assertEqual(res[2][1].query, query[0]); - - res = accessAgency("transact",[[query[0], pre[0], id[13]], - [query[2], pre[2], id[13]], - [query[1], pre[1], id[13]], - ["a"]]); - - - assertEqual(res.statusCode,412); - assertEqual(res.bodyParsed.length, 4); - assertEqual(res.bodyParsed[0] > 0, true); - assertEqual(res.bodyParsed[1] > 0, true); - assertEqual(res.bodyParsed[2], {a : 13}); - assertEqual(res.bodyParsed[3], query[1]); - - res = accessAgency("inquire",[id[13]]).bodyParsed; - assertEqual(res.length, 1); - assertEqual(res[0].length, 2); - assertEqual(res[0][0].query, query[0]); - assertEqual(res[0][1].query, query[2]); - }, @@ -1045,7 +965,6 @@ function agencyTestSuite () { writeAndCheck(huge); assertEqual(readAndCheck([["a"]]), [{"a":20000}]); } - }; } From bb6889809abf9e66823df92da3044d6022700689 Mon Sep 17 00:00:00 2001 From: Jan Date: Fri, 24 Nov 2017 10:52:56 +0100 Subject: [PATCH 4/7] mention changed g++ support in CHANGELOG (#3799) --- CHANGELOG | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index b11c868eb6..fcbb29f3ad 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -12,7 +12,10 @@ devel * add readonly mode REST API -* allow compilation of ArangoDB source code with g++7 +* allow compilation of ArangoDB source code with g++ 7 + +* upgrade minimum required g++ compiler version to g++ 5.4 + That means ArangoDB source code will not compile with g++ 4.x or g++ < 5.4 anymore. * AQL: during a traversal if a vertex is not found. It will not print an ERROR to the log and continue with a NULL value, but will register a warning at the query and continue with a NULL value. From bd1a2d6cceb0a5f30a6045be05232a68bdc669b0 Mon Sep 17 00:00:00 2001 From: Jan Date: Fri, 24 Nov 2017 11:42:09 +0100 Subject: [PATCH 5/7] fix shutdown deadlock (#3796) --- arangod/MMFiles/MMFilesLogfileManager.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/arangod/MMFiles/MMFilesLogfileManager.cpp b/arangod/MMFiles/MMFilesLogfileManager.cpp index 6b56cc888e..f80e968959 100644 --- a/arangod/MMFiles/MMFilesLogfileManager.cpp +++ b/arangod/MMFiles/MMFilesLogfileManager.cpp @@ -527,7 +527,9 @@ void MMFilesLogfileManager::unprepare() { LOG_TOPIC(TRACE, arangodb::Logger::FIXME) << "stopping collector thread"; _collectorThread->forceStop(); while (_collectorThread->isRunning()) { + locker.unlock(); usleep(10000); + locker.lock(); } delete _collectorThread; _collectorThread = nullptr; From 99b7b5080b48ea38a1471cedebf8620129c25081 Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Fri, 24 Nov 2017 11:47:24 +0100 Subject: [PATCH 6/7] Fixed CAS in AuthInfo update in cluster. Should now be more reliable. (#3787) --- arangod/VocBase/AuthInfo.cpp | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/arangod/VocBase/AuthInfo.cpp b/arangod/VocBase/AuthInfo.cpp index 0cf1435bd5..0311ef40cf 100644 --- a/arangod/VocBase/AuthInfo.cpp +++ b/arangod/VocBase/AuthInfo.cpp @@ -398,34 +398,16 @@ void AuthInfo::reloadAllUsers() { // tell other coordinators to reload as well AgencyComm agency; + + AgencyWriteTransaction incrementVersion({ + AgencyOperation("Sync/UserVersion", AgencySimpleOperationType::INCREMENT_OP) + }); + int maxTries = 10; while (maxTries-- > 0) { - AgencyCommResult commRes = agency.getValues("Sync/UserVersion"); - - if (!commRes.successful()) { - // Error in communication, note that value not found is not an error - LOG_TOPIC(TRACE, Logger::AUTHENTICATION) - << "AuthInfo: no agency communication"; - break; - } - - VPackSlice oldVal = commRes.slice()[0].get( - {AgencyCommManager::path(), "Sync", "UserVersion"}); - - if (!oldVal.isInteger()) { - LOG_TOPIC(ERR, Logger::AUTHENTICATION) - << "Sync/UserVersion is not a number"; - THROW_ARANGO_EXCEPTION(TRI_ERROR_BAD_PARAMETER); - } - - VPackBuilder newVal; - newVal.add(VPackValue(oldVal.getUInt() + 1)); - commRes = - agency.casValue("Sync/UserVersion", oldVal, newVal.slice(), 0.0, - AgencyCommManager::CONNECTION_OPTIONS._requestTimeout); - - if (commRes.successful()) { + AgencyCommResult result = agency.sendTransactionWithFailover(incrementVersion); + if (result.successful()) { return; } } From 0911dca9106238dfb106c0bf0c2409fece6231ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Max=20Neunh=C3=B6ffer?= Date: Fri, 24 Nov 2017 11:57:42 +0100 Subject: [PATCH 7/7] Check if download of syncer and starter during build worked. (#3783) --- Installation/Jenkins/build.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Installation/Jenkins/build.sh b/Installation/Jenkins/build.sh index 89aeb0414f..d4fba0f23e 100755 --- a/Installation/Jenkins/build.sh +++ b/Installation/Jenkins/build.sh @@ -717,6 +717,10 @@ if test -n "${DOWNLOAD_SYNCER_USER}"; then rm -f "${FN}" curl -LJO# -H 'Accept: application/octet-stream' "${SYNCER_URL}?access_token=${OAUTH_TOKEN}" || \ ${SRC}/Installation/Jenkins/curl_time_machine.sh "${SYNCER_URL}?access_token=${OAUTH_TOKEN}" "${FN}" + if ! test -s "${FN}" ; then + echo "failed to download syncer binary - aborting!" + exit 1 + fi mv "${FN}" "${BUILD_DIR}/${TN}" ${MD5} < "${BUILD_DIR}/${TN}" | ${SED} "s; .*;;" > "${BUILD_DIR}/${FN}-${SYNCER_REV}" OLD_MD5=$(cat "${BUILD_DIR}/${FN}-${SYNCER_REV}") @@ -725,6 +729,9 @@ if test -n "${DOWNLOAD_SYNCER_USER}"; then else echo "using already downloaded ${BUILD_DIR}/${FN}-${SYNCER_REV} MD5: ${OLD_MD5}" fi + else + echo "failed to find download URL for arangosync - aborting!" + exit 1 fi # Log out again: @@ -771,6 +778,10 @@ if test "${DOWNLOAD_STARTER}" == 1; then if ! test -f "${BUILD_DIR}/${FN}-${STARTER_REV}"; then rm -f "${FN}" curl -LO "${STARTER_URL}" + if ! test -s "${FN}" ; then + echo "failed to download starter binary - aborting!" + exit 1 + fi mv "${FN}" "${BUILD_DIR}/${TN}" ${MD5} < "${BUILD_DIR}/${TN}" | ${SED} "s; .*;;" > "${BUILD_DIR}/${FN}-${STARTER_REV}" chmod a+x "${BUILD_DIR}/${TN}" @@ -779,6 +790,9 @@ if test "${DOWNLOAD_STARTER}" == 1; then else echo "using already downloaded ${BUILD_DIR}/${FN}-${STARTER_REV} MD5: ${OLD_MD5}" fi + else + echo "failed to find download URL for arangodb starter - aborting!" + exit 1 fi THIRDPARTY_BIN=("${THIRDPARTY_BIN}${BUILD_DIR}/${TN}") fi