Anomie has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/397913 )

Change subject: Add --replica parameter to sql script
......................................................................

Add --replica parameter to sql script

I've often had a need to connect to a specific replica for debugging.
Let's make it easy to do so.

Also, add a --list-replicas parameter to list those replica names.

Change-Id: Ic08bdf59693feec8cb75ea3954cb5e9de09f8fb2
---
M modules/scap/files/sql
1 file changed, 28 insertions(+), 3 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/13/397913/1

diff --git a/modules/scap/files/sql b/modules/scap/files/sql
index 01fe9c9..46f84a7 100755
--- a/modules/scap/files/sql
+++ b/modules/scap/files/sql
@@ -11,7 +11,7 @@
 shift
 
 if [ -z "$db" ] || [ "$db" = "--help" ]; then
-    echo 'Usage: sql [--write | --group group] <dbname> [mysqloptions]'
+    echo 'Usage: sql [--write | --group group | --replica name | 
--list-replicas] <dbname> [mysqloptions]'
     exit 0
 elif [ "$db" = "--write" ]; then
     hostcode="echo \$lb->getServerName(0);"
@@ -28,7 +28,27 @@
         echo "group must be a string containing only lowercase letters"
         exit 1
     fi
-    hostcode="\$index = \$lb->getReaderIndex('"$group"'); if(\$index === 
false) exit(101); echo \$lb->getServerName(\$index);"
+    hostcode="\$index = \$lb->getReaderIndex('$group'); if(\$index === false) 
exit(101); echo \$lb->getServerName(\$index);"
+
+    # Database is the next param
+    db=$1
+    shift
+elif [ "$db" = "--replica" ]; then
+    # Explicitly asked for a replica by name
+    name=$1
+    shift
+
+    if echo $name | grep -qvP '^[a-z0-9:]+\z'; then
+        echo "replica name must be a string containing only lowercase letters, 
numbers, and colons"
+        exit 1
+    fi
+    hostcode="\$serverCount = \$lb->getServerCount(); for ( \$i = 0; \$i < 
\$serverCount; ++\$i ) { if ( \$lb->getServerName(\$i) === '$name' ) break; } 
if ( \$i >= \$serverCount ) exit(102); echo \$lb->getServerName(\$i);"
+
+    # Database is the next param
+    db=$1
+    shift
+elif [ "$db" = "--list-replicas" ]; then
+    hostcode="\$serverCount = \$lb->getServerCount(); for ( \$i = 0; \$i < 
\$serverCount; ++\$i ) { echo ( \$i ? ' ' : '' ) . \$lb->getServerName(\$i); } 
exit(103);"
 
     # Database is the next param
     db=$1
@@ -55,13 +75,18 @@
 else
     lbcode="\$lb = wfGetLB();"
 fi
-host=`echo $lbcode $hostcode | /usr/local/bin/mwscript eval.php 
--wiki="$lookupdb"`
+host=`echo "$lbcode $hostcode" | /usr/local/bin/mwscript eval.php 
--wiki="$lookupdb"`
 
 exitCode=$?
 if [ $exitCode -ne 0 ]; then
     # PHP error, probably an invalid DB or group
     if [ $exitCode -eq 101 ]; then
         echo "Error looking up group \"$group\"" 1>&2
+    elif [ $exitCode -eq 102 ]; then
+        echo "Error looking up replica \"$name\"" 1>&2
+    elif [ $exitCode -eq 103 ]; then
+        echo "$host"
+        exit 1
     else
         echo "Error looking up DB \"$db\"" 1>&2
     fi

-- 
To view, visit https://gerrit.wikimedia.org/r/397913
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic08bdf59693feec8cb75ea3954cb5e9de09f8fb2
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Anomie <bjor...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to