Skip to content
Snippets Groups Projects
Commit 6181e751 authored by Joe's avatar Joe Committed by lucha
Browse files

Workaround for the demented hyperdb bug

parent fb2e0e0f
No related branches found
No related tags found
No related merge requests found
#!/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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment