diff options
author | Jason Terry <jterry@bluehost.com> | 2015-02-11 15:32:08 -0700 |
---|---|---|
committer | Ivan Kohler <ivan@freeside.biz> | 2015-02-24 18:49:51 -0800 |
commit | ae02d1178c6859f7a0a5e4a22c685de5f0477568 (patch) | |
tree | 16a620ff8a7e0a64b8b9ec948e9c8179814feefd | |
parent | 322bb305ccb724f35e869b757e9bb5fa4a468e84 (diff) |
Cache the FS::Conf info per page load, for performance.
Conflicts:
FS/FS/Conf.pm
-rw-r--r-- | FS/FS/Conf.pm | 18 | ||||
-rw-r--r-- | FS/FS/Daemon/Preforking.pm | 2 | ||||
-rw-r--r-- | FS/FS/UID.pm | 3 | ||||
-rw-r--r-- | FS/bin/freeside-queued | 19 |
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 ); |