From 6181e7512ffa1376ed8c8234fe957af8ea1cc050 Mon Sep 17 00:00:00 2001 From: Joe <joe@incal.net> Date: Sun, 13 Nov 2011 10:30:49 +0100 Subject: [PATCH] Workaround for the demented hyperdb bug --- tools/noblogs-new-topology.php | 54 +++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 23 deletions(-) diff --git a/tools/noblogs-new-topology.php b/tools/noblogs-new-topology.php index f4d2930..36b1cee 100755 --- a/tools/noblogs-new-topology.php +++ b/tools/noblogs-new-topology.php @@ -1,34 +1,40 @@ #!/opt/noblogs/cron/php-noblogs <?php - -// Load wordpress api. -define('WP_CACHE',false); -/** Setup WordPress environment */ -require_once('wp-load.php'); -require_once('db-config.php'); - /* Parse command line options */ -$opts = getopt('',array('no-database', 'calc-size')); +$opts = getopt('',array('no-database', 'calc-size', 'db-only')); if (array_key_exists('calc-size', $opts)) { $opts['no-database'] = true; $g_added_size = array(); } +$new_topology = array_pop($argv); +$old_topology = array_pop($argv); +if (!($new_topology && $old_topology)) { + usage(); + exit(-1); +} + +// Get all blogs +define('WP_CACHE',false); +require_once('wp-load.php'); +require_once('db-config.php'); +$blogs = get_all_blogs(); $n_hashmap = new Flexihash(); -$new_map = noblogs_load_backends(array_pop($argv), $n_hashmap); +$new_map = noblogs_load_backends($new_topology, $n_hashmap); $o_hashmap = new Flexihash(); -$old_map = noblogs_load_backends(array_pop($argv), $o_hashmap); +$old_map = noblogs_load_backends($old_topology, $o_hashmap); + + -$blogs = get_all_blogs(); foreach ($blogs as $blog) { $blog_id = $blog->blog_id; - $old_params = fhash($blog_id, $old_map); + $old_params = fhash($blog_id, $old_map, $o_hashmap); $old_dburi = mysqlurl($old_params); - $new_params = fhash($blog_id, $new_map); + $new_params = fhash($blog_id, $new_map, $n_hashmap); $new_dburi = mysqlurl($new_params); if ($new_counts[$new_params['host']]) { @@ -39,20 +45,22 @@ foreach ($blogs as $blog) { if ($old_dburi != $new_dburi) { echo "echo moving blog $blog_id from " . $old_params['host'] . " to " . $new_params['host'] . "\n"; - if ( array_key_exists('no-database', $opts) ) { + if ( !array_key_exists('no-database', $opts) ) { echo "tables=\$(mysql " . mysqlopts($old_params) . " " . $old_params['db'] . " -NBe \"show tables like 'wp\\_" . $blog_id . "\\_%'\")\n"; echo "mysqldump --opt " . mysqlopts($old_params) . " " . $old_params['db'] . " \${tables} \\\n"; echo " | mysql " . mysqlopts($new_params) . " " . $new_params['db'] . "\n"; } + if (!array_key_exists('db-only',$opts)) { if (array_key_exists('calc-size', $opts)) { - $cmd = escapeshellargs(sprintf("ssh root@%s du -sk /opt/noblogs/www/wp-content/blogs.dir/%d", $old_params['host'], $blog_id)); - list($size, $dummy) = explode("\t",exec($cmd, $ret)); +# $cmd = sprintf("ssh root@%s du -sk /opt/noblogs/www/wp-content/blogs.dir/%d", $old_params['host'], $blog_id); + $cmd = sprintf("du -sk /opt/noblogs/www/wp-content/blogs.dir/%d", $blog_id); + list($size, $dummy) = explode("\t",exec($cmd, $ret)); $g_added_size[$new_params['host']] += $size; } else { - printf("rsync -avz --delete root@%s:/opt/noblogs/www/wp-content/blogs.dir/%d root@%s:/opt/noblogs/www/wp-content/blogs.dir/%d\n", $old_params['host'], $blog_id, $new_params['host'], $blog_id); + printf("ssh root@%s rsync -avz --delete /opt/noblogs/www/wp-content/blogs.dir/%d root@%s:/opt/noblogs/www/wp-content/blogs.dir/\n", $old_params['host'], $blog_id, $new_params['host']); } + } $moved_count += 1; - } else { echo "echo blog $blog_id stays on " . $old_params['host'] . "\n"; } @@ -68,9 +76,8 @@ if (array_key_exists('calc-size', $opts)) { print_r($g_added_size); } -function fhash($dbid, $reversemap) { - global $wpdb; - $lookup = $wpdb->hash_map->lookup($dbid); +function fhash($dbid, $reversemap, $hashptr) { + $lookup = $hashptr->lookup($dbid); $backend = $reversemap[$lookup]; $result = array(); if (preg_match('/^(.*):([0-9]*)$/', $backend['host'], $matches)) { @@ -96,7 +103,7 @@ function mysqlurl(&$attrs) { function get_all_blogs() { global $wpdb; - $sql = "SELECT blog_id, domain, path FROM $wpdb->blogs WHERE public = 1 AND deleted = 0 AND archived = '0' ORDER BY domain, path"; + $sql = "SELECT blog_id, domain, path FROM $wpdb->blogs WHERE deleted = 0 AND archived = '0' ORDER BY domain, path"; $result = $wpdb->get_results($sql); return ($result); } @@ -105,4 +112,5 @@ function usage() { $str = <<<USAGE noblogs-new-topology.php [--no-database|--calc-size] <OLD_MAP> <NEW_MAP> USAGE; -} \ No newline at end of file + echo $str; +} -- GitLab