Forum OpenACS Development: Fresh install of OpenACS 5.10 on Oracle 19c
You might have noticed recently various changes on CVS with changes for Oracle. OpenACS core can now be installed on Oracle 19c, which is the Long Term Release of Oracle with a support end date of April 30, 2027.
Since the Oracle setup for is not fully trivial and offers many options, I have saved my installation notes in the wiki.
The installation leads to a development version (acs-core, with locally installed developer support) for performing compatibility tests etc. with Oracle. For getting all application packages fully working is certainly more work. However, one of the intention of this work is to open up a migration path for old Oracle based installations to provide a working acs-core, such these applications can benefit from the recent security, performance and functional improvements in OpenACS. Ideally, these applications have just to care about their "own" packages.
Note that I have mostly worked on new installations under Oracle, and only occasionally added/fixed upgrade scripts. However, legacy installations might find these changes also useful for cherry-picking.
All the best
-gn
Brian
one can now install the tip version of the oacs-5-10 branch including the following packages below in Oracle 19c. These are the packages, when "xowiki" is being installed, which also exercises the queries on the database schema substantially.
So far this needed 37 changes. One can search for these changes on Fisheye (thanks Stefan!) by searching for the commits containing "19c":
all the best
-gn
acs-admin ACS Site-Wide Administration 5.10.0 acs-api-browser ACS API Browser 5.10.0 acs-authentication ACS Authentication 5.10.0 acs-automated-testing ACS Automated Testing 5.10.0 acs-bootstrap-installer ACS Bootstrap Installer 5.10.0 acs-content-repository ACS Content Repository 5.10.0 acs-core-docs ACS Core Documentation 5.10.0 acs-datetime ACS Date and Time Utilities 5.10.0 acs-events ACS Events 0.6.2d5 acs-kernel ACS Kernel 5.10.1d5 acs-lang ACS Localization 5.10.0 acs-mail-lite ACS Mail Services Lite 5.10.0 acs-messaging ACS Messaging 5.10.0 acs-reference ACS Reference Data 5.10.0 acs-service-contract ACS Service Contracts 5.10.0 acs-subsite ACS Subsite 5.10.1d1 acs-tcl ACS Tcl Library 5.10.1d8 acs-templating ACS Templating 5.10.1d4 acs-translations ACS Translation Storage 5.10.0 attachments Attachments 0.13 categories Categories 1.1.5d4 file-storage File Storage 5.10.0 general-comments General Comments 5.10.0 notifications Notifications 5.10.0 oacs-dav webDAV Support 1.2.0d4 openacs-default-theme OpenACS Default Theme 5.10.0 ref-countries Reference Data - Country 5.10.0 ref-language Reference Data - Language 5.10.0 ref-timezones Reference Data - Timezone 5.10.0 richtext-ckeditor4 Richtext CKeditor4 0.23 rss-support RSS Support 0.5d2 search Search 5.10.0 xotcl-core XOTcl Core 5.10.1d4 xowiki xowiki 5.10.1d16
Supporting timestamps is necessary when connecting to external databases, and one gets a much better compatibility with the PostgreSQL version. The output format for timestamps can be controlled very similar to DATE via the environment variables NLS_TIMESTAMP_FORMAT and NLS_TIMESTAMP_TZ_FORMAT (see [2](.
all the best
-g
[1] https://bitbucket.org/naviserver/nsoracle/
[2] https://bitbucket.org/naviserver/naviserver/commits/926407346d07412c3cd9814a7229a89881c8c7f0
[vagrant@oracle-19c-vagrant modules]$ cd ns nsaccess/ nscoap/ nsdbimy/ nsdbtds/ nsfortune/ nsldapd/ nsoracle/ nsshell/ nssys/ nsvfs/ nsaspell/ nsconf/ nsdbipg/ nsdhcpd/ nsgdchart/ nsloopctl/ nsphp/ nssip/ nssyslogd/ nswebpush/ nsauthpam/ nsdbbdb/ nsdbmysql/ nsdns/ nsicmp/ nsmemcache/ nsradiusd/ nssmtpd/ nstftpd/ nszlib/ nschartdir/ nsdbi/ nsdbpg/ nsexample/ nsimap/ nsocaml/ nsrtsp/ nssnmp/ nstk/ nsclamav/ nsdbilite/ nsdbsqlite/ nsexpat/ nsldap/ nsodbc/ nssavi/ nsstats/ nsudp/ [vagrant@oracle-19c-vagrant modules]$ cd nsoracle/ [vagrant@oracle-19c-vagrant nsoracle]$ ls BUGS ChangeLog doc Makefile Makefile.win32 nsoracle.c nsoracle.h plsql.tcl README test TODO win32 [vagrant@oracle-19c-vagrant nsoracle]$ sudo make && make install gcc -std=gnu11 -I/sdk/include -I/rdbms/demo -I/rdbms/public -I/network/public -I/plsql/public -O2 -fomit-frame-pointer -Wall -fPIC -pipe -DNDEBUG -DSYSTEM_MALLOC -std=c99 -I/usr/local/ns/include -I"/usr/local/ns/include" -DHAVE_CONFIG_H -c -o nsoracle.o nsoracle.c In file included from nsoracle.c:14:0: nsoracle.h:19:17: fatal error: oci.h: No such file or directory #include gt oci.h lt ^ compilation terminated. make: *** [nsoracle.o] Error 1 [vagrant@oracle-19c-vagrant nsoracle]$
Any help is appreciated.
I cannot comment on the vagrant machine setup from the tutorial, but I have recently installed an OpenACS instance together with the Oracle driver and this worked fine (note that it was a Postgres OpenACS using the Oracle driver only to access some tables from a remote Oracle and no vagrant was involved).
Summarizing, these were the steps (on the machine running NaviServer):
* download basic and sdk from https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
* compile nsoracle located in the NaviServer scr folder following the instructions in the nsoracle README (see also the tutorial for pointers). Basically, you want to point the compiler to your basic and sdk installation from before.
It could be that the makefile does not find the basic and sdk installations and some massaging of the paths will do.
Hope this helps
I am currently on vacation, so here is just a short replay. This error message means, that the include files for Oracle client programs are either missing in your installation, or not found on the default location(e.g. these are on a different path).
Note, that according to nsoracle/README, one has to set ORACLE_HOME variable first.
From the README file:
Compilation works for Oracle with Oracle client libs Version 19.3.0.0.0 (instant client package and instant client package SDK, 64-bit). After downloading from e.g., https://www.oracle.com/database/technologies/instant-client/macos-intel-x86-downloads.html install this library e.g. under /usr/local/src/oracle and set ORACLE_HOME accordingly. export ORACLE_HOME=/usr/local/src/oracle/instantclient_19_8/ After downloading the client libraries, ORACLE_HOME should include # includes: under $ORACLE_HOME/sdk/include/ # libraries: $ORACLE_HOME/lib/ To build and install the binary under NaviServer, use e.g. make make install
loadjava error:
--------------------------------------
[07/Oct/2022:14:50:10][74372.7fc2b88ed700][-conn:oacs-5-10-0:default:0:1-] Error: apm_package_install: Error installing ACS Content Repository version 5.10.1d4: couldn't execute "/usr/lib/oracle/21/client64/bin/loadjava": no such file or directory
: couldn't execute "/usr/lib/oracle/21/client64/bin/loadjava": no such file or directory
: while executing
: "open "|[ad_file join $::env(ORACLE_HOME) bin loadjava] -verbose -user $user_pass $file" "r""
: (procedure "::nsf::procs::db_source_sqlj_file" line 3)
: invoked from within
: "db_source_sqlj_file -callback $callback "$path/$file_path""
: (procedure "::nsf::procs::apm_package_install_data_model" line 38)
: invoked from within
: "apm_package_install_data_model -callback $callback -data_model_files $data_model_files $spec_file_path"
: ("::try" body line 55)
--------------------------------------
Resolved by installing the full client, install oacs on same machine as DB, or manually skipping/loading sqlj files.
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-tcl/tcl/site-nodes-procs.tcl
--------------------------------------
108c108,112
\< acs::dc call site_node delete -node_id $node_id
---
\> if {[db_driverkey ""] eq "oracle"} {
\> acs::dc call site_node del -node_id $node_id
\> } else {
\> acs::dc call site_node delete -node_id $node_id
\> }
612c616
\< select child.node_id, child.parent_id from site_node_tree, site_nodes as child
---
\> select child.node_id, child.parent_id from site_node_tree, site_nodes child
1006c1010
\< select child.node_id, child.parent_id, child.object_id from site_node_tree, site_nodes as child
---
\> select child.node_id, child.parent_id, child.object_id from site_node_tree, site_nodes child
1014a1019,1023
\> if { $with_subtree } {
\> set sql [string map [list ":with_subtree" "1 = 1"] $sql]
\> } else {
\> set sql [string map [list ":with_subtree" "1 = 0"] $sql]
\> }
--------------------------------------
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-subsite/tcl/subsite-procs.tcl
--------------------------------------
1106c1106
\< where not (singleton_p and exists (select 1 from apm_packages
---
\> where not (singleton_p = 't' and exists (select 1 from apm_packages
1253,1254c1253,1254
\< order by host = :search_vhost desc
\< fetch first 1 row only
---
\> order by case when host = :search_vhost then 2 else 1 end desc
\> fetch first 1 row only
--------------------------------------
http://localhost:8000/admin/applications/
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-subsite/www/admin/applications/index.tcl
--------------------------------------
85c85
\< where_clause {(:search is null or upper(coalesce(coalesce(m.message, md.message), p.instance_name) || n.name || pt.pretty_name) like '%' || upper(:search) || '%')}
---
\> where_clause {(:search is null or upper(coalesce(coalesce(m.message, md.message), to_clob(p.instance_name)) || n.name || pt.pretty_name) like '%' || upper(:search) || '%')}
--------------------------------------
http://localhost:8000/admin/applications/
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-subsite/www/admin/applications/index-oracle.xql
--------------------------------------
22c22
\< and [template::list::filter_where_clauses -and -name applications]
---
\> [template::list::filter_where_clauses -and -name applications]
--------------------------------------
http://localhost:8000/admin/site-map/site-map
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-subsite/www/admin/site-map/site-map.tcl
--------------------------------------
58,71c58
\< db_foreach path_select {
\< WITH RECURSIVE site_node_path AS (
\< select node_id, parent_id, name, object_id, directory_p, 1 as level
\< from site_nodes where node_id = :root_id
\< UNION ALL
\< select c.node_id, c.parent_id, c.name, c.object_id, c.directory_p, p.level+1
\< from site_node_path p, site_nodes as c where c.node_id = p.parent_id
\< )
\< select
\< node_id, name, directory_p, level,
\< acs_object.name(object_id) as obj_name,
\< acs_permission.permission_p(object_id, :user_id, 'admin') as admin_p
\< from site_node_path order by level desc
\< } {
---
\> db_foreach path_select {} {
333c320
\< and acs_permission.permission_p(package_id, :user_id,'admin')
---
\> and acs_permission.permission_p(package_id, :user_id,'admin') = 't'
--------------------------------------
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-subsite/www/admin/site-map/site-map-postgresql.xql
--------------------------------------
43a44,64
\>
\> \<fullquery name="path_select"\>
\> \<rdbms\>\<type\>postgresql\</type\>\<version\>8.4\</version\>\</rdbms\>
\> \<querytext\>
\> WITH RECURSIVE site_node_path AS (
\> select node_id, parent_id, name, object_id, directory_p, 1 as level
\> from site_nodes where node_id = :root_id
\> UNION ALL
\> select c.node_id, c.parent_id, c.name, c.object_id, c.directory_p, p.level+1
\> from site_node_path p, site_nodes as c where c.node_id = p.parent_id
\> )
\> select
\> node_id, name, directory_p, level,
\> acs_object.name(object_id) as obj_name,
\> acs_permission.permission_p(object_id, :user_id, 'admin') as admin_p
\> from site_node_path order by level desc
\> \</querytext\>
\> \</fullquery\>
\>
\>
\>
--------------------------------------
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-subsite/www/admin/site-map/site-map-oracle.xql
--------------------------------------
52a53,69
\> \<fullquery name="path_select"\>
\> \<querytext\>
\> WITH site_node_path(node_id,parent_id,name,object_id,directory_p,mylevel) AS (
\> select node_id, parent_id, name, object_id, directory_p, 1 as mylevel
\> from site_nodes where node_id = :root_id
\> UNION ALL
\> select c.node_id, c.parent_id, c.name, c.object_id, c.directory_p, p.mylevel+1 mylevel
\> from site_node_path p, site_nodes c where c.node_id = p.parent_id
\> )
\> select
\> node_id, name, directory_p, mylevel,
\> acs_object.name(object_id) as obj_name,
\> acs_permission.permission_p(object_id, :user_id, 'admin') as admin_p
\> from site_node_path order by mylevel desc
\> \</querytext\>
\> \</fullquery\>
\>
--------------------------------------
http://localhost:8000/admin/themes/
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-subsite/www/admin/themes/index.xql
--------------------------------------
4d3
\< \<rdbms\>\<type\>postgresql\</type\>\<version\>7.1\</version\>\</rdbms\>
12c11
\< \</queryset\>
\ No newline at end of file
---
\> \</queryset\>
--------------------------------------
http://localhost:8000/acs-lang/admin/
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-lang/www/admin/index.xql
--------------------------------------
17,20c17,20
\< case when num_messages is null then 0 else num_messages end,
\< case when num_translated is null then 0 else num_translated end,
\< case when num_untranslated is null then 0 else num_untranslated end,
\< case when num_deleted is null then 0 else num_deleted end
---
\> case when num_messages is null then 0 else num_messages end as num_messages,
\> case when num_translated is null then 0 else num_translated end as num_translated,
\> case when num_untranslated is null then 0 else num_untranslated end as num_untranslated,
\> case when num_deleted is null then 0 else num_deleted end as num_deleted
52a53,56
\> al.label,
\> language,
\> default_p,
\> enabled_p,
--------------------------------------
http://localhost:8000/admin/groups/?view_by=rel_type
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-subsite/www/admin/groups/elements-by-rel-type.tcl
--------------------------------------
44c44
\< g.group_id = null as rel_type_valid_p,
---
\> null as rel_type_valid_p,
54,55c54,55
\< left outer join rel_segments s using (group_id, rel_type)
\< left outer join group_rels gr using (group_id, rel_type)
---
\> left outer join rel_segments s on (s.group_id = g.group_id and s.rel_type = g.rel_type)
\> left outer join group_rels gr on (gr.group_id = g.group_id and gr.rel_type = g.rel_type)
68c68
\< ) rels using (rel_type),
---
\> ) rels on (rels.rel_type = g.rel_type),
--------------------------------------
Add file:
http://localhost:8000/admin/group-types/
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-subsite/www/admin/group-types/index-oracle.xql
--------------------------------------
\<?xml version="1.0"?\>
\<queryset\>
\<rdbms\>\<type\>oracle\</type\>\<version\>8.1.6\</version\>\</rdbms\>
\<fullquery name="select_group_types"\>
\<querytext\>
with group_types(object_type,pretty_plural,mylevel) as (
select object_type, pretty_plural, 0 as mylevel
from acs_object_types
where object_type = 'group'
union all
select t.object_type, t.pretty_plural, s.mylevel + 1 as mylevel
from acs_object_types t,
group_types s
where t.supertype = s.object_type
)
select t.object_type as group_type, t.pretty_plural,
coalesce(num.number_groups,0) as number_groups,
t.mylevel * 4 as indent
from group_types t left outer join
(select object_type, count(group_id) as number_groups from
(select distinct o.object_type, g.group_id
from groups g, acs_objects o,
application_group_element_map app_group
where acs_permission.permission_p(g.group_id, :user_id, 'read') = 't'
and o.object_id = g.group_id
and ((app_group.package_id = :package_id and app_group.element_id = g.group_id)
-- the or-clause below is just needed for "Registered Users" (-2)
-- which is an application group for e.g. a subsite,
-- but not mapped to it via application_group_element_map
or (o.object_id = :registered_users)
)) counts
group by object_type) num
on (num.object_type = t.object_type)
order by indent asc
\</querytext\>
\</fullquery\>
\</queryset\>
--------------------------------------
http://localhost:8000/admin/group-types/one?group_type=group
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-subsite/www/admin/group-types/one.tcl
--------------------------------------
63,85c63
\< db_multirow -extend {one_attribute_url} attributes attributes_select {
\< with recursive group_hierarchy as (
\< select object_type, pretty_name, 1 as type_level
\< from acs_object_types
\< where object_type = 'group'
\<
\< union all
\<
\< select t.object_type, t.pretty_name, h.type_level + 1 as type_level
\< from acs_object_types t,
\< group_hierarchy h
\< where t.supertype = h.object_type
\< )
\< select a.attribute_id,
\< a.pretty_name,
\< a.ancestor_type,
\< t.pretty_name as ancestor_pretty_name
\< from acs_object_type_attributes a,
\< group_hierarchy t
\< where a.object_type = :group_type
\< and t.object_type = a.ancestor_type
\< order by type_level
\< } {
---
\> db_multirow -extend {one_attribute_url} attributes attributes_select { } {
--------------------------------------
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-subsite/www/admin/group-types/one-postgresql.xql
--------------------------------------
22a23,48
\> \<fullquery name="attributes_select"\>
\> \<querytext\>
\> with recursive group_hierarchy as (
\> select object_type, pretty_name, 1 as type_level
\> from acs_object_types
\> where object_type = 'group'
\>
\> union all
\>
\> select t.object_type, t.pretty_name, h.type_level + 1 as type_level
\> from acs_object_types t,
\> group_hierarchy h
\> where t.supertype = h.object_type
\> )
\> select a.attribute_id,
\> a.pretty_name,
\> a.ancestor_type,
\> t.pretty_name as ancestor_pretty_name
\> from acs_object_type_attributes a,
\> group_hierarchy t
\> where a.object_type = :group_type
\> and t.object_type = a.ancestor_type
\> order by type_level
\> \</querytext\>
\> \</fullquery\>
\>
--------------------------------------
Updated /var/www/oacs-5-10-0/openacs-4/packages/acs-subsite/www/admin/group-types/one-oracle.xql
--------------------------------------
25a26,50
\> \<fullquery name="attributes_select"\>
\> \<querytext\>
\> with group_hierarchy(object_type,pretty_name,type_level) as (
\> select object_type, pretty_name, 1 as type_level
\> from acs_object_types
\> where object_type = 'group'
\>
\> union all
\>
\> select t.object_type, t.pretty_name, h.type_level + 1 as type_level
\> from acs_object_types t,
\> group_hierarchy h
\> where t.supertype = h.object_type
\> )
\> select a.attribute_id,
\> a.pretty_name,
\> a.ancestor_type,
\> t.pretty_name as ancestor_pretty_name
\> from acs_object_type_attributes a,
\> group_hierarchy t
\> where a.object_type = :group_type
\> and t.object_type = a.ancestor_type
\> order by type_level
\> \</querytext\>
\> \</fullquery\>
--------------------------------------
RHEL8 did not have CVS in default repositories ...Interestingly, I did not see the problem with Roxy Linux 8.4, maybe CVS was dropped recently from the standard repos.
Many thanks for the fixes. When I did the first installation, I was happy to get OpenACS working with the Oracle Linux and the base regression test.... There are likely more places, that will have to be adapted for Oracle.
In case you are interested, I can provide you with write access to the CVS repository, this is probably less error-prone as when I use cut and paste from your forums message and add it myself. Just email me when you are interested....
I have taken already some of your changes into the repository.
All the best
Thank you
Normally, configuration files are kept at a secure place, but certainly, it is better, when passwords are never stored as plain text. Sometimes, it is an option to remove the password from the DB and only allow access from certain IP addresses (restricted IP address is highly common).
One more possibility would be to create e.g. an encryption key (e.g. as a PEM file), keep this in a safe place, get the key from there with e.g. ns_crypto API and decipher the encrypted password on the fly. One can save the call with the encrypted value in the configuration file, which can be programmatically decrypted at start time). But of course, when the key file is not kept safely, this does not help.
All the best
-g
[1] https://docs.oracle.com/cd/B19306_01/network.102/b14266/cnctslsh.htm#g1033548
Thank you
[04/Dec/2022:17:57:57][13704.7fe68a1e4700][-conn:oacs-5-10-0:default:0:18-] Debug(request): end GET /resources/acs-templating/forms .css HTTP/1.1 [04/Dec/2022:17:57:57][13704.7fe68a1e4700][-conn:oacs-5-10-0:default:0:18-] Debug(ns:driver): NsGetRequest got the pre-parsed reque st GET /resources/acs-subsite/action-link-marker.png HTTP/1.1 from the driver [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): ### Writer poll collect 0x7fe661bd3e80 size 14181 streaming 0 rateLimit 0 [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): ### Writer final pollTimeout -1 [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): Socket of pool '' is writable, writer limit 0 nsent 0 [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): ### Writer poll collect 0x7fe661bd4080 size 1851 streaming 0 rateLimit 0 [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): ### Writer final pollTimeout -1 [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): Socket of pool '' is writable, writer limit 0 nsent 0 [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): ### Writer 0x7fe661bd4080 can write to client fd 14 (trigge r 0) streaming 000000 size 1851 nsent 0 bufsize 349 [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): ### WriterReadFromSpool [0]: fd 27 tosend 1502 files 0 [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): ### WriterReadFromSpool 0x7fe661bd4080 1030000 leftover 349 offset 0 [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): Writer 0x7fe661bd4080 done OK (size 0) => RELEASE [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): WriterSockRelease 0x7fe661bd4080 refCount 0 keep 1 [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): Writer: closed sock 14, file fd 27, error 0/0, sent=1851, f lags=1030000 [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): NsSockClose sockPtr 0x7fe67400ab40 (14) keep 1 [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): NsSockClose calls RequestFree [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): === RequestFree cleans 0x7fe63906e170 (avail 0 keep 1 lengt h 0 contentLength 0) [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): RequestFree does not call Ns_ResetRequest on 0x7fe63906e178 [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): === Push request structure 0x7fe63906e170 in (to pool) [04/Dec/2022:17:57:57][13704.7fe67bfff700][-writer0-] Debug(ns:driver): ### Writer final pollTimeout 30000 [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): ### Writer 0x7fe661bd3e80 can write to client fd 24 (trigge r 0) streaming 000000 size 14181 nsent 0 bufsize 350 [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): ### WriterReadFromSpool [0]: fd 26 tosend 13831 files 0 [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): ### WriterReadFromSpool 0x7fe661bd3e80 1030000 leftover 350 offset 0 [04/Dec/2022:17:57:57][13704.7fe6891e2700][-driver:nssock:0-] Debug(ns:driver): === PollWait returned 1, trigger[0] 1 [04/Dec/2022:17:57:57][13704.7fe6891e2700][-driver:nssock:0-] Debug(ns:driver): setting keepwait 5.000000 for socket 14 [04/Dec/2022:17:57:57][13704.7fe6891e2700][-driver:nssock:0-] Debug(ns:driver): === PollWait returned 1, trigger[0] 0 [04/Dec/2022:17:57:57][13704.7fe6891e2700][-driver:nssock:0-] Debug(ns:driver): Peer has closed 0x7fe67400ab40 [04/Dec/2022:17:57:57][13704.7fe6891e2700][-driver:nssock:0-] Debug(ns:driver): SockRelease reason SOCK_CLOSE err 0 (sock 14) [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): Writer 0x7fe661bd3e80 continue OK (size 5989) => PUSH [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): ### Writer poll collect 0x7fe661bd3e80 size 5989 streaming 0 rateLimit 0 [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): ### Writer final pollTimeout -1 [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): ### Writer 0x7fe661bd3e80 reached POLLHUP fd 24 [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): Writer 0x7fe661bd3e80 fd 24 release, not OK (status -2) => RELEASE [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): WriterSockRelease 0x7fe661bd3e80 refCount 0 keep 1 [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): Writer: closed sock 24, file fd 26, error -2/0, sent=8192, flags=1030000 [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): NsSockClose sockPtr 0x7fe67400ad00 (24) keep 0 [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): NsSockClose calls RequestFree [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): === RequestFree cleans 0x7fe638709550 (avail 0 keep 0 lengt h 0 contentLength 0) [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): RequestFree does not call Ns_ResetRequest on 0x7fe638709558 [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): === Push request structure 0x7fe638709550 in (to pool) [04/Dec/2022:17:57:57][13704.7fe6889e1700][-writer1-] Debug(ns:driver): ### Writer final pollTimeout 30000 [04/Dec/2022:17:57:57][13704.7fe6891e2700][-driver:nssock:0-] Debug(ns:driver): === PollWait returned 1, trigger[0] 1 [04/Dec/2022:17:57:57][13704.7fe6891e2700][-driver:nssock:0-] Debug(ns:driver): SockRelease reason SOCK_CLOSE err 11 (sock -1) [04/Dec/2022:17:57:57][13704.7fe6891e2700][-driver:nssock:0-] Debug(ns:driver): SockRelease bypasses SockClose, since we have an invalid socket [04/Dec/2022:17:57:57][13704.7fe6891e2700][-driver:nssock:0-] Debug(ns:driver): DRIVER SockRelease: errno 11 drvPtr->closewait 2.000000 [04/Dec/2022:17:57:57][13704.7fe68a1e4700][-conn:oacs-5-10-0:default:0:19-] Dev: config: ns/server/oacs-5-10-0/acs:ExcludedFiles value= (string) [04/Dec/2022:17:57:57][13704.7fe68a1e4700][-conn:oacs-5-10-0:default:0:19-] Dev: config: ns/server/oacs-5-10-0/acs:ResourcesExpireInterval value= (string) [04/Dec/2022:17:57:57][13704.7fe68a1e4700][-conn:oacs-5-10-0:default:0:19-] Debug(ns:driver): NsWriterQueue: size 181 bufs (nil) (0) flags 1030000 stream 000000 chan (nil) fd 14 thread 2 [04/Dec/2022:17:57:57][13704.7fe68a1e4700][-conn:oacs-5-10-0:default:0:19-] Debug(ns:driver): NsWriterQueue: file is too small(181 < 1024)
What you spotted is not an error, but an error status shown in debug mode. You should only activate Debug(ns:driver) when modifying the driver source code, or when you are in deep trouble.
The error code 11 stands for EAGAIN on Linux system and means "there is no data available right now, but you might try again later". It is quite common that web clients terminate their connections ungracefully (e.g. users not waiting for a page to be loaded completely, and clicking on the next page).