Dear all,
on sourceforge is a release candidate for NaviServer 4.99.18 [1].
This release is primarily a bug-fix release for installations still
using Tcl 8.5, or installations having a half-working IPv6 installations.
Below is a - preliminary - summary of changes; especially the
summary of changes in the modules is missing. In case you have more
changes for this release, please commit or get in touch with me.
If everything goes well, the release should follow in about one week.
Please test if possible.
best regards
-gustaf
[1] https://sourceforge.net/projects/naviserver/files/naviserver/4.99.18/
=======================================
NaviServer 4.99.18, released 2019-XX-XX
=======================================
87 files changed, 2615 insertions(+), 1476 deletions(-)
New Features:
- Added ability to provide memory sizes via memory units (kB, MB, GB,
KiB, MiB, GiB) in the configuration files and commands. We follow
the approach taken by e.g. PostgreSQL and use 1024 as
multiplicator, which is e.g. useful for buffer sizes. All memory
sizes in the config files can be specified in memory
units. Currently, the only commands supporting memory units are
ns_cache_create, ns_cache_configure and ns_http. The configuration
based on integers without memory units continues to work.
- Portable config files (windows compatibility)
Rationale: unixoid platforms use traditionally ".so" as extension
of binary modules, no matter what "info sharedlibextension" is. On
macOS, the sharedlibextension returns ".dylib", while the module is
named ".so". Under windows, it seems that the extension of the module
has to be ".dll", so we can't write portable config
files without extra effort.
The new code tries now first to load the library as specified for
backward compatibility (maybe containing a file extension). When
this fails, it tries to append either ".so" in unixoid platforms or
".dll" under windows.
- new API call: ns_db currenthandles
Return information about handles currently allocated to the thread
performing this call. The result contains a dict with the pools,
from which handles were allocated, the names of the handles and
their "active" state (a handle is active between a "ns_db select"
and the last "ns_db getrow" statement). If no handles are allocated
by this thread, empty is returned.
For example, a possible result is "main {nsdb0 1} subquery {nsdb1
0}" indicating that the current thread has allocated handles from
pool "main" and "subquery", but the handle from pool "main" (i.e.
"nsdb0") is currently active (during a select).
This feature requires Tcl 8.5 or newer.
Performance Improvements:
- nsproxy: Fixed block in reaper thread that led to excessive time
spent in the main reaper loop, thus blocking the whole proxy
interface. This change improves concurrency and reduces potentially long
locks of the full nsproxy machinery.
Bug Fixes:
- improved compatility with Tcl 8.5
* make sure package "try" is used in regression test cases where needed
- ns_http
* Fixed potential problem with partial writes on HTTP requests
with large bodies (e.g. POST of larger files)
* Aligned implementation with documentation (if "wait" operation has no
timeout, use timeout of queue operation)
* Improved client connect() operations with half-configured IPv6
installations. This change addresses especially a problem, where
IPv6 is activated on a server, but it cannot be used to connect
to the outside world. In this situations, connect operations to
hosts with domain names having both IPv4 and IPv6 addresses
would fail, although IPv4 connections are possible. In this
cases, one should actually either deactivate IPv6 on the machine
or probably deactivate IPv6 name lookups in bind (option "-4",
filter-aaaa-on-v4 yes;). With this change, this should be be
necessary. This change fixes also a memory and socket leak in
this situation.
- Cache transactions: make "ns_cache flush $cache" behave like
"ns_cache_flush -glob $cache *" on "ns_cache_transaction_rollback".
Previously, when the full cache was flushed, the rollback was not
performed properly.
- tcl_crypto:
* align code with documentation (provide a default for option "-digest")
- nscgi:
* fixed potential memory leak
- ns_sourceproc: fix deprecated function in cases in error cases,
make clear in documentation that ns_register_procns_register_tcl
is the preferred approach (many thanks to Russell Sorensen for
reporting)
- tcl/nstrace.tcl: undo change introduced with 4.99.17 to exclude
content of ::tcl namespace since this causes problems with Tcl 8.5
(problems with clock or "package require try" when executed during
initial load phase.
- Ns_VarUnset(): Deleting the entire nsv array when last value is
deleted (many thanks to Andrew Piskorski).
Documentation improvements:
- all documentation: use memory units when appropriate
- doc/src/naviserver/ns_job.man: aligned documentation with
implementaton; use itemized list for describing entries in the
result lists.
- doc/src/manual/admin-maintenance.man:
Improved sample service file
- nsssl/doc/mann/nsssl.man:
Improved sample service file
- doc/src/naviserver/ns_log.man
Added sample configuration for configuring logging behavior
- doc/src/naviserver/ns_register.man,
doc/src/naviserver/ns_shortcut_filter.man: provide links (and
hints) between "ns_shortcut_filter" and "ns_register_filter"
- made markup in documentation more consistent
doc/src/naviserver/commandlist.man,
doc/src/naviserver/ns_adp_ctl.man, doc/src/naviserver/ns_cond.man,
doc/src/naviserver/ns_critsec.man, doc/src/naviserver/ns_env.man,
doc/src/naviserver/ns_event.man, doc/src/naviserver/ns_info.man,
doc/src/naviserver/ns_rwlock.man, doc/src/naviserver/ns_sema.man,
doc/src/naviserver/ns_writer.man, nslog/doc/mann/ns_accesslog.man
- various improvements in the following man pages
nsssl/doc/mann/nsssl.man
doc/src/manual/tcl-lib-file.man
Tcl API Changes:
C API Changes:
Incompatible API Changes:
Configuration Changes:
- Turn off Nagle algorithm (parameter nodelay) per default
since this leads in current Linux systems to bad performance
(e.g. seeing with Apache bench ~40ms per request latencency
when keepalive is used). The default is now set to fasel
in the C code as wel in nsd-config.tcl and openacs-config.tcl
- New parameter "logusecdiff": include time difference since last
log entry with microsecond (usec) resolution. This option is useful
for determine latencies with minimal effort.
- All sample config files:
* Remove file extensions for binary modules
* Improved documentation
- sample-config.tcl:
* Added sample for DNS configuration
* Added sample server log configuration
- openacs-config.tcl:
* Deactivated SSLv3 by default
* Adjusted comments to values from source code
* Add sorting to use always pick the library with the highest
version number
Command Line Changes:
Code Changes:
- Regressions testing:
* removed false positive
* extended tests: http.test, ns_striphtml.test, ns_cache.test
- Improved portability:
* fixed compilation issues for versions of OpenSSL before 1.0.2
* Windows changes (Many thanks to Andrew Piskorski):
+ Fixed compilation issues with nsssl under windows
+ Improved makefiles
+ use "I64u" or "I32u" instead of c99 conventions, since
these seem to be broken in many (all?) MSC versions.
- Reduced code security smells: add *CLOEXEC to file descriptor open
operation. This fixes no real issue (forks are very limited in
nsd), but silences static analyzers.
- Replaced UTF-8 string literals by hexadecimal-escape-sequences to
avoid potential encoding limitations from older compilers
- Improved code locality
- Removed unused macro
- Adding more declarations for PURE and CONST functions
- Eased live of static analysis programs
- Added "const" declarations, made symbol table static
- Reduced variable scopes
- Deduced dead assignments
_______________________________________________
naviserver-devel mailing list
naviserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/naviserver-devel