From 080389039abb91c58f82d724b2975a73e1f008da Mon Sep 17 00:00:00 2001 From: joe <joe@incal.net> Date: Sun, 9 Oct 2011 22:10:46 +0200 Subject: [PATCH] script for redistributing noblogs resources according to backend maps --- r2db/tools/noblogs-new-topology.php | 49 ++++++++++++++++++----------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/r2db/tools/noblogs-new-topology.php b/r2db/tools/noblogs-new-topology.php index f153ad09c..f4d2930c9 100755 --- a/r2db/tools/noblogs-new-topology.php +++ b/r2db/tools/noblogs-new-topology.php @@ -10,42 +10,49 @@ require_once('db-config.php'); /* Parse command line options */ -$opts = getopt('N','no-database'); -if (empty($argv[2])) { - usage(); - exit(1); +$opts = getopt('',array('no-database', 'calc-size')); +if (array_key_exists('calc-size', $opts)) { + $opts['no-database'] = true; + $g_added_size = array(); } -$o_hashmap = new Flexihash(); -$old_map = noblogs_load_backends($argv[1], $o_hashmap); $n_hashmap = new Flexihash(); -$new_map = noblogs_load_backends($argv[2], $n_hashmap); +$new_map = noblogs_load_backends(array_pop($argv), $n_hashmap); + +$o_hashmap = new Flexihash(); +$old_map = noblogs_load_backends(array_pop($argv), $o_hashmap); $blogs = get_all_blogs(); foreach ($blogs as $blog) { $blog_id = $blog->blog_id; - + $old_params = fhash($blog_id, $old_map); $old_dburi = mysqlurl($old_params); - $new_params = fhash($blog_id, $reverse_backend_map); + $new_params = fhash($blog_id, $new_map); $new_dburi = mysqlurl($new_params); if ($new_counts[$new_params['host']]) { $new_counts[$new_params['host']] += 1; - } else { + } else { $new_counts[$new_params['host']] = 1; } if ($old_dburi != $new_dburi) { echo "echo moving blog $blog_id from " . $old_params['host'] . " to " . $new_params['host'] . "\n"; - if (! $opts['N']) { + 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"; } - - 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); + 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)); + $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); + } $moved_count += 1; + } else { echo "echo blog $blog_id stays on " . $old_params['host'] . "\n"; } @@ -54,9 +61,12 @@ foreach ($blogs as $blog) { echo "\n\n\nBlog distribution:\n"; print_r($new_counts); -print "\n $moved_count blogs moved\n"; - +echo "\n $moved_count blogs moved\n"; +if (array_key_exists('calc-size', $opts)) { + echo "Variations in disk space for hosts (kB):\n"; + print_r($g_added_size); +} function fhash($dbid, $reversemap) { global $wpdb; @@ -86,10 +96,13 @@ 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 public = 0 ORDER BY domain, path"; + $sql = "SELECT blog_id, domain, path FROM $wpdb->blogs WHERE public = 1 AND deleted = 0 AND archived = '0' ORDER BY domain, path"; $result = $wpdb->get_results($sql); return ($result); } +function usage() { + $str = <<<USAGE +noblogs-new-topology.php [--no-database|--calc-size] <OLD_MAP> <NEW_MAP> +USAGE; +} \ No newline at end of file -- GitLab