---------------------------------------------------------------------- ELOQUENCE B.08.00 - patch PE80-1012200 ---------------------------------------------------------------------- This patch adds enhancements or fixes defects of the eloqdb server program as released with Eloquence B.08.00. This patch will be integrated in the Eloquence B.08.00 release. Eloquence B.08.00 must be installed before applying this patch. Severity: PE80-1012200: BUG FIX Superseded patches: PE80-1005250: BUG FIX, ENHANCEMENT PE80-1002230: BUG FIX PE80-1001190: BUG FIX, ENHANCEMENT PE80-0912280: BUG FIX PE80-0911090: BUG FIX PE80-0909220: BUG FIX PE80-0907030: BUG FIX PE80-0906080: BUG FIX, ENHANCEMENT PE80-0905130: BUG FIX PE80-0904270: BUG FIX PE80-0904240: BUG FIX PE80-0904060: BUG FIX PE80-0903270: BUG FIX PE80-0903060: BUG FIX PE80-0903040: BUG FIX PE80-0902091: ENHANCEMENT PE80-0901090: BUG FIX PE80-0812180: BUG FIX Patch PE80-1012200 ------------------ Platforms: All * Fixed a problem where in a rare corner case the database server process could abort with a message like below (#3781): Assertion failed: !node->ref_count server panic: Aborting on internal failure, file nodecore.c, line 386 This was caused by an internal race condition between client session termination and a concurrent dbpurge operation on one of the involved databases. * Fixed a problem that could result in a server panic when deleting a record. The following message is written to the server message log: Assertion failed: set_ctx->idx_mode == IS_INVAL This can happen under the following conditions: 1. The database is accessed from the Eloquence language 2. The database client cache is enabled 3. Some records were read (eg. sequential) but additional records are in cache 4. A DBFIND on an index item in the same data set is called 5. A DBELETE is called to delete the record In this case the current record differs between the client and server side and nees to be re-established. However, a DBDELETE did not expect a previous index lookup in this case. Platforms: Windows * Fixed a problem on the Windows platform related to HTTP status timeout introduced with patch PE80-1005250. Patch PE80-1005250 ------------------ Platforms: All * The HTTP status was fixed to correctly support a timeout. * The HTTP status was enhanced to display additional information on the installed license in the config web page. * The server was enhanced to implicitly grant a DBA user administrative capabilities on a database. Previous versions by default granted administrative capabilities only to the account that was used to create the database. As a consequence, the following behavior is changed: Any user with DBA privileges may - purge or erase any database - dbstore or dbrestore any database - perform a dbdumpcat on any database - change the database structure - change the database access rights Please note that some of these functions are only available with an updated dbutil version. With previous server versions only the user that created a database (or was granted administrative capabilities subsequently) was able to perform these tasks. Other users, even with DBA privileges would fail. * The DBUPDATE mode 2 on a master set was changed to return status 43:0 instead of -804:0 when a duplicate key item value is specified. * Fixed a problem where in rare cases the a status -700:-3 was returned when establishing a connection to the db server. This was caused by a race condition when sessions connect and disconnect concurrently. In rare cases it could happen that queued events for a disconnected server connection were attributed to a new connection. This could have the effect that the db server terminated a session that was just started. Please notice there are a number of other causes for a status -700:-3 (such as lack of kernel or db server resources). Platforms: Linux * Fixed a problem with dbctl killthread not terminating an idle thread. Patch PE80-1002230 ------------------ Platforms: All * Fixed a problem where in rare cases the database server process could abort with a message like below (#3948): Assertion failed: tcp->wchan_type == Wait_OTHER && !tcp->wchan.ptr server panic: Aborting on internal failure, file thread.c, line 4813 This was caused by a race condition where a thread status was tested without obtaining the required lock. In rare cases it could happen the thread status changed unexpectedly. Patch PE80-1001190 ------------------ Platforms: All * The dbctl list session and dbctl list dbopen commands could in rare cases cause the database server to abort with a message like below if a filter condition was used (#3929): Assertion failed: audit server panic: Aborting on internal failure, file ssn_util.c, line 1245 This was caused by an internal race condition where a session was accessed that was just shutting down. * Improved the database compatibility checks on DBOPEN (#3930). * Improved the compatibility with dbstore archives that were created from databases that were previously recovered or replicated (#3921). Patch PE80-0912280 ------------------ Platforms: All * Fixed a problem where in rare cases the buffer cache failed to write a page modification to disk due to an internal race condition, resulting in an incorrect free-list page link/pointer (#3853). This caused the database server to abort subsequently with a message like below: Assertion failed: freelist_miss == 0 server panic: Aborting on internal failure, file volfrec.c, line 1065 When encountering this issue the dbfsck utility may be used to correct the damaged free-record lists. It is recommended to use the dbfsck version from patch PE80-0912040 (or newer). * A database restructuring could temporarily require significantly more available disk space in the data volume(s), as compared to Eloquence B.07.10 (#3908). While restructuring a data set, a lock was held that could block the checkpoint thread. If the checkpoint thread is blocked, temporarily occupied space in the data volume is not timely released. * Performing a replication or recovery after an abort of the database server process could in rare cases lead to inconsistent data set meta information (#3909). After an abnormal termination, the database server (or the dblogreset utility) perform a startup recovery. During this process, a special forward-log "bridge" segment is created that allows a dbrecover, dbrepl or fwutil process to continue across the previous abnormal termination. Replicating this bridge segment, or using it with dbrecover, could in rare cases incompletely update the data set meta information. * The dbctl list dbopen command could in rare cases cause the database server to abort due to a segment violation. This was caused by an internal race condition where a session was accessed that was just shutting down. * Fixed a race condition that could cause a corrupted disconnection log message output to the server message log (#3858). Patch PE80-0911090 ------------------ Platforms: All * An internal counter overflow could cause the database server to abort in rare cases with a message like below (#3875): Assertion failed: unexpected recursive lock server panic: Aborting on internal failure, file thread.c, line 1490 An internal 32-bit variable is incremented on every committed transaction and may therefore overflow after ~4 billion commit operations. This overflow is handled but could cause an unexpected side effect. * Searching an index could cause the database server to abort in rare cases with one of the below messages or a segmentation fault condition (#3879, #3880): Assertion failed: tmp_bhp->id.node_id == node_id server panic: Aborting on internal failure, file mpool.c, line 972 Assertion failed: bhp != NULL server panic: Aborting on internal failure, file mpool.c, line 2582 While an index is searched, a concurrently committed transaction may invalidate the index tree and the search operation must be restarted. In some rare cases, this conflict was detected too late and the search was continued although the index tree was invalidated in the meantime. As a consequence, index pages that did not have the expected state or no longer belonged to the index could be read. If this was detected, data corruption was assumed and a server panic was issued. If not, accessing the page contents caused a segmentation fault. * A dbutil CHANGE IITEM operation did not rebuild the associated indexes if only the offset into an item was changed for an index segment (#3884). As a consequence, the index data did not correspond to the index specification in the database schema. The index could be manually rebuilt to solve this problem. For example, the dbutil script below rebuilds the index associated with the IMATCHCODE index item in the CUSTOMERS data set: CHANGE SET CUSTOMERS { DELETE INDEX IMATCHCODE; ADD INDEX IMATCHCODE; } To enforce rebuilding an index, delete it from the data set and then add it again in the same dbutil script. * When a dbutil ADD ITEM data set clause is used to add an item of type P (packed) to a data set, the subsequent restructuring process now initializes this new P item to unsigned zero (#3857). Previously, a new P item was initialized to binary zero. * After a dbutil RENAME DATABASE operation, the audit information in the forward-log was not updated until a new forward-log file was started (#3868). In the database audit, the renamed database remained visible under its previous name until the end of the current forward-log file. * If a transaction was committed after a related database was closed, it could happen in rare cases that the associated audit information was not written to the forward-log (#3869). In such a case, the affected actions did not appear in the database audit. * A forward-log bridge segment was not correctly restarted (#3883). After an abnormal termination, the database server (or dblogreset) performs a startup recovery. During this process, a so called forward-log bridge segment is created that allows a dbrecover or dbrepl or fwutil process to continue across the previous abnormal termination. If for any reason the startup recovery is aborted so that the bridge segment is not completely created, the bridge segment should be restarted and completed on the next startup recovery. Due to an internal initialization problem, this did not work as intended. As a consequence, the database server (or dblogreset) failed to start with a message like below if the bridge segment already exists: unable to create forward-log ... File exists (errno 17) Note: failed to restart forward-logging To solve this problem, the existing bridge segment must be manually deleted before starting the database server or dblogreset. * An internal race condition could cause an unexpected time stamp information in the database server log file. If log entries were written simultaneously by concurrent threads, a wrong time stamp information could be output. * When reporting a server panic, the database server often issued another server panic caused by a segmentation fault condition. This is now suppressed. Also, in case of a server panic the IPC semaphore resources were not properly cleaned up. Patch PE80-0909220 ------------------ Platforms: All * Fixed a problem which in a rare corner case could cause a database server to abort with a message like below (#3852): Assertion failed: tx_data_prev.op == BT_TX_NewPage || tx_data_prev.op == BT_TX_UpdPage server panic: Aborting on internal failure, file btree.c, line 1089 This was a transient problem, caused by an internal race condition, and had no impact on the database, except that the database server had to be restarted. Patch PE80-0907030 ------------------ Platforms: All * Fixed a potential memory leak when using multiple consecutive wildcard characters in a DBFIND argument (#3794). * Fixed a problem with DBFIND wildcard arguments where a "?*" sequence was evaluated as a single '*' wildcard character (#3794). Patch PE80-0906080 ------------------ Platforms: All * Fixed a potential memory leak when a dbctl list output exceeded the size of the shared memory communications buffer (#3785). * The dbctl list command was enhanced. A filter expression may be specified and the /count option may be used to only obtain the number of matching entries. For example: $ dbctl list session "pname=*query3k*" $ dbctl list lock /count "status=blocked" Please refer to the dbctl documentation for details: http://eloquence.marxmeier.com/support/B0800/doc/dbctl/index.html#list Patch PE80-0905130 ------------------ Platforms: All * Fixed a problem which could cause the database server to temporarily hang while on-line backup mode was shutting down (#3782). If a checkpoint operation overlapped with stopping on-line backup mode, the checkpoint could block and in turn block any existing or new database sessions until on-line backup mode was shut down. Patch PE80-0904270 ------------------ Platforms: All * This patch corrects a problem introduced with fix #3777 delivered with the previous patch PE71-0904240. Patch PE80-0904240 ------------------ Platforms: All * The dbctl forwardlog restart command did not immediately update the volume generation count in the log volume (#3777). As a possible consequence, the database server could fail to start with a message like below if it was abnormally terminated after a dbctl forwardlog restart was issued: failed to open volume: volume ... has inconsistent generation count As a workaround it is possible to manually update the generation count in the log volume in this case. Please contact support if you are affected by this. Patch PE80-0904060 ------------------ Platforms: All * Fixed a problem where a database was not immediately available after a dbutil restructuring (#3751). A subsequent DBOPEN executed immediately after a restructuring dbutil process had finished could in some cases encounter a database status -2 (database in use). * Resuming a replication or recovery could in rare cases abort with a message like below (#3752): Assertion failed: Fwr_PageHashAdd() failed: key already present server panic: Aborting on internal failure, file volfwr.c, line 5367 This could happen in a corner case if a user transaction spans multiple forward-log files, where BTREE PAGE actions are present in different files at identical offsets. Under these conditions the problem could be triggered if these files had to be processed to locate the last status of the replication progress. * Resuming a replication or recovery could in rare cases abort with a message like below (#3755): recovery failed ... node ... page ... not in expected state Assertion failed: h->lower == data->lower server panic: Aborting on internal failure, file btree.c, line 2382 This could happen in a corner case if a user transaction spans multiple forward-log files, where the transaction was executed immediately after the last status of the replication progress was found and the replication was resumed. Patch PE80-0903270 ------------------ Platforms: All * Under certain conditions the database server could hang due to an internal deadlock (#3739). In rare cases under high load, if a deadlock was detected between two tasks so that one of these tasks was signaled, and at the same time another task detected the same conflict as the task being signaled, a deadlock could occur. As a consequence, the database server did no longer accept new connections and could not be shut down but had to be killed. * In rare cases under high load, the database server could abort with a message like below (#3741): Assertion failed: current_task->waiting_for == NULL server panic: Aborting on internal failure, file thread.c, line 2837 If a deadlock was detected between two tasks so that one of these tasks was signaled, the task being signaled could in some cases remain connected to the conflicting task. This could then cause the problem to occur due to an out-of-context notification. * A race condition was fixed that could cause a DBPUT or DBUPDATE operation to fail with a -809/1024 status (#3742). During a DBPUT or DBUPDATE executed simultaneously with a DBDELETE, the database server could temporarily encounter an inconsistent state of an automatic master chain head, where the master key was found in the index while the corresponding master record did no longer exist. * A race condition was fixed that could cause a wrong date/time prefix being written to the database server log file (#3731). Patch PE80-0903060 ------------------ Platforms: All * An internal memory leak was fixed (#3708). Some memory was not correctly released when a new connection was established. This may eventually result in memory allocation failures that require a re-start of the database server process. Patch PE80-0903040 ------------------ Platforms: All * A dbutil RENAME DATABASE operation could cause the database server to abort with a message like below (#3704): Assertion failed: SysCat_LinkAddrEquals ... server panic: Aborting on internal failure, file syscat.c, line 1943 * An internal memory leak was fixed (#3708). Some memory was not correctly released when closing a connection. This may eventually result in memory allocation failures in the database server process that require a re-start of the server process. * In rare cases, a malformed client request or an incomplete tcp/ip network packet could cause the database server to abort with a message like below (#3705): Assertion failed: size != 0 server panic: Aborting on internal failure, file buffer.c, line 777 Patch PE80-0902091 ------------------ Platforms: All * This patch enables dbutil to change item order (#3689). Notes / Related patches: - dbutil patch PE80-0902090 (or superseding) supports changing item order. Patch PE80-0901090 ------------------ Platforms: All * Fixed an internal race condition that could cause a database server abort in rare cases when concurrently disconnecting multiple database sessions (#3696). A message like below is output to the log file: Assertion failed: thread_rwlock_destroy failed server panic: Aborting on internal failure, file thread.c, line 1815 The stack trace shows the following call stack: (1) thread_rwlock_destroy (2) Node_DeleteNodeMempageIfEmpty (3) Node_Delete (4) Tlog_Destroy (5) idb_exit_session * The dbctl forwardlog status command no longer requires dba privileges. Patch PE80-0812180 ------------------ Platforms: All * During an automatic forward-log file switch it could happen in rare cases that transactions were not written to the forward-log (#3694). As a consequence, a recovery or replication from this forward-log would fail, for example with a message like below: recovery failed in action ... page ... not in expected state server panic: Fatal problem detected in btree_FWR__verify_page Assertion failed: h->lower == data->lower * A DBGET mode 6 or 16 on an index item could improperly return an end-of-chain condition when the last key in the index was deleted (#3683). Installation: ------------- Please download the patch archive that corresponds with the installed release. The patch files follow the conventions below: PE80-1012200-hpux-ia64.tar.gz ^ ^ ^ | | Architecture / OS specific build | Operating system Patch ID HP-UX: In order to install this patch, you need to unpack it with gzip and tar. Gzip is included with HP-UX. Installation requires root privileges. cd /opt/eloquence/8.0 gzip -dc /path/to/PE80-1012200-hpux.tar.gz | tar xf - Files: bin/eloqdb32 (32 bit database server) bin/eloqdb64 (64 bit database server, not available on hpux-pa11) share/doc/PE80-1012200-README Linux: In order to install this patch, you need to unpack it with tar. Installation requires root privileges. cd /opt/eloquence/8.0 tar xzf /path/to/PE80-1012200-linux.tar.gz Files: bin/eloqdb32 (32 bit database server, only available on linux-i686) bin/eloqdb64 (64 bit database server, not available on linux-i686) share/doc/PE80-1012200-README Windows: Two options are available for patch installation. The patch is available as self extracting archive for automatic installation and as a zip archive for manual installation. Both patches are equivalent. Installation requires administrative capabilities. For automatic installation of this patch, please download the patch file PE80-1012200-win32.exe. Before installation, please consider stopping the database server, then execute the patch installation program. Installation does not require a reboot unless the patched files were active. For a manual installation of the patch, please download the patch file PE80-1012200-win32.zip and unpack its contents. Then perform the following steps: * Please make sure the eloqdb service is stopped before installing the patch (in the Service Control Manager or with net stop eloqdb). * Please copy the eloqdb32.exe and eloqdb64.exe files into the Eloquence bin directory. (Default location: C:\Program Files\Eloquence\8.0\bin) * Please copy the PE80-1012200-README.txt file into the Eloquence share\doc directory. (Default location: C:\Program Files\Eloquence\8.0\share\doc) Files: eloqdb32.exe (32 bit database server) eloqdb64.exe (64 bit database server) PE80-1012200-README.txt