Eloquence B.07.00 Release Notes
Database changes and limitations
[ Main document |
Back ]
Contents:
Note:
The following recent change might affect you if you are using the
Eloquence database and/or TurboIMAGE client API libraries on the
HP-UX platform.
This is a summary of all changes and fixed problems relative to
Eloquence version B.06.32.
- DBOPEN has been changed to return a more specific status when it fails
to open a database (#471, #1694).
- Status -21 is returned if the user has no access to the database.
When the user is a member of an administrative group for the database
(as the database creator is by default), opening the database
succeeds although no access to any data set may be possible.
- Status -92 is returned, when the database is not created.
When the current user is a member of an administrative group (as
the database creator is by default), opening the database succeeds
although it has not been created.
- Status -3 or -4 is returned if the user is either unknown to
the server process or the wrong password was provided.
- Status -2 is returned when the database cannot be opened
in the specified mode (due to a concurrent open).
The tenth status element returns additional information:
- 1 - The database is opened concurrently in an exclusive mode
- 2 - The database cannot be opened in an exclusive mode because
it is in concurrent use
- 3 - The database can only be opened in readonly mode (concurrent
open in mode 8)
- 4 - The database cannot be opened in read exclusive mode (mode 8)
because it is opened concurrently in read/write mode
This status is
returned as -1 in the Eloquence language for compatibility reasons.
- Status -1 is returned otherwise.
- Restoring a database will now place the executing user into the
dba group to allow administrative access to the restored database (#799).
Previously, restoring a database could fail if the user had no administrative
access to the database to be restored.
- dbexport performance has been improved significantly (#1587).
dbexport has been modified to use the more efficient bulk fetch
access method (if supported by the server). The -b command line option
can be used to fallback to the previous behavior.
- The dbimport utility has been changed to be more useful when using
a single import file (-s option given). dbimport does now import in
export file order. Furthermore, in restructure mode (-r option present)
it is able to make use of the data set names embedded in the file.
This also fixes a number of minor dbimport problems (#952,#1339,#1744).
- The NoDNS configuration item is now set by default (#1649).
This change disables the reverse DNS lookup for incoming
connections by default. The reverse lookup is known to cause
eloqdb6 crashes with some glibc versions used by recent Linux
distributions (Red Hat 8.x and SuSE Linux 8.1). It also may cause
delays on all platforms in case of a wrong DNS configuration.
- Added support for dbctl "backup status" command which returns
current status of on-line backup (#677).
The following messages are returned:
On-line backup mode is inactive.
On-line backup mode is active.
- DBOPEN mode 8 did not allow a concurrent read-only DBOPEN
mode (such as mode 8 or mode 9).
- The max. number of I/O threads has been increased to 64.
The previous max. value of 8 I/O threads could result in
performance issues with large databases and a big number of
concurrent users.
- I/O scheduling and completion processing has been optimized
to consume less CPU resources with bigger configurations.
With previous versions a configuration with a large number of
threads could cause a noticeable overhead.
-
dbctl shutdown could result in an error message about a problem
communicating with the database server (#1161).
This was caused by a race condition where the server could
terminate before dbctl could close the connection properly when
IPC communication (EnableIPC) was used.
An error message is like below could be output:
$ dbctl -u dba shutdown
Shutting down now.
(14909) P0: Unable to up semaphore
(14909) P0: semop(UP): Invalid argument (errno 22)
(14909) P0: Server notification failed
A related problem could also cause a resource leak during shutdown
where a shared memory segment was not freed.
- dbvolextend now requires that the volume type is specified
explicitely on the command line using the -t command line
option (#1299). Previous versions of dbvolexend used a default
DATA volume type. This change was made to avoid possible mistakes
where a DATA volume instead of a LOG volume is created.
- dbvolextend no longer issues warning messages when recreating a
missing log volume after recovering from online backup (#826).
LOG volumes may be omitted from an online backup and can be
recreated with the dbvolextend utility if necessary.
- dbfsck refuses to execute in write mode if the server was not
shutdown cleanly unless the -f command line option is specified.
When the server is terminated unexpectedly important recovery information
is saved in the log volume. Since dbfsck ignores any log volume
content improper usage of dbfsck write mode may cause volume
corruption.
- A problem was fixed which could cause the database server
process to spin in the idle thread instead of blocking and
consuming considerable CPU resources.
This problem was caused by a corner case when the configured
connections were exhausted and the HTTP status was not configured.
Instead of rejecting additional incoming connections the database
server could accept one extra connection but was unable to associate
the network events properly (#1336).
- dbctl killthread now allows to terminate an idle session (#798).
Previously, only blocked sessions could be terminated.
- When a log file is used (instead of syslog) eloqdb6 will prepend
each line with the current date and time (#923).
- If a volume reaches its maximum size redundant log messages are
suppressed (#1063). Previoiusly, a note was written to the log
for each log volume which had reached its max. size. This note
is only output once now.
- Fixed the HTTP status performance display. Average is estimated
for the last 10 minutes (#1008). Bar graph images can now be cached in
the web browser (#1342).
- The HTTP status now displays the server title in the page header
if specified in the server configuration file (#1173).
- To avoid compiler warnings the eloqdb.h header file has been
changed. The buffer arguments for the idb_get(), idb_update() and
idb_put() prototypes have been changed from char* to void* (#1102).
- DBUPDATE mode 1 does no longer allow to change a sort item
and a database status is returned (#986).
- DBUPDATE could fail to check if the updated record was covered
by a concurrent lock. A status -12 is returned if the new record is
covered by a concurrent lock (#986).
- Added support for default collating sequence which is used for
master set indexes and sort items.
- If the schema processor is unable to create the database the
reason (as returned by the server) is output (#1204).
*** (FATAL) Database "SAMPLEDB" already exists
- prschema could return wrong access rights in the schema file
(#668).
- The AllowSecondaryBlockingLock configuration item is now enabled
by default (#1272).
- The Eloquence client side API and all database tools have
been modified to support the EQ_DBSERVER, EQ_DBUSER and EQ_DBPASSWORD
environment variables.
The EQ_DBSERVER, EQ_DBUSER and EQ_DBPASSWORD environment variables
can be used to specify the default database server, user and
password. Please refer to the sections on
Database Names
and Authorization for a description.
- The dbdumpcat utility has been improved to support an additional
output format which is easier to parse in a script and allows listing
the catalog tables.
- dbimport on HP-UX and Linux handles export files which
use CR/LF line terminators.
- New DBINFO mode 505 has been added to return a list of all
data sets which contain a specific index item.
- New DBINFO mode 303 has been added to return sort item
with path information. This supplements DBINFO mode 301
which does not support sort items.
- Index items can now be named identically to data items.
- Performance enhancements.
For some write intensive workloads the performance has increased by 25%.
- Improved reliability in case of abnormal server termination.
Below is a list of all changes since Eloquence B.07.00 pre-release 1
(X2301).
Note:
The following recent changes might affect you when updating from a
previous Eloquence B.07.00 pre-release.
-
As of PR#8 the forward-log configuration has
changed. The relevant items are now configured in a separate section
in the database server configuration file. If you use forward
logging, please make the appropriate changes to your eloqdb6.cfg
file.
-
As of PR#12 additional forward-log configuration items are
available to allow defining the eloqdb6 behavior in case of a
failure to write to the forward-log file and configure the maximum
size of automatically managed forward-log files.
B.07.00 Release:
- Support use of collating sequences for lookup on master sets
using DBFIND modes 6 and 7 (#1360).
- Fixed a problem with the DBFIND mode 6 and 7 to enable usage
with master sets and search items.
Please note that this feature is currently not enabled on the
server side.
- Handle SIGPIPE signal more gracefully. A configuration mistake
in the server configuration file could result in a SIGPIPE signal
and shutdown the server process.
- The eqdb database client library could pollute the application
namespace. All internal functions are now prefixed with eq__
to avoid interaction with an application.
B.07.00 RC2:
B.07.00 PR#12 (X2312):
- The NoDNS configuration item is now set by default (#1649).
This change disables the reverse DNS lookup for incoming
connections by default. The reverse lookup is known to cause
eloqdb6 crashes with some glibc versions used by recent Linux
distributions (Red Hat 8.x and SuSE Linux 8.1). It also may cause
delays on all platforms in case of a wrong DNS configuration.
- If a forward-log cannot be written, e.g. due to insufficient disk space,
the default action is now to disable forward-logging and continue normal server
operation. Previously, the server issued a panic and stopped. If desired, the
previous behavior can be configured (#1670).
- If a forward-log is re-enabled
(dbctl -u dba forwardlog enable)
creation of the new forward-log is delayed until the next on-line backup or
server restart.
- Recovering from a forward-log could fail with the following message
(#1726):
panic: Fatal problem detected in Node_RecoverItemPage
Assertion failed: rec->timestamp == ihead->timestamp + 1
file B0700/eqdb/server/storage/nodeilist.c, line 1318
- On Windows, using LogLevel 3 could result in a server crash.
The Eloquence database utilities were affected as well and using
LogLevel 3 could cause the utility program to abort.
- DBLOGON could cause a server panic if an incorrectly encrypted
password was transmitted (#1350):
server panic: Fatal problem detected in decrypt_pswd
Assertion failed: decrypt_pswd() failed on decrypt_msg_hex()
server panic: Aborting on internal failure, file dbml.c, line 1037
This has been solved by returning the status -4 (S_BADPSWD) in case
the password cannot be decrypted but the user demands a password.
B.07.00 PR#9 (X2309):
B.07.00 PR#8 (X2308):
B.07.00 PR#7 (X2307):
- A problem was fixed where passing an invalid item or data
set number could result in a program abort (bus error).
Qualifiers which do not meet the alignment requirements are
now considered a string argument.
- DBOPEN mode 8 did not allow a concurrent read-only DBOPEN
mode (such as mode 8 or mode 9).
- The max. number of I/O threads has been increased to 64.
The previous max. value of 8 I/O threads could result in
performance issues with large databases and a big number of
concurrent users.
- I/O scheduling and completion processing has been optimized
to consume less CPU resources with bigger configurations.
With previous versions a configuration with a large number of
threads could cause a noticeable overhead.
- A race condition was fixed which could result in a dbpurge or
dberase failure or a server panic (#1165).
A race condition with dberase or dbpurge and the internal checkpoint
thread could cause dberase to fail in some cases if the database was
modified since the last checkpoint operation.
A message like below was logged:
Node_Reset() failed: Node is still referenced ...
On a related problem a dbpurge operation could result in a
server panic:
D0: server panic: Fatal problem detected in Node_Delete
D0: Assertion failed: !node->ref_count
D0: server panic: Aborting on internal failure, file nodecore.c, line 241
- An internal deadlock condition was fixed which could occur
with the schema processor. The schema processor could hang while
writing to the database catalog and the server would hang on
shut down (#1237).
- A corruption problem was fixed which could happen after
recovery from abnormal server termination (#1228).
-
dbctl shutdown could result in an error message about a problem
communicating with the database server (#1161).
This was caused by a race condition where the server could
terminate before dbctl could close the connection properly when
IPC communication (EnableIPC) was used.
An error message is like below could be output:
$ dbctl -u dba shutdown
Shutting down now.
(14909) P0: Unable to up semaphore
(14909) P0: semop(UP): Invalid argument (errno 22)
(14909) P0: Server notification failed
A related problem could also cause a resource leak during shutdown
where a shared memory segment was not freed.
- dbvolextend now requires that the volume type is specified
explicitely on the command line using the -t command line
option (#1299). Previous versions of dbvolexend used a default
DATA volume type. This change was made to avoid possible mistakes
where a DATA volume instead of a LOG volume is created.
- dbvolextend no longer issues warning messages when recreating a
missing log volume after recovering from online backup (#826).
LOG volumes may be omitted from an online backup and can be
recreated with the dbvolextend utility if necessary.
- dbfsck refuses to execute in write mode if the server was not
shutdown cleanly unless the -f command line option is specified.
When the server is terminated unexpectedly important recovery information
is saved in the log volume. Since dbfsck ignores any log volume
content improper usage of dbfsck write mode may cause volume
corruption.
- Support for search items in manual master sets which are not
the first item in the entry has been added. Previous Eloquence
versions required that the first item in a manual master set was
used as the search item.
Currently, this option must be enabled explicitely by specifying
the -x command line option to the schema processor, otherwise an
error message is issued by schema (#1230).
*** Search item must be the first item in master sets
- A problem was fixed which could cause the database server
process to spin in the idle thread instead of blocking and
consuming considerable CPU resources.
This problem was caused by a corner case when the configured
connections were exhausted and the HTTP status was not configured.
Instead of rejecting additional incoming connections the database
server could accept one extra connection but was unable to associate
the network events properly (#1336).
- dbctl killthread now allows to terminate an idle session (#798).
Previously, only blocked sessions could be terminated.
- When a log file is used (instead of syslog) eloqdb6 will prepend
each line with the current date and time (#923).
- If a volume reaches its maximum size redundant log messages are
suppressed (#1063). Previoiusly, a note was written to the log
for each log volume which had reached its max. size. This note
is only output once now.
- Fixed the HTTP status performance display. Average is estimated
for the last 10 minutes (#1008). Bar graph images can now be cached in
the web browser (#1342).
- The HTTP status now displays the server title in the page header
if specified in the server configuration file (#1173).
- To avoid compiler warnings the eloqdb.h header file has been
changed. The buffer arguments for the idb_get(), idb_update() and
idb_put() prototypes have been changed from char* to void* (#1102).
- DBUPDATE mode 1 does no longer allow to change a sort item
and a database status is returned (#986).
- DBUPDATE could fail to check if the updated record was covered
by a concurrent lock. A status -12 is returned if the new record is
covered by a concurrent lock (#986).
- Added support for default collating sequence which is used for
master set indexes and sort items.
- If the schema processor is unable to create the database the
reason (as returned by the server) is output (#1204).
*** (FATAL) Database "SAMPLEDB" already exists
- prschema could return wrong access rights in the schema file
(#668).
- Support for shared memory communication (EnableIPC) with memory
windows on the HP-UX platform has been implemented (#1259).
- The sysdbproperty catalog table has been added which is used
to store database properties such as the default collating sequence.
- The AllowSecondaryBlockingLock configuration item is now enabled
by default (#1272).
B.07.00 PR#6 (X2306):
- An internal deadlock situation has been fixed which could result
in a hang of the eloqdb6 server process (#1166).
- While the eloqdb6 shutdown has been initiated but not yet completed,
the server could spin in the idle thread rather than blocking, causing
100% CPU load until the shutdown completes.
- The Eloquence client side API and all database tools have
been modified to support the EQ_DBSERVER, EQ_DBUSER and EQ_DBPASSWORD
environment variables.
The EQ_DBSERVER, EQ_DBUSER and EQ_DBPASSWORD environment variables
can be used to specify the default database server, user and
password. Please refer to the sections on
Database Names
and Authorization for a description.
- The schema processor has been modified to improve TurboIMAGE
syntax compatibility.
- The prschema utility has been improved to support the new B.07.00
functionality.
- The dbdumpcat utility has been improved to support an additional
output format which is easier to parse in a script and allows listing
the catalog tables.
- A problem with the DBFIND function was fixed to properly
handle the situation where an index item has the same name as a
search item but was not valid for the specified data set.
B.07.00 PR#5 (X2305):
B.07.00 PR#4 (X2304):
- A failure during forward-logging, eg. due to a file system overflow,
could cause the internal generation counters of the data and log volumes
to differ after restarting the server. The server would refuse to start,
requiring manual recreation of the log volumes with dbvolextend.
- The TurboIMAGE DBFIND TPI modes 1 and 21 did not work as expected
when used with wildcard search patterns.
- The static Eloquence database library is provided for
applications which do not allow dynamic linking. We, however, do not
recommend linking your programs statically as this will require
re-linking your application in case of a bug fix or new version.
B.07.00 PR#3 (X2303):
- New DBINFO mode 505 has been added to return a list of all
data sets which contain a specific index item.
- DBFIND and DBGET have been enhanced to support TurboIMAGE TPI modes.
B.07.00 PR#2 (X2302):
- Native support for TurboIMAGE item types.
The item types P (packed decimal), Z (zoned decimal), K (unsigned
integer) and U (upper case string) are now fully supported as well
as arbitrarily sized I (signed integer) type items.
Eloquence is still fully compatible with previous versions.
Item types not supported with previous versions are returned as
type B (binary) or X (string).
- Database limits have been modified to follow or extend the
current TurboIMAGE limits.
- New DBINFO mode 303 has been added to return sort item
with path information. This supplements DBINFO mode 301
which does not support sort items.
- Index items can now be named identically to data items.
- The database utilities have been modified to support the new
item types and the enhanced database limits.
B.07.00 PR#1 (X2301):
- Forward logging has been integrated.
This provides additional protection against system failure and speeds
up recovery in case of a fatal problem.
- Performance enhancements.
For some write intensive workloads the performance has increased by 25%.
- Improved reliability in case of abnormal server termination.
The following issues are known with the B.07.00 release:
-
The forward logging functionality could require a large amount of
disk space if used other than intended. Be sure to disable forward
logging during dbimport or other unusual activities.
This should not cause a problem during normal usage.
-
On the Linux platform, eloqdb6 adds extra spaces to the
command line as returned by the ps utility (#1062).
-
dbutil currently does not allow to define a position
in the schema, where a data set should be
inserted. New data sets are always appended
(with the exception of a master set which has a path to
an existing detail).
-
When restructuring a database, dbutil is blocked until the
server operation is finshed. This could take considerable
time, depending on the database size and operations required.
-
On Red Hat Linux 8.0 and above, the IOthreads may not be visible
in the process list (ps command). The option -m must be specified
to output threads.
-
On Red Hat Linux 8.0 and SuSE 8.1 reverse DNS lookup (setting NoDNS=0)
can cause the eloqdb6 process to crash. This is related to glibc changes
which uses excessive stack space for DNS lookup. By default the
reverse lookup is now disabled.
- DBFIND modes 6 and 7 currently can not operate on master
sets and search items but are restricted to index items.
- DBFIND modes 6 and 7 are currently not available from the
Eloquence programming language.
With the B.07.00 database server, a new log volume format has been
introduced which is incompatible with previous Eloquence releases.
However the Eloquence data volumes are fully backwards compatible
with previous versions.
- Whenever you start the new B.07.00 database server or use any of
the new B.07.00 database utilities such as dblogreset
or dbfsck with an existing volume, the log volume
format is changed, making the log volumes incompatible with earlier
versions such as A.06.3x and B.06.32.
- In order to use your database environment with previous
Eloquence versions you need to re-create the log volume(s)
with the previous log file format.
This requires at least Eloquence A.06.30 because earlier
versions did not allow to recreate a log volume.
To restore the old log volume format, please follow the
instructions below:
- Run the B.07.00 dblogreset utility to
make sure your log volumes are empty.
- Delete the log volumes.
- Use the A.06.3x or B.06.32 dbvolextend utility
to re-create the log volumes with the old format:
dbvolextend -t log /db/log/log01.vol
dbvolextend -t log /db/log/log02.vol
- Now you can use the volumes in your previous A.06.3x or B.06.32
environment.
© Copyright 2002-2003 Marxmeier Software AG. All rights reserved.
Revision: 2003-03-19
|