]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Option to pre-load a plugin with checkschema script
authorEvan Prodromou <evan@status.net>
Thu, 5 May 2011 04:05:25 +0000 (21:05 -0700)
committerEvan Prodromou <evan@status.net>
Thu, 5 May 2011 04:05:25 +0000 (21:05 -0700)
One of the problems we've had with running large-scale hosting systems
for StatusNet is enabling new plugins. If the plugin is not enabled,
its database tables are not checked at script time. Conversely, if it
is enabled, it may take several hours to run checkschema for tens of
thousands of sites -- during which time users might see DB errors.

A new argument to checkschema lets it pre-load one or more plugins
before checking the schema. This lets us prepare the plugins' database
tables before they're used in production. In a multihome environment,
this can be combined with tags to gradually roll out a new plugin.

In the config file, a stanza like:

   $site = Status_network::getFromHostname(...);

   if ($site->hasTag('fooenabled')) {
      addPlugin('Foo');
   }

...will only enable the plugin on certain sites. Meanwhile, a bash
script like this should gradually enable the plugin:

   # For all sites...
   for site in `php allsites.php`; do
       # Update the schema for the Foo plugin
       php checkschema.php -s$site.wildcard -xFoo;
       # Enable the Foo plugin
       php settag.php -s$site.wildcard fooenabled;
   done

scripts/checkschema.php

index 73fd74302c6ad1230794f5b4ba12e897cb608298..cec5773683ef8ef52d7c7b13ab615fe896a2163c 100755 (executable)
@@ -2,7 +2,7 @@
 <?php
 /*
  * StatusNet - a distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
+ * Copyright (C) 2008-2011 StatusNet, Inc.
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
 
 define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
 
+$shortoptions = 'x::';
+$longoptions = array('extensions=');
+
 $helptext = <<<END_OF_CHECKSCHEMA_HELP
+php checkschema.php [options]
 Gives plugins a chance to update the database schema.
 
+    -x --extensions=     Comma-separated list of plugins to load before checking
+
+
 END_OF_CHECKSCHEMA_HELP;
 
 require_once INSTALLDIR.'/scripts/commandline.inc';
@@ -41,4 +48,17 @@ foreach (tableDefs() as $table => $def) {
 }
 $schemaUpdater->checkSchema();
 
+if (have_option('x', 'extensions')) {
+    $ext = trim(get_option_value('x', 'extensions'));
+    $exts = explode(',', $ext);
+    foreach ($exts as $plugin) {
+        try {
+            addPlugin($plugin);
+        } catch (Exception $e) {
+            print $e->getMessage()."\n";
+            exit(1);
+        }
+    }
+}
+
 Event::handle('CheckSchema');