---------------------------------------------------------------------- HP ELOQUENCE A.06.20 - patch 0101240 ---------------------------------------------------------------------- This patch fixes a defect of the eloqdb6 program as released with A.06.20. This patch will be integrated in a subsequent HP Eloquence release. A.06.20 must be installed before applying this patch. This patch replaces patches PE62-9902110, PE62-9902170, PE62-9902221, PE62-9902222, PE62-9903080, PE62-9903290, PE62-9903311, PE62-9904060, PE62-9904120, PE62-9905250, PE62-9906100 (beta), PE62-9908310 (beta), PE62-9909020 (beta), PE62-9911300 (beta), PE62-0001060 (beta), PE62-0003040 (beta), PE62-0003280 (beta), PE62-0006020 and PE62-0009080. Fixed problems: --------------- Platforms: All * A server crash during schema, dbcreate, dberase or dbpurge could result in data corruption under rare circumstances. * The IPC communication method (using shared memory) is now disabled by default (the EnableIPC setting in the eloqdb6.cfg configuration file now defaults to 0). This is a workaround due to problems encountered on some HP-UX systems which could result in an eloqdb6 panic due to a failed writev() system call and also possibly corrupt your database volume. This is believed to be a bug in the HP-UX kernel. Since IPC communication does not significantly improve overall overall performance disabling it should not have any noticable effect. * On Linux SMP systems shutting down the eloqdb6 server could sometimes cause a segment violation (SIGSEGV). * Using regular expressions with DBFIND could cause the server to hang infinitely under rare circumstances. * A newline character was missing in the 'dbctl list lock' output. * A problem has been resolved which could cause SQL/R to return incomplete results on a query on a busy database if the query was optimized by an index. SQL/R uses an API to the data base server which allows it to optimize queries with indexes. A write access to the database could cause any index cursor to become invalid. In this case an EOF condition was wrongly assumed. The index cursor is now revalidated appropriately. Patch PE62-0009080 ------------------ Platforms: All * A problem related to stopping online backup mode was solved. Depending on database usage during online backup this could result in data corruption when stopping online backup mode. When the HP Eloquence database is in online backup mode committed transactions are saved in the log volume not the data volume(s). When the online backup mode is stopped (through dbctl backup stop) committed transactions are transferred from the log volume to the data volume(s). This could cause an extension of the data volume. A volume extension while transferring committed transactions from the log volume to the data volume could cause corruption of information in the log volume. Symptoms: - server panic after stopping online backup mode - dbfsck reports volume corruption * Under rare circumstances a volume crash recovery could corrupt the data volumes. This can happen when the eloqdb6 server has crashed or was terminated with kill -9. In this case all committed transactions since the last checkpoint operation are recovered from the log volume during eloqdb6 startup. A problem was found if a data area affected by a transaction was deleted by a subsequent transaction and has been re-used since the last checkpoint operation. In some cases this could lead to corruption of structural volume information. This has been fixed by delaying page re-use until the next checkpoint operation. Symptoms: - server panic during volume crash recovery * When an eloqdb6 server panic (internal error) is encountered the eloqdb6 process restarts itself by default. This can be configured in the eloqdb6.cfg configuration file with the panic= configuration item. When eloqdb6 encounters a fatal problem during startup this will cause eloqdb6 to be started in an endless loop, possibly filling the log file and using system resources. Now eloqdb6 will not restart automatically if a problem during restart is encountered. Patch PE62-0006020 ------------------ Platforms: All * A problem related to rollback of subtransactions was solved. Depending on database usage this could result in btree corruption or an eloqdb6 server panic. When a subtransaction was rolled back but the main transaction continued it could happen that invalidated btree information remained in memory and was used by subsequent btree operations. This problem could only happen when using transactions. Symptoms: - Assertion failed: f_bhp->id.node_id == node_id server panic: Aborting on internal failure, file mpool.c, line 392 - DBPUT failed due to duplicate secondary index - dbfsck reports corrupted btree pages Impact: A database which shows the symptoms above must be reloaded (dbexport, dberase and dbimport). Information besides internal btree is not affected. * The eloqdb6 server could panic during processing volume recovery complaining about a buffer leak. This was caused by a bug processing defective recovery information from the log volume. * Cache buffer management has been tuned to provide better performance for delete and update operations in a transaction. This should also improve the impact of transactions on concurrent read operations. Patch PE62-0003280 ------------------ Platforms: All * The previous patch PE62-0003040 incorporated a side effect which could lead to a subsequent eloqdb6 panic: Assertion failed: Fpool_Next(): Inconsistent anchor server panic: Aborting on internal failure, file volpool.c, line 1351 Patch PE62-0003040 ------------------ Platforms: All * eloqdb6 could panic during volume recovery if transaction log meta information is damaged. Volume recovery should not rely on the consistency of meta information. Assertion failed: iter->anch->last_block.offset == iter->addr.offset server panic: Aborting on internal failure, file volpool.c, line 1313 Patch PE62-0001060 ------------------ Platforms: All * Under rare conditions 16 bit integer key values were incorrectly inserted into an index. This could result in a subsequent database status -96 (bad link to master set). * The HTTP status display could show garbaged server configuration. Patch PE62-9911300 ------------------ Platforms: All * A deadlock condition could occur during DBPUT and DBUPDATE in rare cases causing the affected tasks to hang infinitely. The solution to this problem implemented with PE62-9909020 had an impact on concurrent read operations which became unnecessarily slow. The current solution serializes write operations while read operations are not affected. This should solve the performance impact. Patch PE62-9909020 ------------------ Platforms: All * A deadlock condition could occur during DBPUT and DBUPDATE in rare cases causing the affected tasks to hang infinitely. This was not completely solved with patch PE62-9908310. Patch PE62-9908310 ------------------ Platforms: All * A deadlock condition could occur during DBPUT and DBUPDATE in rare cases causing the affected tasks to hang infinitely. Patch PE62-9906100 ------------------ Platforms: All * A zero record number in the free record list causes a panic in Node_RemoveFirstItem() during DBPUT. This patch takes care of a possible side effect when encountering the zero record number. Assertion failed: freelist_miss == 0 server panic: Aborting on internal failure, file volfrec.c, line 861 The zero record number is placed into the record free list during pre-commit phase of a DBDELETE operation to ensure that the free list does not need to be expanded during the final commit phase. There was a small window of opporunity that a concurrent DBPUT would request a new record number and could get that reserved entry. This situation was not expected and the server paniced. * The buffer allocation strategy in the buffer cache has been slightly modified to handle cases of committing large transactions with a small buffer cache configurtion more gracefully. Patch PE62-9905250 ------------------ Platforms: All * Due to a race condition, simultaneous DBOPEN and DBCLOSE operations could cause a server panic in rare situations. Assertion failed: prev_link != NULL server panic: Aborting on internal failure, file vroot.c, line 207 Patch PE62-9905110 ------------------ Platforms: All * A zero record number in the free record list causes a panic in Node_RemoveFirstItem() during DBPUT. This patch adds a workaround to handle this particular case more gracefully and ignore the offending list entry. Assertion failed: item_ptr->id server panic: Aborting on internal failure, file nodeilist.c, line 658 Patch PE62-9904120 ------------------ Platforms: All * Transaction isolation in the fixrec subsystem did not work correctly. This could cause a server panic if a commit operation was executed concurrently to a read operation. Assertion failed: f_bhp->id.node_id == node_id server panic: Aborting on internal failure, file mpool.c, line 391 Assertion failed: Pool_TestFlag(Pool_BLOCKUSED, &header) server panic: Aborting on internal failure, file volpool.c, line 2372 Patch PE62-9904090 ------------------ Platforms: All * dbctl dbstore could cause a PIN leak when running out of disk space. This will lead to a subsequent server panic. * dbctl dbrestore may cause a server panic when using dbutil subsequently. Assertion failed: f_bhp->id.node_id == node_id server panic: Aborting on internal failure, file mpool.c, line 391 Assertion failed: header.size >= addr->size server panic: Aborting on internal failure, file volpool.c, line 3456 Patch PE62-9904080 ------------------ Platforms: All * dbctl backup stop could cause a eloqdb6 panic. Assertion failed: hash_table[ndx] != NULL server panic: Aborting on internal failure, file volredir.c, line 207 * A eloqdb6 crash during on-line backup could cause a subsequent failure to open the volume files. Unable to open data base volumes. Vol_Open() failed with VOLE018 Patch PE62-9904060 ------------------ Platforms: All * Crash recovery could fail with an internal problem. server panic: Fatal problem detected in Node_RecoverItemPage Assertion failed: rec->prev_page_timestamp == prev_ilist->timestamp + 1 server panic: Aborting on internal failure, file nodeilist.c, line 1314 Patch PE62-9903311 ------------------ Platforms: All * Crash recovery could fail with internal error. Assertion failed: iter->anch->last_block.offset == iter->addr.offset server panic: Aborting on internal failure, file volpool.c, line 136 * A corner case with disabling on-line backup mode could cause data corruption if a checkpoint operation was executed concurrently. * Disabling on-line backup mode could cause a server hang. * A server crash while in backup on-line mode could cause an internal failure the next time on-line backup mode was enabled. Assertion failed: !Vol_TestFlag(Vol_IS_REDIRECTED, &root_vol[idx].header)) server panic: Aborting on internal failure, file volredir.c, line 568 Due to a related reason, dbfsck or dbvolextend could refuse to modify a volume, complaining that the volume is still in on-line backup mode. * dblogreset shares the same recovery routines as the eloqdb6 server. So a new version is included in this patch. Patch PE62-9903290 ------------------ Platforms: All * eloqdb6 could abort with an internal failure. Assertion failed: header.size >= addr->size server panic: Aborting on internal failure, file volpool.c, line 1985 Assertion failed: Pool_TestFlag(Pool_BLOCKUSED,&header) server panic: Aborting on internal failure, file volpool.c, line 2132 * When a client was disconnected (killed) eloqdb6 could cause a high load when the associated internal thread was blocked. For example, when eloqcore is blocking on a DBLOCK and is killed the eloqdb6 process could busy waiting until the lock becomes available, consuming almost all CPU resources. Patch PE62-9903080 ------------------ Platforms: All * Crash recovery could cause fixrec meta data corruption. This could either cause image status errors status 17 or -96 or lead to a eloqdb6 server panic. Assertion failed: FixRec_FinalCommitDelete(): record counter inconsistency server panic: Aborting on internal failure, file volfrec.c, line 3089 The dbfsck utlity can be used to verify or correct fixrec meta information. * Crash recovery could leave unassigned index and system catalog data pages. In rare situations, this could lead to data corruption. * dbctl dbrestore could cause a deadlock. When a database is restored, user/group memberships are deleted. This could cause a deadlock. Patch PE62-9902222 ------------------ Platforms: All * DBUPDATE mode 1 on a standalone detail set returned status 41 Patch PE62-9902221 ------------------ Platforms: All * DBFIND/DBGET on index item or QFIND on index item could fail. Patch PE62-9902170 ------------------ Platforms: All * A race condition could cause a eloqdb6 panic. Assertion failed: bhp->id.page_id == ++page_id server panic: Aborting on internal failure, file mpool.c, line 415 This was triggered by a low buffer space condition where a buffer page was re-used unexpectedly by the same thread. * A race condition in Node_Open() could cause a eloqdb6 panic. Assertion failed: meta server panic: Aborting on internal failure, file volfrec.c, line 2274 This was triggered by a condition where multiple threads were opening a node and the first one was blocked to read the node meta data. * On the HP-UX and Linux platform a server shutdown could cause errorneous messages. Patch PE62-9902110 ------------------ Platforms: All * dbvolcreate utility could output errorneous warnings about a possible PIN LEAK. * The eloqdb6 server process could output errorneous warnings about a possible PIN LEAK. * The dbstore operation failed to release a node lock which could cause a subsequent eloqdb6 server panic. * After opening more than 32767 databases in succession in a single session eloqdb6 could provide a possibly wrong or duplicate dbid. Installation: ------------- UNIX: In order to install this patch, you need to unpack it with gzip. Gzip is included with HP-UX 10.x and Linux. Installation requires root privileges. cd /opt/eloquence6 gzip -dc /path/to/PE62-0101240-hpux.tar.gz | tar xf - Files: bin/eloqdb6 bin/dbvolcreate bin/dblogreset share/doc/PE62-0101240-README Windows NT: This patch should *only* be installed if you previously installed the HP Eloquence server components on your system. Download the PE62-0101240-win32.zip file and unpack with WINZIP or PKZIP. Installation requires administrative capabilities. PLEASE MAKE SURE THE EloqDB6 SERVICE has been STOPPED previously (in the Service Control Manager). Please copy the eloqdb6.exe file into the WINDOWS SYSTEM DIRECTORY (for example C:/WINNT/SYSTEM32) and the dbvolcreate.exe and dblogreset.exe files to the bin subdirectory of your HP Eloquence installation directory (for example C:/Programs/Hewlett-Packard/HP Eloquence/bin). Files: eloqdb6.exe dbvolcreate.exe dblogreset.exe PE62-0101240-README.txt