----------------------------------------------------------------------

ELOQUENCE B.07.00 - patch 0310180

----------------------------------------------------------------------

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, PE70-0305270, PE70-0307161,
PE70-0309300 and PE70-0310082

Severity:
 PE70-0310180: BUG FIX
 PE70-0310082: BUG FIX
 PE70-0309300: BUG FIX
 PE70-0307161: CRITICAL (server abort, corruption)
 PE70-0305270: BUG FIX
 PE70-0304041: CRITICAL (database inconsistencies)


Fixed Problems
--------------

Platforms: ALL

* A deadlock situation could cause the eloqdb6 process to abort
  with a a panic message (#2136)

  D0: Assertion failed: tcp->marker != current_marker
  D0: server panic: Aborting on internal failure, file thread.c, line 362

  This panic is caused by a deadlock situation that is not detected 
  immediately and only becomes apparent after another process
  executes a DBUNLOCK. However at this time, the deadlock resolving 
  code is bypassed instead of flagging one of the processes involved 
  in the deadlock. 
  The resolution is to notify one of the threads involved of the
  deadlock and return a db status to the application.


Patch PE70-0310082
------------------

Platforms: ALL

* The eloqdb6 process could abort with an internal failure when
  on-line backup is initiated (dbctl backup start) (#2128)

  eloqdb6 could abort with the message below:
  D0: server panic: Fatal problem detected in Fwr_Setup
  D0: Assertion failed: rc == 0
  D0: server panic: Aborting on internal failure, file volfwr.c, line 541

  When forward logging is used but currently disabled due to an error
  (eg. disk full, permission problem) and is re-enabled subsequently
  (dbctl forwardlog enable) writing to the log file is delayed until
  the server is restarted or an on-line backup is performed.
  Initiating on-line backup resulted in an abort of the server process
  because the previous failure status was not reset properly.


Patch PE70-0309300
------------------

Platforms: ALL

* The eloqdb6 server process could abort with a SIGSEGV when
  forward logging is used and a log file reached its maximum 
  size (#2126).

* The maximum number of concurrent connections has been increased 
  from 1000 to 2000 on the HP-UX platform (#2125).


Patch PE70-0307161
------------------

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-0304041
------------------

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-0310180-hpux.tar.gz | tar xf -

Files:

   bin/eloqdb6
   share/doc/PE70-0310180-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-0310180-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-0310180-README.txt file into the share\doc
subdirectory of your Eloquence installation (for example
C:\Programs\Eloquence\share\doc).

Files:

   eloqdb6.exe
   PE70-0310180-README.txt