Along with this, I'd like to figure out what "ns_ictl once" actually does...
;-) I see that it adds items to a hash, but I never see any code acting on
those hashed items. Perhaps this is the foundation for the "init once"
functionality being sought? If so, we should complete the work in the head.

- n

On 5/7/07, Michael Andrews <[EMAIL PROTECTED]> wrote:

There are times when you need to load Tcl packages @ startup.  There
are also times when you might want to have a one-time
"initialization" of those packages before the server starts accepting
connections. For example, you might have a package that registers a
filter or a proc.

The current implementation "ns_ictl package require" will re-require
packages and re-eval namespaces on every interp clone. This is good
for some reasons and should not be changed, but it does not give us a
"one-time" initialization.

I have added a tcl file to my AOLserver installation called
"packages.tcl" that does the following:

1) Reads the nsd config to set library paths and load needed packages.
2) Looks for and executes the special command ::$
{packageName}::nsInit after ALL packages have been loaded.
3) Looks for and executes the special command ::$
{packageName}::nsPostInit after ALL nsInit procs have been executed.

The config look like this:

ns_section "ns/server/server1/packages"
     ns_param librarylist [list /Users/Michael/builds/aolserver/
packages]
     ns_param packagelist [list rpc TclCurl foo bar]

This has really helped me pre-load packages for a core distribution
and allowed me to use package deployments for AOLserver level code
like "ns_register_proc" and "ns_pool set" becase I could start pools
and register them before the server accepted connections.

I want to get a sense of how folks need to load packages using
AOLserver in hopes of adding this functionality to the AOLserver
source. So I have some questions:

1) Is there a need to add package loading (like what I have done) to
the core AOLserver distribution?
2) Is there a need to have a nsInit proc per package and when should
that proc be executed:
     a) Right after right the package has been loaded - and before
the other packages are loaded? (basically in line with the load list).
     b) After all the packages have been loaded (as I am doing in above)
3) Is there a need for a nsPostInit proc and when should it be executed:
     a) After all the nsInit procs have been executed but before the
server accepts connections? (as I am doing above).
     b) After all the nsInit procs have been executed but AFTER the
server accepts connections?
4) Should package load order be respected?
5) Are there other ns* procs that would be useful?
6) Other ideas on the config structure?

I personally do not code in a way that needs load order, but others
might, so my own opinion is that: Load order is easy to keep so why
not; nsInit procs should be fired after ALL packages are loaded; and
nsPostInit procs should be fired after ALL nsInits have been
executed.  This would give a nice way to initialize packages before
the server accepts connections.

I also think that any triggers that need to happen like
"ns_atshutdown" can be registered in one of the init procs so we do
not need to complicate things by have many "special" commands.

Thoughts?

M


--
AOLserver - http://www.aolserver.com/

To Remove yourself from this list, simply send an email to <
[EMAIL PROTECTED]> with the
body of "SIGNOFF AOLSERVER" in the email message. You can leave the
Subject: field of your email blank.




--
Nathan Folkman
[EMAIL PROTECTED]


--
AOLserver - http://www.aolserver.com/

To Remove yourself from this list, simply send an email to <[EMAIL PROTECTED]> 
with the
body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject: 
field of your email blank.

Reply via email to