-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
Feature Request
- Yes, I reviewed the contribution guidelines.
Describe your use case and the problem you are facing
We’re using database sharding along with HyperDB and face some problems when it comes to use WP-CLI. Especially, but not exclusively, it’s hard until impossible to use the wp db commands. E.g. running wp db tables results in the error mentioned in wp-cli/wp-cli#4670, and also the workarounds there don’t work with sharding, since WP-CLI doesn’t know the shards here.
We’re running a pretty normal HyperDB configuration with the following db-config.php:
<?php
// Exit if accessed directly
defined( 'ABSPATH' ) || exit;
$wpdb->charset = 'utf8mb4';
$wpdb->collate = 'utf8mb4_unicode_ci';
$wpdb->save_queries = false;
$wpdb->persistent = false;
$wpdb->max_connections = 10;
$wpdb->check_tcp_responsiveness = true;
// Add global database
$wpdb->add_database( [
'host' => DB_HOST,
'user' => DB_USER,
'password' => DB_PASSWORD,
'name' => DB_NAME,
'write' => 1,
'read' => 2,
'dataset' => 'global',
'timeout' => .5,
] );
// Add 16 shards for blog databases
foreach ( array_merge( range( 0, 9 ), range( 'a', 'f' ) ) as $v ) {
$wpdb->add_database( [
'host' => DB_HOST,
'user' => DB_USER,
'password' => DB_PASSWORD,
'name' => DB_NAME.'_'.$v,
'write' => 1,
'read' => 2,
'dataset' => $v,
'timeout' => .5,
] );
}
$wpdb->add_callback( 'get_blog_shard' );
function get_blog_shard( $query, $wpdb ) {
if ( preg_match( "/^{$wpdb->base_prefix}\d+_/i", $wpdb->table ) ) {
return substr( md5( $wpdb->blogid ), 0, 1 );
}
}
function wpdb_connection_error( $host, $port, $op, $tbl, $ds, $dbhname, $wpdb ) {
dead_db();
}
$wpdb->add_callback( 'wpdb_connection_error', 'db_connection_error' );Describe the solution you'd like
I would like to get support for the sharding callback added to $wpdb in order to determine the correct database tables just by specifying the --url parameter in a WP-CLI request.