ArielGlenn has submitted this change and it was merged.

Change subject: beta: autoupdate should restart parsoid
......................................................................


beta: autoupdate should restart parsoid

The script runs as jenkins-deploy user on deployment-bastion. It ssh to
deployment-parsoid2 to restart the parsoid daemon there as root. Added a
check to make sure parsoid is running there.

bug: 57233
Change-Id: Ie3f0a46d99a2e02b9a943bcd1d4a699a36631aee
---
M files/misc/beta/wmf-beta-autoupdate.py
1 file changed, 60 insertions(+), 0 deletions(-)

Approvals:
  ArielGlenn: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/files/misc/beta/wmf-beta-autoupdate.py 
b/files/misc/beta/wmf-beta-autoupdate.py
index 044c38f..3855157 100755
--- a/files/misc/beta/wmf-beta-autoupdate.py
+++ b/files/misc/beta/wmf-beta-autoupdate.py
@@ -13,11 +13,15 @@
 import argparse
 import logging
 import os.path
+import time
 import subprocess
 import sys
 
 PATH_MWCORE = '/home/wikipedia/common/php-master'
 PATH_MWEXT = '/home/wikipedia/common/php-master/extensions'
+
+# Beta cluster instance used to run Parsoid daemon
+PARSOID_INSTANCE = 'deployment-parsoid2.pmtpa.wmflabs'
 
 
 def main():
@@ -48,6 +52,9 @@
         logging.getLevelName(logging.ERROR))
 
     logger = logging.getLogger('main')
+
+    parsoid_pre = parsoid_head_ts()
+
     logger.info("Starting updating tasks...")
     exit_codes = [
         pull_mediawiki(),
@@ -56,6 +63,16 @@
         update_parsoid_deps(),
         update_l10n(),
     ]
+
+    parsoid_post = parsoid_head_ts()
+    logger.debug('Parsoid HEAD timestamps: %s -> %s',
+                 parsoid_pre, parsoid_post)
+    if parsoid_post != parsoid_pre:
+        logger.info("Restarting updated Parsoid code base")
+        exit_codes.append(restart_parsoid())
+    else:
+        logger.debug('Skipping Parsoid restart since code has not changed')
+
     logger.info("Executions completed %s", exit_codes)
 
     final_exit = 0
@@ -90,6 +107,18 @@
     return parser.parse_args()
 
 
+def git_head_ts(git_dir):
+    proc = subprocess.check_output(
+        ['git', '--git-dir', git_dir, 'log',
+         '--pretty=tformat:%ct', '-1', 'HEAD'])
+    return proc.rstrip('\n')
+
+
+def parsoid_head_ts():
+    """Returns timestamp of the HEAD committer date"""
+    return git_head_ts(os.path.join(PATH_MWEXT, 'Parsoid/.git'))
+
+
 def pull_mediawiki():
     """Updates MediaWiki core"""
     return runner(name='mwcore', path=PATH_MWCORE, cmd=['git', 'pull'])
@@ -113,6 +142,37 @@
         'npm', 'install', '--verbose', '--color', 'always'])
 
 
+def restart_parsoid():
+    """Restart parsoid daemon via ssh"""
+    logger = logging.getLogger(__name__)
+    logger.info("restarting parsoid on %s", PARSOID_INSTANCE)
+
+    parsoid_restart_cmd = [
+        'ssh', PARSOID_INSTANCE,
+        'sudo -u root /etc/init.d/parsoid restart']
+    logger.info("Executing %s", parsoid_restart_cmd)
+    try:
+        cmd = subprocess.Popen(args=parsoid_restart_cmd)
+    except OSError, exception:
+        logger.error(exception)
+        return False
+
+    logger.info('Waiting for parsoid to launch...')
+    time.sleep(5)
+    logger.info('Checking parsoid is running...')
+
+    try:
+        cmd = subprocess.Popen([
+            'ssh', PARSOID_INSTANCE,
+            '/etc/init.d/parsoid', 'status'])
+        status_exit_code = cmd.wait()
+    except OSError, exception:
+        logger.error(exception)
+        return False
+
+    return status_exit_code
+
+
 def update_l10n():
     """Localisation cache update"""
     return runner(name='mw-update-l10n', cmd=['mw-update-l10n'])

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ie3f0a46d99a2e02b9a943bcd1d4a699a36631aee
Gerrit-PatchSet: 4
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Hashar <has...@free.fr>
Gerrit-Reviewer: ArielGlenn <ar...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to