---------------------------------------------------------------------- ELOQUENCE B.07.00 - patch 0307161 ---------------------------------------------------------------------- This patch fixes a defect of the eloqdb6 program as released with Eloquence B.07.00. This patch will be integrated in the Eloquence B.07.00 release. Eloquence B.07.00 must be installed before applying this patch. This patch replaces patch PE70-0304041 and PE70-0305270. Severity: PE70-0307161: CRITICAL (server abort, corruption) PE70-0305270: BUG FIX PE70-0304041: CRITICAL (database inconsistencies) Fixed problems: --------------- Platforms: All * DBGET mode 6 after an image3k DBFIND 1/21 on an index could return status 14 (#2046) A DBGET mode 6 after an image3k DBFIND mode 1/21 on an index should retrieve the last matching record in index order. DBGET mode 6 failed with status 14 when the record was the highest key in the index. * The eloqdb6 process could abort with an internal failure or cause database corruption (#1966, #2030) Assertion failed: f_bhp->id.node_id == node_id Restructuring a database with dbutil could cause the server process to abort with an internal error. In rare cases it could cause corruption of the database catalog during crash recovery. * Restructuring a database could cause an internal failure during forward recovery (#2051) Restructuring a database might cause an internal failure in the dbrecover utility when applying the forward log files. The dbrecover utility could abort with an error message like below: panic: Fatal problem detected in FixRec_FinalCommitUpdatePut Assertion failed: *flag_ptr == FixRec_USED || *flag_ptr == FixRec_DELETED Patch PE70-0305270 ------------------ Platforms: All * The eloqdb6 process could abort with an internal failure (#1973) eloqdb6 panics with the message: panic: current_task->waiting_for == NULL (thread.c, line ~413) This was caused by a race condition which could happen when a number of application processes are terminated at the same time while accessing the database. The eloqdb6 server has been modified to solve this problem. The problem can be triggered in the following scenario: - Application thread A holds a lock. It is in the process of releasing database locks. - Application thread B is waiting for the lock held by thread A. - Application thread C is wating for the lock held by thread A (and thread B). Thread C gets interrupted (application process has been killed) during the wait. - There is a situation where thread A might become runnable before thread C during the same scheduler quantum and might unexpectedly update a scheduler variable used in the deadlock detection code ("waiting_for" which is used to track dependencies among application threads). * Connecting to the database server could fail with status -700:-6 when EnableIPC=2 is used on HP-UX (#1982). A message like below is printed: P0: Unable to down semaphore P0: semop(DOWN): Identifier removed (errno 36) P0: Failure during wait on server response This was caused by a missing initialization when a shared memory segment was re-used by a subsequent process. Due to a race condition, a new connection could become disconnected by the server immediately. * Recovery in case of abnormal server termination has been improved. An incomplete transaction journal could corrupt the database volume(s) for btree and catalog node types (#1966). * In case of inconsistent meta information (such as number of records) the eloqdb6 process could abort with an internal error message like below (#1941). D0: server panic: Fatal problem detected D0: Assertion failed: meta->num_records == 1 D0: server panic: Aborting on internal failure, file volfrec.c, line 3191 This situation is is now handled more gracefully and does no longer cause a server abort. * When forward logging is enabled, the eloqdb6 process will refuse to override an existing file (#1952). An existing file is considered a logging failure and will either result in diabling forward logging or an internal abort (depending on the configuration). When using forward recovery and restoring the volume files from the backup and errorneously starting the eloqdb6 process could could overwrite forward log segments and cause potential data loss. The eloqdb6 has been modified to refuse overwriting existing files. * When forward logging is anbled and the eloqdb6 process is killed using kill -9 (eg. due to patch PE70-0305090 is not installed), it might fail to flag the volume file(s) as consisent. This might cause the server to refuse to start (#1985). A message like below is printed: failed to open volume: volume #1 has inconsistent generation count 8 (should be 9) volume.c line 828 The eloqdb6 server code has been modified to handle this this situation correctly. Patch PE70-0305270 ------------------ Platforms: All * Changing the data set structure with dbutil could result in an inconsistent internal highest record number. As a consequence, new records which are added subsequently could become inaccessible. This could cause database status -96 on DBPUT or status 17 and status 18 on DBGET, depending on the use of the particular data set (#1880). Please note: Installing this patch will prevent this problem to occur in the future. However, it will not correct your existing database environment(s). In case you used the Eloquence B.07.00 dbutil program to modify the database structure we recommend to check and correct your database environment(s) with the dbfsck utility: 1) Shut down the eloqdb6 database server instance(s). 2) Write access to the volume files is required. On HP-UX and Linux logon as root or the user configured in the server configuration file. 3) Check and correct your database environment(s) with dbfsck: dbfsck -way This will automatically fix any inconsistencies caused by dbutil data set restructuring. You may need to specify the -c /path/to/configfile command line option in case multiple database server instances are used. 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/PE70-0307161-hpux.tar.gz | tar xf - Files: bin/eloqdb6 share/doc/PE70-0307161-README Windows XP/2000/NT: This patch should *only* be installed if you previously installed the Eloquence server components on your system. Download the PE70-0307161-win32.zip file and unpack its contents with WinZip or PKUNZIP. Installation requires administrative capabilities. PLEASE MAKE SURE THE eloqdb6 SERVICE has been STOPPED previously (in the Service Control Manager or with NET STOP eloqdb6). Please copy the eloqdb6.exe file into the WINDOWS SYSTEM DIRECTORY (for example C:\Windows\System32). Please copy the PE70-0307161-README.txt file into the share\doc subdirectory of your Eloquence installation (for example C:\Programs\Eloquence\share\doc). Files: eloqdb6.exe PE70-0307161-README.txt