1
0
Fork 0

At create database wait for synchronous replication to kick in.

This commit is contained in:
Max Neunhoeffer 2016-06-14 15:40:55 +02:00
parent 127a642943
commit 6dba665a34
1 changed files with 47 additions and 0 deletions

View File

@ -155,6 +155,33 @@
return collectionExists(name);
}
function waitForSyncRepl(dbName, collName) {
console.debug("waitForSyncRepl:", dbName, collName);
var cinfo = global.ArangoClusterInfo.getCollectionInfo(dbName, collName);
var count = 120;
while (--count > 0) {
var shards = Object.keys(cinfo.shards);
var ccinfo = shards.map(function(s) {
return global.ArangoClusterInfo.getCollectionInfoCurrent(dbName,
collName, s).servers;
});
console.debug("waitForSyncRepl", shards, cinfo.shards, ccinfo);
var ok = true;
for (var i = 0; i < shards.length; ++i) {
if (cinfo.shards[shards[i]].length !== ccinfo[i].length) {
ok = false;
}
}
if (ok) {
console.debug("waitForSyncRepl: OK");
return true;
}
require("internal").wait(1.0);
}
console.warn("waitForSyncRepl: BAD");
return false;
}
////////////////////////////////////////////////////////////////////////////////
// adds a task
///
@ -773,6 +800,26 @@
}
});
// waitForSyncReplication
addTask({
name: "waitSyncReplSettle",
description: "wait until synchronous replication has settled",
system: DATABASE_ALL,
cluster: [CLUSTER_COORDINATOR_GLOBAL],
database: [DATABASE_INIT],
task: function() {
var dbName = db._name();
var colls = db._collections();
colls = colls.filter(c => c.name()[0] === "_");
colls.forEach(function(c) {
waitForSyncRepl(dbName, c.name());
});
return true;
}
});
return upgradeDatabase();
}