|
Overview
In the course of the Eloquence B.07.00 release a number of bug fixes
and enhancements were released as patches, providing improved
functionality, performance and reliability.
The user visible changes implemented through these patches are covered
in this document.
This document extends on the Eloquence
B.07.00 release notes and
reflects the changes in the Eloquence patch bundle
PE70-B050531.
Performance enhancements
-
A new SyncerJournalFlushInterval configuration item was added
that may be used to substantially improve performance in "sync" write
mode.
Previously, when sync write mode was used (SyncMode=1), the
transaction journal was flushed to disk for every commit operation
(either explicitly when using transactions or implicitly for each
database call). In case of a system crash only the last committed
transactions could potentially be lost and the volume integrity is
typically maintained.
The new SyncerJournalFlushInterval configuration item adds the
option to specify the time (in milliseconds) after that changes to the
transaction journal are pushed to disk. In case of a system crash any
transactions committed during the period specified by
SyncerJournalFlushInterval are
lost but the volume integrity is typically maintained.
The default value for the SyncerJournalFlushInterval configuration
item is 500 ms (half a second).
NOTE: This default modifies the behavior of the current SyncMode
and in case of a system crash may result in losing any transactions
committed within the last 500 ms.
To retain the previous SyncMode behavior the
SyncerJournalFlushInterval
configuration item must be added to the eloqdb6 configuration file with
a value of zero. In the section [config] please add a line like below:
[config]
SyncerJournalFlushInterval = 0
Note: Specifying a low SyncerJournalFlushInterval value may
have a detrimental effect on performance. This will result in additional
load on the I/O subsystem and also the operating system may block
concurrent access to the lock volume(s) during a sync operation.
-
The maximum number of concurrent connections has been increased
to 4000 on the HP-UX platform (PA-RISC and Itanium).
Windows and Linux are still limited to 1000 concurrent connections.
-
The eloqdb6 database server was modified to remove the 2 GB file
size limitation for dbstore/dbrestore.
Administrative enhancements
-
The eloqdb6 server was changed to refuse performing a dbrestore or
bimport operation when on-line backup mode is active.
This change attempts to avoid unintentionally filling the transaction
log volume which would lead to a server abort in online backup mode.
Any database modification in on-line backup mode is temporarily saved
in the transaction log volume.
An error message like below is now returned in this case:
-
dbrestore:
-
Request refused, on-line backup mode is active
and /force option not specified.
-
bimport:
-
Request refused, on-line backup mode is active
and /f option not specified.
The new dbrestore option /force and bimport option /f may be used
to override this limitation.
-
The previously undocumented dbrestore /all option allows to restore
the security context with the database. Using this option currently
causes dbrestore to fail if the user is not allowed to access the
restored database.
-
The dbctl syncmode command was enhanced to allow setting and
returning the current status of the sync mode configuration item
and the current value of SyncerJournalFlushInterval.
usage: dbctl syncmode {ON [msec]|OFF|STATUS}
For example:
dbctl syncmode on 500
Enables sync write mode and defines an SyncerJournalFlushInterval
interval of 500 msec.
dbctl syncmode on
Enables sync mode. Equivalent to SyncMode=1
dbctl syncmode off
Disables sync mode. Equivalent to SyncMode=0
dbctl syncmode status
Returns status of sync mode. In case the sync mode is used and
the SyncerJournalFlushInterval is nonzero it also returns the
current value of SyncerJournalFlushInterval in msec.
TurboIMAGE enhancements
-
The image3k library was enhanced to provide additional context
information if a status code is returned.
-
The DBOPEN call has been enhanced to check for an environment
variable that matches the database name. This environment variable
may be used to replace the database name. This mechanism may be used
to provide a replacement to MPE file equations with the image3k
library.
To be effective the environment variable needs to start with the
prefix "EQ3K__" followed by the upshifted database name. Any dot
characters (.) in the database name are replaced by underscore
characters (_).
For example:
Database Name Environment Variable
--------------- ---------------------
Sample EQ3K__SAMPLE
sample.test EQ3K__SAMPLE_TEST
-
The EQ3K_MINCAPACITY environment variable may be used to specify a
minimum value for capacity returned by DBINFO calls mode 202 and 205.
-
The image3k library on HP-UX was modified to accept an TPI item
offset of 5000. While the HP-UX version of the image3k library
uses 10000 as a mininum value for a TPI item number to ensure full
compatibility with MPE checking for an offset of 5000 in addition
provides full compatibility to the Windows and Linux versions.
-
The change in image3k patch PE70-0406020 to support an offset of
10000 for TPI items caused an ambiguity on little endian platforms
(Linux and Windows). On these platforms the image3k library could no
longer distinguish if an item number or name was passed. This could
result in status -52 returned from DBFIND.
To solve this abiguity and still support the concept to have a
mininum value for a TPI item number we have changed the offset for
TPI item numbers from 10000 to 5000 on Linux and Windows.
Any application that relies on TPI items having numbers above 10000
needs to be changed to use an offset of 5000 on little endian
platforms. The HP-UX version of the image3k currently retains an
offset of 10000 for TPI item numbers for full backwards compatibility.
-
The TPI related DBINFO modes have been modified to accept and
return item numbers greater than 10000 in case an item is a
TPI item. This is specified in the TPI documentation and solves
potential compatibility issues in case applications specifically
check for this item number range. Eloquence simply adds 10000
to the index item number.
-
DBOPEN has been corrected to return status -1 if the database
could not be opened. In previous image3k versions could return
status -11 if the database did not exist.
-
DBLOCK returns a status code 26 in case a deadlock situation
was detected. With previous image3k versions DBLOCK returned
a status code -35.
Status code 26 is specified by te TurboIMAGE documentation.
Please note that other intrisic calls that modifiy the database
could still return status -35 in case a deadlock situation is
encounted.
-
DBINFO modes 811 and 812 have been modified to accept IMAGE
data items in addition to index items. Previous versions only
accepted index items and returned a status when a data item
was specified.
-
Added support for HP Fortran 90 using the +ppu compile option
in HP-UX. When the +ppu compile option is used, an underline
character is added to all external symbols (e.g. dbget becomes
dbget_).
-
Added support for the DBMAINT intrinsic call. The DBMAINT call
is undocumented on MPE may be used to create or erase a database.
The Eloquence implementation in addition supports purging of
a database.
The DBMAINT arguments are similar to DBOPEN:
DBMAINT (base,password,mode,status)
-
base
-
is the name of an integer array containing a string of ASCII
characters. The string must consist of two blanks followed
by a left-justified database name and terminated by a semicolon,
a space or a NUL character, for example, " ORDERS;".
-
password
-
is the name of an integer array containing a left-justified
string of ASCII characters consisting of an optional password
followed by an optional user identifier.
The following constructs are valid for the password and user
identifier (a _ represents a blank):
password [{_;}[/USERIDENT{_;}]]
The examples below specify an user name and an empty password
[/USERIDENT]{_;}
;[/USERIDENT{_;}]
The example below specifies an user name and a password
password[/USERIDENT]{_;}
The password or the user identifier string must be terminated
by a semicolon, space or NUL character. Since Eloquence does
not assume a fixed length, a termination character should
always be present.
Unless both the password and the user identifier string are present,
the password argument is ignored.
-
mode
-
is an integer equal to 1, 2, or 4 indicating the type of
operation requested.
1 - create the database
2 - erase the database.
4 - purge the database (Eloquence specific)
-
status
-
is the name of an array of 10 halfwords in which the database
returns status information about the procedure.
DBMAINT requires exclusive access to the database and affects all
sets of a database. The Eloquence dbcreate, dberase and dbpurge
utility programs allow to specify a list of data sets in addition.
Eloquence either requires that the user has administrative access to the
database (eg. it is member of the "dba" group) or has the erase
privilege (in case of mode 4).
-
DBFIND TPI modes may also be used to access search items (equivalent
to the TurboIMAGE btree modes).
-
DBLOCK modes 3/4/13/14 have been modified to support the "@" qualifier
to specify an effective database lock. This is supported by TurboIMAGE
but was not possible with Eloquence.
-
DBUNLOCK did not support the extended Eloquence modes to allow
selective unlock. DBUNLOCK has been modified to follow the Eloquence
documentation.
-
A compatibility problem with TPI DBFIND mode 1 and 21 with
numeric values has been fixed. DBFIND mode 1/21 was handling
numeric arguments on an index incorrectly.
DBFIND was expecting that numeric values are passed as text and
converted it to the binary representation. However the TPI
documentation defines that numeric values should be passed as
a binary value.
DBFIND mode 1/21 on indexes has been changed to follow the TPI
documentation.
The HP3K_TPI_COMPAT property may be used to enable the previous
behavior. If the bit 1 in the HP3K_TPI_COMPAT property value
is set (+2) then a numeric argument may be passed as text if the
argument either starts with an operator (==, <=, >=), a positive
or the negative sign. Otherwise a binary value is assumed.
As this may cause ambiguities, the default is that numeric values
must be passed as a binary value.
Setting this property can be done with the dbutil utility either
interactively or using the following script:
--- snip ---
database "<database_name>";
create property "HP3K_TPI_COMPAT"
value "2";
--- snip ---
-
The encoding of the status array has been modified in case an
Eloquence call fails. In case a nonzero status is returned the
status array is used as below:
Element Description
------- ------------------------------------
1 IMAGE status code
2 - 4 unchanged
5 zero
6 IMAGE intrinsic ID
7 Eloquence status code
8 Eloquence extended status code
9 IMAGE mode
10 Encoded Eloquence call ID and mode
(Format: 6 bit id, 10 bit mode)
-
DBLOCK could return wrong status codes. A wrong status code was
returned instead of status -128 and -126.
-
The IMAGE3K library has been modified to consistently return
status -105 in case a memory allocation failed.
-
The Eloquence DBFIND mode 1/21 index handling has been enhanced
with the option to handle TPI and TurboIMAGE btree search arguments
more similar (#2032).
TurboIMAGE btree indexes and TPI indexes use slightly different
conventions in the DBFIND mode 1/21 search argument.
With TurboIMAGE btree indexes the wildcard character can be
configured through DBCONTROL or dbutil. For TPI indexes a "@"
character is used. TPI also considers a space character before
the "@" wildcard to be special.
The IMAGE btree functions are currently not enabled in Eloquence
and Eloquence indexes are used used as a replacement. However
Eloquence indexes follow the TPI conventions which could cause
problems with applications relying on the IMAGE btree behavior.
As Eloquence allows to use all TurboIMAGE DBFIND modes,
independendly of the index type, this option allows DBFIND mode
1/21 calls to work more closely.
The HP3K_TPI_COMPAT database property can be used to cause
Eloquence indexes to follow the TurboIMAGE btree behavior
more closely. If HP3K_TPI_COMPAT is set to nonzero it causes
TPI indexes to use the current IMAGE btree wildcard character
and not handle trailing spaces as a special case. The default
value is zero which implements the previous behavior.
Setting this property can be done with the dbutil utility either
interactively or using the following script:
--- snip ---
database "<database_name>";
create property "HP3K_TPI_COMPAT"
value "1";
--- snip ---
This property is currently not available in the dbutil TurboIMAGE
property dialog.
-
DBCONTROL mode 5 and 6 return status -82 is CIUPDATE is DISALLOWED.
-
Implemented the undocumented DBVERSION intrinsic. The DBVERSION
intrinsic result follows the MPE format and returns the following
NUL terminated string:
MPE/iX: "HP30391 C.1005"
Eloquence : "IMAGE3K B.0700.12"
-
Mode 0 has been added to all database calls. On MPE this may used to
obtain version information about a TurboIMAGE intrinsic call (eg.
QUERY/3000 version command). Eloquence returns status -31 (invalid
mode) but status elements 2 to 4 return the Eloquence image3k
library version (w/o the patch level, for example B.07.00).
It is recommended to use DBINFO mode 801 (or DBVERSION) to obtain
the TurboIMAGE version.
-
The eloqdb database client library was enhanced to upload process
information to the database server when a server connection is
established.
The process information is then output in the session status of the
server web status and allows to identify the application.
The process information includes the user id (not on Windows), the
process id and the command line. In addition, if the environment
variable EQ_AUDIT_INFO is set its content is also included. The
EQ_AUDIT_INFO environment variable allows to include application
specific information in the status output.
-
The eloqdb database client library was enhanced to check if a process
was fork()ed with a database opened. This is unsupported and resulted
in undefined behavior with previous library versions.
Any attempt to access the database in the forked child process will
now abort with an internal error like below:
Assertion failed:
initial_process_id == current_process_id
A fork() is valid if no database is currently opened.
-
The Eloquence client library was changed to return the sort item
in the related detail set when a master set is passed as qualifier
(#2300).
The image3k library internally makes use of the Eloquence DBINFO
mode 303 to implement DBINFO mode 301. However the Eloquence
DBINFO mode 303 did not return sort item information when a
master set was provided as qualifier.
The schema processor has been enhanced to be more consistent
on warning and error messages. Each message now specifies if
a message is either an error or warning message.
Warning messages are output with a message id that could be
used with the -w option to selectively suppress the warning
message.
The new -w command line option allows to suppress the output
of specific warning messages.
-w id[,..]
The -w option expects a list of warning message ids, separated
by comma. The specified warning is then suppressed.
For example:
When unrefenced items are present in a schema definition, the
schema processor did output the following warning message
and list all unreferenced item names.
*** Unreferenced items:
The message has been changed to:
*** (WARNING #11) Unreferenced items:
When the command line option -w11 is specified, the message is
suppressed.
The dbctl utility was modified to return exit status 3 if the
server indicates a command has failed. This simplifies the use of
dbctl in scripts.
The dbstore utility is similar to the builtin dbstore function of
the eloqdb6 server that is used with dbctl.
The dbstore utility allows to perform a dbstore operation when the
server is not active or while the server is in on-line backup mode.
If the eloqdb6 is in on-line backup mode the dbstore utility does
not require exclusive access and may be performed while the database
is in use.
usage: dbstore [options] database {archive_file|-}
options:
-help - show usage (this list)
-u user - set user name
-p pswd - set password
-c cfg - server configuration file
The dbstore utility supports the EQ_DBUSER and
EQ_DBPASSWORD environment variables to specify
the user and password.
The dbrecover utility was enhanced to improve recovery performance.
dbrecover uses temporary files to collect all changes which belong
to a single transaction. This handling was optimized, resulting in
a substential performance increase on HP-UX (and to some lesser extent
on other platforms).
The dbfsck utility was enhanced and supports additional
command line arguments:
-
An experimental option -B was added to dbfsck to enable an additional
check on internal btree linkage.
-
node ids (node numbers) may be specified on the command line.
If present pass 2 does only process the specified nodes.
The dbvoldump utility was enhanced to enable use while the
eloqdb6 server process is active.
Previous dbvoldump versions required exclusive access to the
volume files and could not be used when the server process was
active.
-
The STORE FORM statement was modified to observe the internal
FORM file size limitation of 64k. An error 865 is returned in case the
screen buffer exceeds the FORM file format limit.
-
The error messages 862,863,864,865 were not included in the
message catalog file and have been added.
862 - Improper argument type, INTEGER expected
863 - Inconsistent number of form fields
864 - Internal buffer overlow while encoding
screen line
865 - Screen buffer size exceeds forms file limits
-
This patch adds the option to configure the results of the eloqcore
SYSID$ function. Previous versions returned the hostname
(truncated after 20 characters) with the SYSID$ function.
The return value of the SYSID$ function may either be configured
in the Eloquence configuration files (elog.config, etc.) or defined
with the EQ_SYSID environment variable.
-
Using the EQ_SYSID environment variable:
-
If the EQ_SYSID environment variable is defined its content is
returned with the SYSID$ function.
-
Using a configuration file:
-
The SYSID "value" clause is now recognized in Eloquence configuration
files and may be used to define the result of the SYSID$ function.
Please note that the configuration file entry is currently limited to
20 characters.
-
eloqcore was enhanced to support the EQ_ELOQRC environment variable.
When specified the environment variable defines the path to the user
specific configuration file that is used instead of the default user
specific configuration file ($HOME/.eloqrc on Linux/UNIX and
$HOME/eloqrc on Windows).
eloq was modified to use the newer /dev/ptmx to allocate pty
devices instead of relying on the BSD "legacy" pty devices.
Support
for the old BSD pty devices is no longer required in the kernel.
With recent Fedora Linux distributions it is no longer required
to recompile the kernel to add support for BSD pty devices.
In addition, eloq on Linux no longer needs to run as SUID root.
Installing the patch bundle should drop the SUID bit.
Specifying how users are authenticated
The eloqsd on Windows now allows to configure the method how
users are authenticated. This is controlled with the
[Config] AuthPolicy configuration item in the
eloqsd.cfg configuration file:
-
AuthPolicy=server
-
The default AuthPolicy=server configuration performs a
user logon for each eloqsd connection and runs the associated
processes with the privileges of the user. This allows separate
privileges for each session and is preferable in most cases for
security reasons.
However the maximum number of concurrent eloqsd connections is
limited by the Windows desktop heap (see below).
This authentication method has been used in previous eloqsd versions
and is still recommended. It is therefore the default.
-
AuthPolicy=user
-
With the new AuthPolicy=user configuration, the connected
user is validated using the
configured user name and password in the userFile (eloqsd.user
by default). However, after this validation, the user is not
logged-on to Windows. Instead, all actions (for example launching
an eloqcore process) are performed using the privileges of the
eloqsd process. As this implies less overhead than a real user
logon a higher number of concurrent connections is possible
without having to adjust the size of the Windows desktop heap.
AuthPolicy=user requires the eloqsd process to run as an
account different from the default Windows SYSTEM account. The
necessary configuration steps are:
-
Open the Services applet from the Computer Management console
in the Windows Control Panel.
-
Select the eloqsd entry in the list. Open the Properties dialog
either from the menu or using the context menu (right mouse
button). Select the Log On tab on top of the Properties dialog.
-
Configure an appropriate account to run the eloqsd. This account
should have the necessary privileges to access all resources your
application requires.
Please note:
-
When using AuthPolicy=server, the maximum number of connections is limited
by the Windows desktop heap, resulting in Windows error #1816
(ERROR_NOT_ENOUGH_QUOTA) when this limit is exceeded.
To overcome this limit, the size of the Windows desktop heap for
the non-interactive windowstation must be increased.
This requires to change a Windows registry entry with the
Windows regedit or regedit32 tool. Please note that this must
be done with extreme care, as doing the wrong changes to a
registry value can prevent Windows from operating correctly.
The necessary procedure is documented in the Microsoft Knowledge Base document #184802.
Summary:
Locate the following value in the Windows registry (you must be
administrator to edit this value):
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Control\Session Manager\SubSystems\Windows
This is a string value consisting of multiple sections. Locate
the section starting with SharedSection=, it should have 3
parameters which are comma-separated.
Example: SharedSection=1024,3072,512
The 3rd parameter (in this case 512) is the one which must be
increased. If you find only 2 parameters you can add the 3rd
parameter yourself.
You can set the 3rd parameter as high as the 2nd (in this case
3072), but this is often too much. Increase it in steps of 256
until your problem is solved.
Windows must be restarted afterwards to activate this change.
-
When using AuthPolicy=user the configured users must
have a password assigned in the userFile (eloqsd.user by default)
to successfully connect to the eloqsd.
Configuring the Windows logon type
The new [Config] LogonType configuration item in the
eloqsd.cfg configuration file is used with
AuthPolicy=server (see above) to specify how a user
is logged-on to Windows:
-
LogonType=interactive
-
This mode grants access to all resources the same user
would have when logging on interactively. It has the
least side effects and therefore is now the default.
Unless this is used on a Windows Domain Controller, this
mode should not require to configure any additional user
rights.
However, on a Windows Domain Controller, interactive
access is denied to non-administrative accounts by
default. To overcome this, the "allow log on locally"
user right must be granted (see below).
-
LogonType=batch
-
This mode was used in previous eloqsd versions. It uses the "batch"
logon type which is meant for background processes and is supposed
to be more economical than the "interactive" logon type. However,
in recent Windows versions a "batch" process is restricted so that
this mode may no longer be appropriate. It requires the
"log on as a batch job" user right to be granted (see below).
The new default is "interactive". To retain the previous behavior, it
is required to manually configure LogonType=batch.
To grant either the "allow log on locally" or "log on as a batch job"
user right, the following configuration steps are required:
-
[optional, recommended] Create a dedicated group for all eloqsd
accounts (i.e. the accounts configured with UID in the userFile
(eloqsd.user by default)). This will simplify the configuration.
Also, it allows to grant access to common directories for all
eloqsd accounts (e.g. a common program file directory).
-
Open the Local Security Policy editor from the Computer Management
console in the Windows Control Panel.
Please note: On a Windows Domain Controller please open the
Domain Controller Security Policy editor instead (not the similarly
named Domain Security Policy editor!).
-
In the Security Policy editor, navigate to Security Settings ->
Local Policies -> User Rights Assignment.
-
In the policy list, locate the desired user right and open the
Properties dialog either from the menu or using the context menu
(right mouse button). If you created a dedicated group as suggested
above (1), add this group to the list. Otherwise, selectively add
your eloqsd accounts to the list.
The eloqsd.cfg.sam and eloqsd.user.sam configuration template files
have been updated to reflect the new configuration options.
|
|