On 24.08.2006, at 20:26, Stephen Deasey wrote:


That's because it's a bad idea... :-)

Ah, it is. The "original" idea is not though.
I hate to reboot the server just to turn on
or off a bit. We have a module doing SCSI
communication. It can be turned on to make
extended logging. This is controlled by a
ns_config parameter. So, on customer site
I might need to turn this in in the middle
of the job. The processed some TB of data
and got stucked, I need to find out why.
The job ran for some 10's of hours (perhaps
2 or 3 days) and consumed about 10-15 tapes.
Now I'd need to STOP the server, killing the job?
No way. There has to be a better solution.
Hence the need for changing in-memory config.


Maybe the limits stuff is a possible model. Unlike the aols4.5
version, the one is our cvs handles config by default in the standard
fashion by looking up values in the config file. However, it does this
from Tcl in tcl/limits.tcl.

The limits code creates a new tool. The tricky stuff, the locking, is
handled in C. The tool is presented as Tcl commands, and Tcl is used
to configure it at start up. It looks just like any other server
subsystem:

  ns_section "ns/limits"
  ns_param  default         "The default limits"
  ns_param  restrict         "A restricted set of limits"

  ns_section "ns/limits/default"
  ns_param  maxrun        100
  ns_param  maxwait       100
  ns_param  maxupload    [expr 10*1024*1000]
  ns_param  timeout          60

  ns_section "ns/limits/restrict"
  ...

In the majority of cases, that's probably all that's needed. Config
goes in the config file, not buried in some Tcl code.

However! You can also, at runtime, call:

  ns_limits_set -maxrun 10 -timeout 30 -- restrict


This is what you're trying to achieve with the read/write config. The
defaults get set at start up, and then at runtime, you call
ns_config_set and everything magicaly updates.

This MUST also internally lock, or? You can't have shared access
w/o locking, or?
Is this limits stuff yet another "specialized" thing like this
config, which costed me so much hair pulling? If yes, then we
should avoid using it at any cost!


The tool based approach is more flexible though. You could, if you
wanted, have a very minimal config file to bootstrap the server and
config everything yourself, getting the values from an HTTP server (as
someone mentioned), from a local SQLite db, whatever you can dream up.

A tool based approach also fits in better as a stand alone Tcl module.
There's usually not 'config' file when you 'package require' a module.

The tool-based approach is exactly what?
Is that something like ns_ictl or ns_logctl where you
have an extra configurator command?
If yes, then yes, I understand this. This is perhaps better
way to go. It is more logical and versatile than the config
stuff. To treat the config as a big "default" seems logical
in this light.



Anyway, the idea is that maybe forcing everything to go through the
config system is too restricting, and that the config, as it stands,
is a great *default*.  And recognising that the locking requirements
can be very different for different subsystems. Some config options
are dependant on others. A change in some should initiate an action,
such as purge a cache down to it's new maximum size.

Yes.


Maybe what we need is to start moving more things to this model. For
example, remove the calls to Ns_Config*() from nsd/log.c and instead
use ns_logctl from within tcl/init.tcl etc. (move the limits stuff
there).

Yes.



It may be the case that not all the logging options can be dynamically
adjusted. That's OK, maybe they can be set via ns_logctl only at start
up, which is a special single threaded environment.

Perhaps there's some helper functions we can add that would make
writing config functions easier, in the way that Ns_ParseObjv() makes
parsing options easier. Seems like there's a whole bunch of manual
twiddling going on in nsproxy/nsproxylib.c:ConfigureObjCmd() for
example.

Ah... this is right. I will rewrite that. Old habits are
difficult to handle!



Now, climb down off the balcony and have a nice cup of tea and a biscuit!

Only after I get a clear picture :-) But the hint with tool approach
is a good way to look at. I will have to give it more thoughts.

Thanks for the encouraging ideas!
Cheers
Zoran




Reply via email to