Forum OpenACS Development: Re: xowiki error using ns_eval

Collapse
Posted by Gustaf Neumann on
Dave,

a small status report on the problem: As discussed in the chat, the problem is due to the fact that xotcl-core loads for acs_types the values from acs-attributes during initialization, and during the ns_eval magic, there are the pool handles (kept in gobal variables by openacs) not available. The db_string fetching the attributes fails with 'invalid database id: "nsdb0" while executing "ns_db poolname $handle"'... The problem is mostly due to the complex state handling in the aolserver during an ns_eval.

There are several ways to approach the problem:
a) fix ns_eval, such that the database is usable during its steps
b) forget about loading and synchronizing the XOTcl objects with acs_attributes etc.
c) change XOTcl and the serializer to avoid the
database access

The least effort would be (b), but that is a step back in integration of acs-object-types and xotcl classes. Since (a) ns_eval is already quite complex, the easiest approach is (c), but it will require an update of xotcl for xotcl-core in the head branch, when ns_eval is used.

I have a now working version of (c) tested with aolserver 4.0 and 4.5, and will release this in the near future.

-gustaf neumann

PS: Tom, many thanks for your constructive comments.

Collapse
Posted by Raúl Morales Hidalgo on
Hi Gustaf,

¿Any updates on this?

we have xotcl-core 0.56, xowiki 0.62, xotcl-request-monitor 0.40 under an openACS 5.3/dotlrn 2.3.0 (Oracle) and the behavior is the same as the one described on the first post.

Thanks in advance

Collapse
Posted by Stefan Sobernig on
Raúl,

You need to get XOTcl 1.6.1 which was released about a month after this thread ended (May 30 -> June 26). It contains a generic fix that makes this behaviour under AOLServer go away ...

//stefan

Collapse
Posted by Raúl Morales Hidalgo on
Hi Stefan,

Thanks a lot, will try it as soon as we can.

I upgraded xotcl core, tried to run on a ds/shell an ns_eval source to reload a library and got the following error at every request after the call to ns_eval:

::xo::cc: unable to dispatch method 'user_id' during '::xo::cc user_id'
::xo::cc ::xotcl::Object->configure
::xo::ConnectionContext ::xotcl::Class->create
invoked from within
"my create ::xo::cc -package_id $package_id [list -parameter_declaration $parameter] -user_id $user_id -actual_query $actual_query -url $url"
(procedure "require" line 16)
::xo::ConnectionContext->require
invoked from within
"::xo::ConnectionContext require -package_id $package_id -url $url"
(procedure "get_context" line 14)
::throttle->get_context
invoked from within
"my get_context"
(procedure "check" line 4)
::throttle->check
invoked from within
"my check"
(procedure "postauth" line 4)
::throttle->postauth
invoked from within
"$proc $why"

am I missing something else?

Thanks in advance

Collapse
Posted by Stefan Sobernig on
Raúl,

Well, you might not be missing something, but simply expecting something not intended.

First question: Why are you ns_eval'ing *-procs files from xotcl-request-monitor? ns_eval is issued to incrementally update the blueprint state of all interpreters/ connection threads (and others).

Second question: Did you upgrade XOTcl to 1.6.1 (the C extension) or just xotcl-core (the OpenACS package)?

I could think of two sources of error, but you need to post the details to narrow it down ... (error.log, package version, how did you upgrade?) ...

Hi Stefan,

I just upgraded the C library, our xotcl-core version is still the 5.3 one I posted above (0.56 IIRC)

What I try to do is to reload a library from a given package because the apm -> reload doesn't work when the enhancePErformanceP parameter is set as Dave says in this thread:

http://openacs.org/forums/message-view?message_id=1473232

anything else I should run to narrow it down a little more?

Are you sure, you installed XOTcl in this installation?

Run the following command in your ds/shell

   set _ "$::xotcl::version$::xotcl::patchlevel"

For me, sourcing via ns_eval works (with the request-monitor installed as you have apparently). Try in your ds/shell

   set dir [acs_root_dir]
   ns_eval source $dir/packages/acs-tcl/tcl/request-processor-procs.tcl

If the command above does not work, one has to look closer
at the versions. If this works, what can i do to reproduce your problem?

Collapse
Posted by Joaquin Urrutia on
Hi Gustaf,

If we run:

set _ "$::xotcl::version$::xotcl::patchlevel"

We got

1.6.1

But, if we run:

set dir [acs_root_dir]
ns_eval source $dir/packages/acs-tcl/tcl/request-processor-procs.tcl

We got a permanent error on every request:

::xo::cc: unable to dispatch method 'user_id' during '::xo::cc user_id'
::xo::cc ::xotcl::Object->configure
::xo::ConnectionContext ::xotcl::Class->create
invoked from within
"my create ::xo::cc -package_id $package_id [list -parameter_declaration $parameter] -user_id $user_id -actual_query $actual_query -url $url"
(procedure "require" line 16)
::xo::ConnectionContext->require
invoked from within
"::xo::ConnectionContext require -package_id $package_id -url $url"
(procedure "get_context" line 14)
::throttle->get_context
invoked from within
"my get_context"
(procedure "check" line 4)
::throttle->check
invoked from within
"my check"
(procedure "postauth" line 4)
::throttle->postauth
invoked from within
"$proc $why"

Tell me the package versions that need to see exactly

Collapse
Posted by Gustaf Neumann on
The good news is that the problem apparently does not exist in cvs head, so there is a certain chance that it will heal once you have the chance to update.

Please check the versions of the following packages on your system by runing the command below in your ds/shell:

foreach pk {acs-kernel xotcl-core xotcl-request-monitor} {
   append _ "$pk: " [apm_version_get -package_key $pk -array ""; set x "$(version_name), $(release_date)"] \n
}
 
set _

and report it back.

Collapse
Posted by Raúl Morales Hidalgo on
Hi,

After upgrading in our main site the core to 5.4 and xo* packages to newer versions we still have problems with this, the problem now seems to be the one described in the first post of this thread:

invalid database id: "nsdb0"
while executing
"ns_db poolname $handle"

Our system right now:

acs-kernel: 5.4.3, 2008-10-03
xotcl-core: 0.100.1, 2009-01-23
xotcl-request-monitor: 0.40, 2007-10-14

and xotcl 1.6.1 (installed from debian package) which should fix the problem.

We have also tried xotcl-request-monitor 0.43 and xotcl library 1.6.6 to no avail (same error) we have tried reloading libraries via ns_eval with both performanceModeP on and off for the sake of testing.

any ideas or anything else to try?

Thanks in advance,
Raúl

Collapse
Posted by Gustaf Neumann on
Dear Raúl, i haved tried the following commands in ds/shell
   set dir [acs_root_dir]
   ns_eval source $dir/packages/acs-tcl/tcl/request-processor-procs.tcl
on the server, which comes closest to your configuration, and it works fine:
Server:    4.5.0p1 (AOLserver)
Tcl:       8.5.9
XOTcl:     1.6.6
Tdom:      0.8.3
libthread: /usr/local/aolserver/lib/thread2.6.5/libthread2.6.5.so
Tcllib:    /usr/local/aolserver45-HEAD/lib/tcllib1.10
acs-kernel:            2008-10-03, 5.4.3
xotcl-core:            2011-01-14, 0.118
xotcl-request-monitor: 2008-10-04, 0.42
xowiki:                2011-01-14, 0.136
xowf:                  2010-06-17, 0.30d
i would recommend XOTcl 1.6.6 and xotcl-core 0.118