mirror of https://gitee.com/bigwinds/arangodb
At create database wait for synchronous replication to kick in.
This commit is contained in:
parent
127a642943
commit
6dba665a34
|
@ -155,6 +155,33 @@
|
||||||
return collectionExists(name);
|
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
|
// 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();
|
return upgradeDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue