Merge "Optimise the backup node choosing method" into release/proposed/2019.2.0
diff --git a/galera-database-backup-pipeline.groovy b/galera-database-backup-pipeline.groovy
index 8239aa6..466c7ea 100644
--- a/galera-database-backup-pipeline.groovy
+++ b/galera-database-backup-pipeline.groovy
@@ -8,6 +8,8 @@
primaryNodes = []
syncedNodes = []
galeraMembers = []
+maxValue = 0
+masterNode = "none"
if (common.validInputParam('OVERRIDE_BACKUP_NODE')) {
backupNode = OVERRIDE_BACKUP_NODE
@@ -37,8 +39,29 @@
}
}
stage('Choose backup node') {
- backupNode = primaryNodes.sort()[0] // STEP 2 - Use node with lowest hostname number (last option if everything previous fails)
- }
+ primaryNodes = primaryNodes.sort()
+ for (node in primaryNodes.reverse()) { // Looking for the node with the highest mysql_queries value
+ try {
+ queriesValue = galera.getWsrepParameters(pepperEnv, node, "Queries", false).get('Queries')
+ common.infoMsg("Queries for ${node} - ${queriesValue}")
+ if (queriesValue >= maxValue) {
+ maxValue = queriesValue
+ masterNode = node
+ common.infoMsg("Current main node in galera cluster: ${masterNode}")
+ }
+ } catch (Exception e) {
+ common.warningMsg("Minion '${node}' unavailable.")
+ }
+ }
+ if (masterNode.equals("none")) {
+ backupNode = primaryNodes[-1] // STEP 2 - Use node with highest hostname number (last option if everything previous fails)
+ } else {
+ common.infoMsg("Master node is ${masterNode}.")
+ primaryNodes = primaryNodes.minus(masterNode)
+ backupNode = primaryNodes[-1]
+ }
+ common.infoMsg("Choose backup node as ${backupNode}.")
+ }
} else {
stage('Choose backup node') {
common.infoMsg("Backup node backup was overriden to ${backupNode}.")
@@ -72,4 +95,4 @@
}
}
}
-}
\ No newline at end of file
+}