Skip to content
Snippets Groups Projects
db-backends.php 1.89 KiB
Newer Older
function noblogs_split_db($file) {
    $db_url = trim(file_get_contents($file));
    return parse_url($db_url);
}

function noblogs_load_backends($db_config_file, $hashptr) {
  global $wpdb;

  $backend_map = array();

  $fp = @fopen($db_config_file, "r");
  if (!$fp) {
    die("Database backends not configured!");
  }
  while (($line = fgets($fp, 1024)) !== false) {
    $wline = rtrim($line);
    if ($wline == "" || $wline[0] == '#') {
    $line_parts = explode(" ", $wline);
    $server_id = $line_parts[0];
    $dataset = "backend_" . $server_id;
    $backend_url = $line_parts[2];
    $backend_url_data = parse_url($backend_url);
    $backend = array(
        "host" => $backend_url_data["host"] . ":" . $backend_url_data["port"],
        "user" => $backend_url_data["user"],
        "password" => $backend_url_data["pass"],
        "name" => substr($backend_url_data["path"], 1),
        "dataset" => $dataset,
        "read" => 1, "write" => 1, "timeout" => 10
        );
    $wpdb->add_database($backend);
    $hashptr->addTarget($dataset);
    $backend_map[$dataset] = $backend;
  }
  fclose($fp);
  return $backend_map;
}
function noblogs_load_global_dataset($master_file, $ip_file) {
    global $wpdb;
    $mdata = noblogs_split_db($master_file);
    $ldata = trim(file_get_contents($ip_file));
    $globaldb = array(
        "host" => $mdata["host"] . ":" . $mdata["port"],
        "user" => $mdata["user"],
        "password" => $mdata["pass"],
        "name" => substr($mdata["path"], 1),
        "dataset" => "global",
        "read" => 1, "write" => 1, "timeout" => 2
    );
    if ($mdata['host'] == $ldata) {
        $wpdb->add_database($globaldb);
    } else {
        $globaldb['read'] = 0;
        $wpdb->add_database($globaldb);
        $globaldb['host'] = $ldata;
        $globaldb['read'] = 1;
        $globaldb['write'] = 0;
        $wpdb->add_database($globaldb);
    }