From e1f21df3faf10cafc492e9bd7a9329f7f96e95ca Mon Sep 17 00:00:00 2001 From: "bbaetz%student.usyd.edu.au" <> Date: Tue, 19 Nov 2002 15:19:29 +0000 Subject: Bug 124589 - support database replication r=myk, a=justdave --- defparams.pl | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 89 insertions(+), 12 deletions(-) (limited to 'defparams.pl') diff --git a/defparams.pl b/defparams.pl index 35604294b..ba95f5fd5 100644 --- a/defparams.pl +++ b/defparams.pl @@ -53,7 +53,6 @@ use vars qw(@param_list); sub check_priority { my ($value) = (@_); - &::ConnectToDatabase(); &::GetVersionTable(); if (lsearch(\@::legal_priority, $value) < 0) { return "Must be a legal priority value: one of " . @@ -68,7 +67,11 @@ sub check_shadowdb { if ($value eq "") { return ""; } - &::ConnectToDatabase(); + if (!Param("updateshadowdb")) { + # Can't test this, because ConnectToDatabase uses the param, but + # we can't set this before testing.... + return ""; + } &::SendSQL("SHOW DATABASES"); while (&::MoreSQLData()) { my $n = &::FetchOneColumn(); @@ -76,11 +79,21 @@ sub check_shadowdb { return "The $n database already exists. If that's really the name you want to use for the backup, please CAREFULLY make the existing database go away somehow, and then try again."; } } + # We trust the admin.... + trick_taint($value); &::SendSQL("CREATE DATABASE $value"); &::SendSQL("INSERT INTO shadowlog (command) VALUES ('SYNCUP')", 1); return ""; } +sub check_shadowdbhost { + my ($value) = (@_); + if ($value && Param("updateshadowdb")) { + return "Sorry, you can't have the shadowdb on a different connection to the main database if you want Bugzilla to handle the replication for you."; + } + return ""; +} + sub check_urlbase { my ($url) = (@_); if ($url !~ m:^http.*/$:) { @@ -246,6 +259,79 @@ sub check_netmask { default => 0 }, + { + name => 'queryagainstshadowdb', + desc => 'If this is on, and the shadowdb parameter is set, then ' . + 'certain queries will happen against the shadow database.', + type => 'b', + default => 0, + }, + + { + name => 'updateshadowdb', + desc => 'If this is on, and the shadowdb parameter is set, then ' . + 'Bugzilla will use the old style of shadow database in which it ' . + 'manually propogates changes to the shadow database. Otherwise, ' . + 'Bugzilla will assume that the shadowdb database (if ' . + 'any) is being updated via replication. WARNING! This ' . + 'manual replication is deprecated and is going away soon ' . + '(BEFORE the next stable Bugzilla release). It has ' . + 'several problems with data consistency, and replication is the ' . + 'preferred option. If this parameter is on, and you disable it, ' . + 'make sure that the shadow database is already set up for ' . + 'replication, or queries will return stale data.', + type => 'b', + default => 1, + }, + + # This entry must be _after_ updateshadowdb, because check_shadowdbhost uses + # that + { + name => 'shadowdbhost', + desc => 'The host the shadow database is on. If blank, then then we ' . + 'assume it\'s on the main database host (as defined in ' . + 'localconfig) and ingore the shadowdbport and ' . + 'shadowdbsock parameters below, which means that this ' . + 'parameter must be filled in if your shadow database is ' . + 'on a different instance of the mysql server, even if that ' . + 'instance runs on the same machine as the main database. Note ' . + 'that updateshadowdb must be off if the shadow database ' . + 'is on a difference mysql instance, since Bugzilla can\'t ' . + 'propogate changes between instances itself, and this should be ' . + 'left blank if the shadow database is on the same instance, ' . + 'since Bugzilla can then reuse the same database connection for '. + 'better performance.', + type => 't', + default => '', + checker => \&check_shadowdbhost, + }, + + { + name => 'shadowdbport', + desc => 'The port the shadow database is on. Ignored if ' . + 'shadowdbhost is blank. Note: if the host is the local ' . + 'machine, then MySQL will ignore this setting, and you must ' . + 'specify a socket below.', + type => 't', + default => '3306', + checker => \&check_numeric, + }, + + { + name => 'shadowdbsock', + desc => 'The socket used to connect to the shadow database, if the host ' . + 'is the local machine. This setting is required because MySQL ' . + 'ignores the port specified by the client and connects using ' . + 'its compiled-in socket path (on unix machines) when connecting ' . + 'from a client to a local server. If you leave this blank, and ' . + 'have the database on localhost, then the shadowdbport ' . + 'will be ignored.', + type => 't', + default => '', + }, + + # This entry must be _after_ the shadowdb{host,port,sock} settings so that + # they can be used in the validation here { name => 'shadowdb', desc => 'If non-empty, then this is the name of another database in ' . @@ -253,21 +339,12 @@ sub check_netmask { 'This is done so that long slow read-only operations can be used ' . 'against this db, and not lock up things for everyone else. ' . 'Turning on this parameter will create the given database ; be ' . - 'careful not to use the name of an existing database with useful ' . - 'data in it!', + 'careful not to use the name of an existing database with useful ' . 'data in it!', type => 't', default => '', checker => \&check_shadowdb }, - { - name => 'queryagainstshadowdb', - desc => 'If this is on, and the shadowdb is set, then queries will ' . - 'happen against the shadow database.', - type => 'b', - default => 0, - }, - { name => 'useLDAP', desc => 'Turn this on to use an LDAP directory for user authentication ' . -- cgit v1.2.3-24-g4f1b