Mattflaschen has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/262866

Change subject: Fix various ordering issues
......................................................................

Fix various ordering issues

* Add a mechanism for certain wikis to run first in foreachwiki
  I was seeing an issue where cirrustestwiki ran before commonswiki
  on the initial update.php.  It failed because it depended on a
  global table that commonswiki creates in its first update.php run.

* Add a couple additional dependencies to control ordering.
  E.g. make sure all settings are in place before update.php is run.

* Fix foreachwiki call for AntiSpoof (pre-existing issue shown
  by the foreachwiki error handling fix in parent commit)

Change-Id: I719ae21c27de410cf477eeafb20c86e278e7525a
---
M puppet/hieradata/common.yaml
M puppet/manifests/site.pp
A puppet/modules/mediawiki/files/multiwiki/priority-empty/README
M puppet/modules/mediawiki/manifests/import/text.pp
M puppet/modules/mediawiki/manifests/init.pp
M puppet/modules/mediawiki/manifests/multiwiki.pp
M puppet/modules/mediawiki/manifests/wiki.pp
M puppet/modules/mediawiki/templates/docroot/w/dblist.php.erb
M puppet/modules/role/manifests/antispoof.pp
M puppet/modules/role/manifests/commons.pp
10 files changed, 55 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/vagrant 
refs/changes/66/262866/1

diff --git a/puppet/hieradata/common.yaml b/puppet/hieradata/common.yaml
index af91aa7..c25e9b1 100644
--- a/puppet/hieradata/common.yaml
+++ b/puppet/hieradata/common.yaml
@@ -217,6 +217,7 @@
 
 mediawiki::multiwiki::base_domain: '.wiki.local.wmftest.net'
 mediawiki::multiwiki::script_dir: "%{hiera('mediawiki::apache::docroot')}/w"
+mediawiki::multiwiki::wiki_priority_dir: 
"%{hiera('mediawiki::settings_dir')}/priority"
 mediawiki::multiwiki::settings_root: 
"%{hiera('mediawiki::settings_dir')}/wikis"
 
 mediawiki::parsoid::dir: "%{hiera('mwv::services_dir')}/parsoid"
diff --git a/puppet/manifests/site.pp b/puppet/manifests/site.pp
index fe6ae67..e67bd18 100644
--- a/puppet/manifests/site.pp
+++ b/puppet/manifests/site.pp
@@ -16,7 +16,7 @@
 
 # Human-readable constants which may be used in lieu of literal numbers
 # for specifying loading priority of resource types which support this
-# notion (like mediawiki::extension and mediawiki::settings).
+# notion (like mediawiki::extension, mediawiki::settings, and mediawiki::wiki).
 $LOAD_FIRST  = 0
 $LOAD_EARLY  = 5
 $LOAD_NORMAL = 10
diff --git a/puppet/modules/mediawiki/files/multiwiki/priority-empty/README 
b/puppet/modules/mediawiki/files/multiwiki/priority-empty/README
new file mode 100644
index 0000000..14ab691
--- /dev/null
+++ b/puppet/modules/mediawiki/files/multiwiki/priority-empty/README
@@ -0,0 +1,4 @@
+This directory is managed by Puppet.
+
+The purpose is to control the ordering of the various wikis for scripts that
+act on all of them.
diff --git a/puppet/modules/mediawiki/manifests/import/text.pp 
b/puppet/modules/mediawiki/manifests/import/text.pp
index 240949f..3583eb3 100644
--- a/puppet/modules/mediawiki/manifests/import/text.pp
+++ b/puppet/modules/mediawiki/manifests/import/text.pp
@@ -64,11 +64,13 @@
         require     => [
             Mediawiki::Wiki[$wiki],
             Exec["${db_name}_copy_LocalSettings"],
+            Exec['update_all_databases'],
         ],
     }
 
     # Add extensions before importing text (bug T92036)
     MediaWiki::Extension <| |> -> Mediawiki::Import::Text <| |>
+
     # Run sql before importing text
     Mysql::Sql <| |> -> Mediawiki::Import::Text <| |>
 }
diff --git a/puppet/modules/mediawiki/manifests/init.pp 
b/puppet/modules/mediawiki/manifests/init.pp
index 7501e8b..b7f2d95 100644
--- a/puppet/modules/mediawiki/manifests/init.pp
+++ b/puppet/modules/mediawiki/manifests/init.pp
@@ -190,6 +190,13 @@
         refreshonly => true,
     }
 
+    # Make sure settings which will affect update_all_databases are
+    # in place before it runs.
+    Mediawiki::Settings <| |> -> Exec['update_all_databases']
+
+    # Make sure all wikis are defined before it runs.
+    Mediawiki::Wiki <| |> -> Exec['update_all_databases']
+
     php::composer::install { $dir:
         require => Git::Clone['mediawiki/core'],
     }
diff --git a/puppet/modules/mediawiki/manifests/multiwiki.pp 
b/puppet/modules/mediawiki/manifests/multiwiki.pp
index 1afcacd..d810fb1 100644
--- a/puppet/modules/mediawiki/manifests/multiwiki.pp
+++ b/puppet/modules/mediawiki/manifests/multiwiki.pp
@@ -16,12 +16,18 @@
 # [*script_dir*]
 #   Apache vhost document root.
 #
+# [*wiki_priority_dir*]
+#   The directory used to control wiki priority.  This is primarily
+#   intended for update_all_databases, but affects alldbs and all uses
+#   of foreachwiki
+#
 # [*settings_root*]
 #   Location of settings files.
 #
 class mediawiki::multiwiki(
     $base_domain,
     $script_dir,
+    $wiki_priority_dir,
     $settings_root,
 ) {
 
@@ -151,6 +157,16 @@
         target => "${::mediawiki::dir}/CREDITS",
     }
 
+    file { $wiki_priority_dir:
+        ensure  => directory,
+        owner   => $::share_owner,
+        group   => $::share_group,
+        recurse => true,
+        purge   => true,
+        force   => true,
+        source  => 'puppet:///modules/mediawiki/multiwiki/priority-empty',
+    }
+
     file { '/usr/local/bin/multiversion-install':
         ensure  => present,
         owner   => 'root',
diff --git a/puppet/modules/mediawiki/manifests/wiki.pp 
b/puppet/modules/mediawiki/manifests/wiki.pp
index fbe17fb..f83d724 100644
--- a/puppet/modules/mediawiki/manifests/wiki.pp
+++ b/puppet/modules/mediawiki/manifests/wiki.pp
@@ -58,6 +58,12 @@
 # [*server_url*]
 #   Full base URL of host (example: 'http://mywiki.net:8080').
 #
+# [*primary_wiki*]
+#   Whether this is the primary wiki (defaults false)
+#
+# [*priority*]
+#   Position of this wiki in foreachwiki.  Uses the scale of
+#   the LOAD_ constants from site.php.  Default is $LOAD_NORMAL.
 define mediawiki::wiki(
     $wiki_name    = $title,
     $db_name      = "${title}wiki",
@@ -71,6 +77,7 @@
     $upload_path  = "/${title}images",
     $server_url   = 
"http://${title}${::mediawiki::multiwiki::base_domain}${::port_fragment}";,
     $primary_wiki = false,
+    $priority     = $::LOAD_NORMAL,
 ) {
     include ::mwv
     include ::mediawiki
@@ -132,6 +139,13 @@
         user        => 'www-data',
     }
 
+    $priority_filename = sprintf('%s/%.2d-%s-dbConf.php', 
$::mediawiki::multiwiki::wiki_priority_dir, $priority, $db_name)
+    file { $priority_filename:
+        ensure  => present,
+        mode    => '0644',
+        content => template('mediawiki/wiki/dbConf.php.erb'),
+    }
+
     File {
         owner   => $::share_owner,
         group   => $::share_group,
@@ -148,12 +162,6 @@
         ensure  => present,
         mode    => '0644',
         content => template('mediawiki/wiki/wgConf.php.erb'),
-    }
-
-    file { "${settings_root}/dbConf.php":
-        ensure  => present,
-        mode    => '0644',
-        content => template('mediawiki/wiki/dbConf.php.erb'),
     }
 
     file { "/etc/logrotate.d/mediawiki_${db_name}_debug_log":
diff --git a/puppet/modules/mediawiki/templates/docroot/w/dblist.php.erb 
b/puppet/modules/mediawiki/templates/docroot/w/dblist.php.erb
index 2a3bed4..2f8bd6d 100644
--- a/puppet/modules/mediawiki/templates/docroot/w/dblist.php.erb
+++ b/puppet/modules/mediawiki/templates/docroot/w/dblist.php.erb
@@ -6,6 +6,6 @@
 $wgLocalDatabases = array();
 $wgCentralAuthAutoLoginWikis = array();
 $wgMediawikiRoot = array();
-foreach ( glob( '<%= @settings_root %>/*/dbConf.php' ) as $file ) {
+foreach ( glob( '<%= @wiki_priority_dir %>/*dbConf.php' ) as $file ) {
        require $file;
 }
diff --git a/puppet/modules/role/manifests/antispoof.pp 
b/puppet/modules/role/manifests/antispoof.pp
index d6d9fae..5da6bac 100644
--- a/puppet/modules/role/manifests/antispoof.pp
+++ b/puppet/modules/role/manifests/antispoof.pp
@@ -8,7 +8,7 @@
     }
 
     exec { 'populate_spoofuser':
-        command     => "/usr/local/bin/foreachwiki 
${::mediawiki::dir}/extensions/AntiSpoof/maintenance/batchAntiSpoof.php",
+        command     => "/usr/local/bin/foreachwiki 
extensions/AntiSpoof/maintenance/batchAntiSpoof.php",
         refreshonly => true,
         user        => 'www-data',
         require     => Mediawiki::Extension['AntiSpoof'],
diff --git a/puppet/modules/role/manifests/commons.pp 
b/puppet/modules/role/manifests/commons.pp
index 3c6b75a..507f020 100644
--- a/puppet/modules/role/manifests/commons.pp
+++ b/puppet/modules/role/manifests/commons.pp
@@ -14,6 +14,7 @@
 
     mediawiki::wiki { 'commons':
         upload_dir => $upload_dir,
+        priority   => $::LOAD_EARLY,
     }
     role::thumb_on_404::multiwiki { 'commons': }
 
@@ -42,4 +43,11 @@
         user    => 'www-data',
         require => Mediawiki::Extension['GlobalUsage'],
     }
+
+    # Make sure all Puppet settings are defined before running this
+    # maintenance script.
+    #
+    # TODO: Make a maintenance script resource so this is done
+    # for all maintenance scripts.
+    Mediawiki::Settings <| |> -> Exec['refresh globalusage table']
 }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I719ae21c27de410cf477eeafb20c86e278e7525a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/vagrant
Gerrit-Branch: master
Gerrit-Owner: Mattflaschen <mflasc...@wikimedia.org>

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

Reply via email to