summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Terry <jterry@bluehost.com>2015-02-11 15:32:08 -0700
committerIvan Kohler <ivan@freeside.biz>2015-02-24 18:49:51 -0800
commitae02d1178c6859f7a0a5e4a22c685de5f0477568 (patch)
tree16a620ff8a7e0a64b8b9ec948e9c8179814feefd
parent322bb305ccb724f35e869b757e9bb5fa4a468e84 (diff)
Cache the FS::Conf info per page load, for performance.
Conflicts: FS/FS/Conf.pm
-rw-r--r--FS/FS/Conf.pm18
-rw-r--r--FS/FS/Daemon/Preforking.pm2
-rw-r--r--FS/FS/UID.pm3
-rw-r--r--FS/bin/freeside-queued19
4 files changed, 28 insertions, 14 deletions
diff --git a/FS/FS/Conf.pm b/FS/FS/Conf.pm
index c4e5af4..855c9f4 100644
--- a/FS/FS/Conf.pm
+++ b/FS/FS/Conf.pm
@@ -1,7 +1,7 @@
package FS::Conf;
-use vars qw($base_dir @config_items @base_items @card_types $DEBUG);
use strict;
+use vars qw($base_dir @config_items @base_items @card_types $DEBUG $conf_cache);
use Carp;
use IO::File;
use File::Basename;
@@ -134,9 +134,13 @@ sub _config {
foreach my $a (@a) {
$hashref->{agentnum} = $a;
foreach my $l (@l) {
- $hashref->{locale} = $l;
- $cv = FS::Record::qsearchs('conf', $hashref);
- return $cv if $cv;
+ my $key = join(':',$name, $a, $l);
+ if (! exists $conf_cache->{$key}){
+ $hashref->{locale} = $l;
+ # $conf_cache is reset in FS::UID during myconnect, so the cache is reset per connection
+ $conf_cache->{$key} = FS::Record::qsearchs('conf', $hashref);
+ }
+ return $conf_cache->{$key} if $conf_cache->{$key};
}
}
return undef;
@@ -362,6 +366,12 @@ sub set {
$error = $new->insert;
}
+ if (! $error) {
+ # clean the object cache
+ my $key = join(':',$name, $agentnum, $self->{locale});
+ $conf_cache->{ $key } = $new;
+ }
+
die "error setting configuration value: $error \n"
if $error;
diff --git a/FS/FS/Daemon/Preforking.pm b/FS/FS/Daemon/Preforking.pm
index f3a39a6..4c382eb 100644
--- a/FS/FS/Daemon/Preforking.pm
+++ b/FS/FS/Daemon/Preforking.pm
@@ -46,7 +46,7 @@ use warnings;
use strict;
use constant DEBUG => 0; # Enable much runtime information.
-use constant MAX_PROCESSES => 10; # Total server process count.
+use constant MAX_PROCESSES => 4; # Total server process count. XXX conf to increase per-different daemon for busy sites using this (currently the only things using this are freeside-xmlrpcd and freeside-selfservice-xmlrpcd)
#use constant TESTING_CHURN => 0; # Randomly test process respawning.
use vars qw( @EXPORT_OK $FREESIDE_LOG $SERVER_PORT $user $handle_request );
diff --git a/FS/FS/UID.pm b/FS/FS/UID.pm
index f41735d..4535799 100644
--- a/FS/FS/UID.pm
+++ b/FS/FS/UID.pm
@@ -176,6 +176,9 @@ sub myconnect {
)
or die "DBI->connect error: $DBI::errstr\n";
+ require FS::Conf;
+ $FS::Conf::conf_cache = undef;
+
if ( $schema ) {
use DBIx::DBSchema::_util qw(_load_driver ); #quelle hack
my $driver = _load_driver($handle);
diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued
index 7c4cf1b..4786132 100644
--- a/FS/bin/freeside-queued
+++ b/FS/bin/freeside-queued
@@ -38,15 +38,16 @@ drop_root();
$ENV{HOME} = (getpwuid($>))[7]; #for ssh
warn "connecting to database\n" if $DEBUG;
-$@ = 'not connected';
-while ( $@ ) {
- eval { adminsuidsetup $user; };
- if ( $@ ) {
- warn $@;
- warn "sleeping for reconnect...\n";
- sleep 5;
- }
-}
+#$@ = 'not connected';
+#while ( $@ ) {
+# eval { adminsuidsetup $user; };
+# if ( $@ ) {
+# warn $@;
+# warn "sleeping for reconnect...\n";
+# sleep 5;
+# }
+#}
+adminsuidsetup $user;
my $log = FS::Log->new('queue');
logfile( "%%%FREESIDE_LOG%%%/queuelog.". $FS::UID::datasrc );