
8 Registry variables
The system registry contains configuration information for ObjectSwitch and its engines. ObjectSwitch maintains an ObjectSwitch registry whose root key is DSEGlobalKey. The registry hierarchy is illustrated in Figure 28.
Figure 28: Structure of the ObjectSwitch registry![]()
Overview
The configuration variables in the ObjectSwitch registry can be divided broadly into two types: routine and system configuration.
Routine configuration
The more routine registry variables, used for application and adapter configuration, are found under the persistence and engine keys.
Engine configuration
Under the Engine key, there is a subkey for each engine installed on the ObjectSwitch node. The values under this subkey define the engine's executable name and startup arguments, auto-start, trace log settings, and other assorted tuning parameters. These variables can be configured using the engine control center.
Database adapter services
If an engine uses database adapters, then there will also be subkeys for that engine within the persistence registry key. The variables contained in these keys control how database access is handled. These variables can only be configured using the registry editor or shell commands.
System configuration
The system keys contain configuration variables that control the low-level aspects of ObjectSwitch's operation. These variables can only be configured using the registry editor or shell commands.
Incorrectly changing some of these variables can render a system unusable, requiring it to be re-installed. The most dangerous of these are marked with the symbol M and must not be changed in a working system.
System services
The variables under the system services key control how shared memory and system types are created, and how network communications are serviced.
Distribution
Distributed ObjectSwitch systems are supported by a distribution engine on each node. This engine has its own subkey under the Engine key. This subkey (and the global Distribution) contains variables that control local and remote location codes, ports used for distribution and node discovery, timeouts, and other distribution configuration.
Event bus
The event bus key contains variables to configure the event hashing and queue receive timeout.
Object services
The object services key contains variables to configure type, object, and transaction hashing, and object heap allocation size.
System coordinator configuration
The system coordinator key contains variables to control how the system coordinator manages engines, what port it listens on, its trace log settings, and how it allocates its private shared memory.
How to read the tables
The configuration variables are divided into functional groups and presented here one group at a time. The routine configuration groups are presented first, then the system configuration groups. Keep in mind that this routine/system division is somewhat arbitrary.
A table for each configuration group provides summary information about each variable, including:
- the name of the variable
- a typical value-usually the default (sometimes the default is configurable)
- a brief description of the variable
The summary table is followed by a detailed description each configuration variable in the group, explaining more about how that variable is used in ObjectSwitch.
Routine configuration variables
Engine configuration
The Engine configuration variables are located under the DSEGlobalKey\Engine\engineID registry key. You normally edit these variables using the engine control center, which provides detailed help, including an explanation of each variable.
The engine configuration variables are specified for each engine instance. For example, if a system has three engines with IDs 1, 33, and 321, then the following registry keys are used:
DSEGlobalKey\Engine\1 DSEGlobalKey\Engine\33 DSEGlobalKey\Engine\321Each engine will look up its configuration under its own key, allowing a different configuration for each.
stateManager
The name of the shared memory segment to which this engine should attach. The shared memory segment contains all of the user defined objects and events that are created by a running system and object services and event bus control structures.
engineGroup
The name of this engine's group. The Engine Control Center uses this information to determine which engine group should contain the engine's visual representation, and whether the engine should be included in an engine group's Start All Engines and Stop All Engines operations.
engineName
The name of this engine. This information is used by the system coordinator control interface to help identify this engine to a human operator.
engineExecutable
The absolute path name for the engine executable (the format of the path specifier is platform specific). The system coordinator uses this value to start and stop the engine. There is no default value for this configuration variable: it must be set to allow the engine to be managed by the system coordinator.
engineArguments
Arguments that should be passed to the engine executable. These arguments are passed on the command line by the system coordinator when an engine is started.
killTimeout
The time in seconds that an engine should wait for all threads to exit after setting the "is terminating" flag. When this timer expires, the engine attempts to kill all threads that are still running.
abortTimeout
The time in seconds that an engine will wait before it performs an abortive shutdown. An engine will gracefully exit after all running threads have exited. If threads do not exit even after the thread kill timer described above has expired before the abort timer expires, the engine will force an exit to the operating system.
traceEnable
Control tracing for this engine. This variable should be set to "1" to enable tracing, and "0" to disable tracing. The actual trace output is controlled by other configuration variables described below.
traceFile
The name and path name of the trace file that should be used by this engine. The trace file will be created if it does not exist. This configuration variable can be specified as stdout to route trace messages to standard output.
traceTruncate
Control truncation of the trace file during engine initialization. If this configuration variable has a value of "0" the trace file will not be truncated during start-up. If this configuration variable has a value of "1", the trace file will be truncated each time the engine is started.
traceSize
Controls the maximum size of the trace file. A value of "0" indicates that there is no maximum size for the trace file. It will continue to grow as more trace messages are added.
A value other than "0" indicates the maximum size of the trace file, in bytes, before it should be saved and a new file created. When a trace file exceeds its configured maximum size it is renamed to <traceFile>.old. If the trace file again exceeds the maximum size any existing .old files are replaced.
trace*Filter
These four trace filters-traceDebugFilter, traceInfoFilter, traceWarningFilter, and traceFatalFilter-control tracing for specific components of ObjectSwitch. Each of the filters controls tracing for a particular type of trace message, as described in "Trace files" on page 14.
autoStart
Controls whether the engine should be started by the coordinator immediately or it will be started by the user. A value of 1 indicates that the coordinator should start this engine immediately when the coordinator is started. A value of 0 indicates that coordinator should not start the engine immediately. A system operator will have to manually start this engine the first time.
maxFailCount
The number of times this engine should be restarted before the coordinator gives up. This prevents an engine from continuously being restarted by the system coordinator if it constantly fails. The coordinator resets its count whenever the engine exits without an error or when the engine is restarted manually.
numReadChannels
The number of read channels initially created in this engine to process events. A thread is created for each read channel that is configured at initialization time, so this configuration variable controls thread concurrency in an engine. It is also directly related to the number of simultaneous transactions that can run in an engine. See "M envHashtblSize" on page 92.
minReadChannels
The minimum number of read channel threads that should exist in an engine after thread reaping has occurred. This configuration variable is used to control the low water mark for read channels when idle read channels are detected because the queueReceiveTimeout value expired for one or more read channels.
maxReadChannels
The maximum number of read channel threads that can be created for an engine because read channel starvation was detected. The engine will continue running, but will not create new read channel threads until their number drops below this value.
When choosing values for minReadChannels and maxReadChannels, your goal should be to keep the CPU running at close to 100% with a minimum of context switching. In general, this means system performance will be better with fewer threads. However, if your trace file contains messages indicating that the engine constantly creates and releases threads, you should raise the minReadChannels value.
readChannelInc
Read channel increment. The number of read channel threads to dynamically create whenever all currently allocated threads are processing events.
servicePeriod
The number of seconds between checks to determine if additional read channels are required. This configuration variable directly affects latency in a system which needs new threads in order to proceed with work.
distribWorkerPool
The maximum number of outstanding event requests. This can affect how much work can be pending at remote nodes for this engine. Engines that send many events to remote nodes or that frequently reference instances on remote nodes may need this parameter increased.
flushRate
Flusher service interval, in seconds. How frequently the object flusher runs. Decreasing this value causes the flusher to run more frequently, consuming more processor time. A setting of 0 (the default value) disables the flusher for the engine containing the setting.
numTypesPerFlush
How many types are flushed in each interval. Each flushRate seconds, the object flusher flushes stale references from shared memory. A reference is stale if:
- the entity was marked cache never in the Design Center
- the entity was marked cache timestamp in the Design Center, and the instance's timestamp has expired.
numTypesPerFlush > 0: Each time the flusher runs, it flushes numTypesPerFlush types before becoming idle again. Increasing this value causes the flusher to run longer each time, consuming more processor time.
numTypesPerFlush = 0: The flusher flushes all types each time it runs.
You can also explicity flush individual instances using the flushObject() builtin described in the Developer's Guide. Neither flushRate nor numTypesPerFlush have any effect on that builtin.
Database adapters
The database adapters configuration variables are located under the DSEGlobalKey\PersistenceServices\database\engineID registry key, where database can be informix, oracle, or sybase.
The database adapter configuration variables are specified for each engine instance. For example, if a system has three engines with IDs 1, 33, and 321, and each of these engines uses the Oracle adapter, then the following registry keys are used:
DSEGlobalKey\PersistenceServices\Oracle\1 DSEGlobalKey\PersistenceServices\Oracle\33 DSEGlobalKey\PersistenceServices\Oracle\321Each engine will look up its persistence configuration under its own key, allowing a different configuration for each.
dataStore
The name of database server used by this engine. The server must be correctly configured in the ODBCINI file. Refer to the database adapters section of <Italics>Using ObjectSwitch Adapters for information about the ODBCINI file and environment variables that must be supported for database adapters.
userName
The user name used when connecting to the database server. The same user name is used on all connections.
password
The password used together with username when connecting to the database server.
connection
The number of connections opened to the database server when the engine is started. All connections are established at initialization.
Each transaction processed by this engine is allocated to a connection for the duration of the transaction. See "M envHashtblSize" on page 92 for details on configuring the number of transactions for an engine.
retryDelay
The amount of time, in seconds, before a failed database connection is retried.
connectionRetry
The number of times a failed database connection will be retried before a service unavailable exception is raised.
The combination of retryDelay and connectionRetry is used to isolate models from failures in external database servers. Setting these values will cause the connections to failed or shutdown database servers to be automatically retried.
retryMode
How to handle failed connections before raising a service unavailable exception.
Setting this parameter to Forever Retry causes the connection to retry indefinitely. Setting it to No Retry causes the connection to raise a service unavailable exception the first time the connection fails. If this parameter is set to Count Retry, then the connectionRetry parameter controls how many times to retry the connection before raising an exception.
Directory services adapter
The configuration variables for the directory services adapter are located under the DSEGlobalKey\DirectoryServices\Servers\server-name registry key, where server-name is a name you configure to represent a particular directory services configuration.
You may need to add the Servers and server-name registry keys, and the subkeys in the above table, before you begin using directory services.
System configuration variables
System services
The System Services configuration variables are located under the DSEGlobalKey\SystemServices registry key.
Event distribution bus
The Event Distribution Bus configuration variables are located under the DSEGlobalKey\EventBus registry key.
M typeTblNumHashBuckets
The number of hash buckets allocated for the type table hash list. This list is used to find the type table entries during event distribution. See "Hash table sizing" on page 102 for guidelines on configuring this variable.
queueReceiveTimeout
The amount of time, in seconds, that a read channel will block waiting for work. When this timeout value expires, the blocked read channel may be terminated by the system. See "Engine configuration" on page 80 for details on using this configuration parameter.
M qcbNumHashBuckets
The size of the hash maintained in the event bus to keep track of event bus queues. Each event queue is inserted in this hash using the engine instance identifier.
Object services
The Object Services configuration variables are located under the DSEGlobalKey\ObjectServices registry key. The variable tdHashtblSize appears once per domain, contained under a subkey of the domain's ID (for domain 234567, these two values are found under the key DSEGlobalKey\ObjectServices\234567). For each entity (type) on the node, a subkey with that entity's name contains the variable objHashtblSize.
M sMPermissions
Shared memory permissions. These are the permissions used when creating the shared memory segments used by the system. The default value creates all shared memory segments with a default permission of read/write by the owner.
Permissions are specified as a hexadecimal, octal, or decimal numbers. The number is a bitmask that follows POSIX conventions to specify permissions.
![]()
Octal is a convenient representation because one octal digit is three bits, so each level of access is specified as one digit between 0 (no permission) and 7 (read, write, and execute permission). For example, to grant read and write permissions to owner and group, the mask would be 0660 octal (or 432 decimal or 0x1B0 hexidecimal).
M mutexInfoHashSize
The size of the hash maintained in the shared memory manager to keep track of system level type descriptors. The default size should not have to be changed.
M smAllocSize
Shared memory allocation size. The size of the shared memory heap from which object data will be allocated. The system will not initialize if this much space cannot be reserved.
The total size of shared memory required in object services is a combination of system control structures and instance data associated with each user object created in the system. Each user object allocated takes up two times the size of the actual attribute data in the object, plus a fixed overhead.
M tdHashtblSize
(Contained under the domainID subkey.) Type descriptor hash table size. The number of hash buckets allocated for the type descriptor hash list. This list is used to find type descriptors when creating objects. See "Hash table sizing" on page 102 for guidelines on configuring this variable
M domHashtblSize
Hash size for managing multiple domains. See "Hash table sizing" on page 102 for guidelines on configuring this variable
M envHashtblSize
Transaction environment hash table size. The number of hash buckets allocated for the transaction environment hash list. This list is used to find transaction environments during transaction execution. See "Hash table sizing" on page 102 for guidelines on configuring this variable
M objHashtblSize
(Contained under the entityName subkey.) Object hash table size. The number of hash buckets allocated in the navigation hash table for instances of the named entity. This list is used to find objects using object references. See "Hash table sizing" on page 102 for guidelines on configuring this variable.
System coordinator
The system coordinator provides support for starting and stopping engines and managing recovery in the system. It stores its configuration information under DSEGlobalKey\SystemCoordinator.
The configuration variables for the system coordinator are described in the table below. These take effect when the system coordinator starts. The system coordinator also uses engine configuration variables (see "Engine configuration" on page 80) when starting and stopping engines.
M shmemName
Engine shared memory name. The name of the shared memory segment that should be used by the system coordinator to maintain information about all engines that are controlled by the system coordinator. This shared memory is created in the installation path passed into the system coordinator, unless this registry variable contains other path information.
M allocSize
The size of the shared memory in bytes allocated by the system coordinator to manage engines. The default value for this configuration variable is adequate for most systems, and shared memory is grown as required by the system in increments specified by the engAllocHint configuration parameter.
M allocHint
The size in bytes that should be allocated if the original shared memory segment for engine management becomes full. The size of the original shared memory segment is specified using the engAllocSize configuration parameter.
M maxEngines
The maximum number of engines that can be managed by the system coordinator.
tcpPort
The TCP port number on which the system coordinator should listen for operator control messages.
restartInterval
How frequently (in seconds) the system coordinator resets the failure counter for all running engines. If a running engine fails more then maxFailCount times (this is defined under that engine's registry subkey) before timerPeriod expires, then the system coordinator shuts it down.
traceEnable
Enables or disables tracing for the system coordinator. Set this variable to 1 to enable tracing, and 0 to disable tracing. The actual trace output is controlled by other configuration variables described below.
traceFile
The name of the trace file that should be used by the system coordinator. The trace file will be created if it does not exist. This configuration variable can be specified as stdout to route trace messages to standard output.
The trace file is created in the directory specified by the path passed to the system coordinator when it was started, or in the local directory if no path was specified when the coordinator was started.
traceTruncate
Whether or not to truncate the trace file during system coordinator initialization. If this variable is 0, the trace file is not truncated during start-up. If this variable is 1, the trace file is truncated each time the system coordinator starts.
traceSize
The maximum size of the trace file, in bytes. When this size is reached, the trace file is saved as tracefilename.old, and a new one is created (any existing tracefilename.old is overwritten). A value of 0 means the trace file size is unlimited, and will continue to increase as more trace messages are added.
trace*Filter
See "trace*Filter" on page 83 for a description of this registry variable.
killProcessGroup
Whether the system coordinator, upon finding a value in "pid" while starting up, should kill all processes spawned by the previous instance of the system coordinator.
pid
The process group i.d. of the system coordinator. The value in this field is used to find processes spawned by an abnormally terminated instance of the system coordinator. When the system coordinator starts up, it is made a process group leader and enters its process group i.d. in "pid". When it terminates normally, this entry is cleared.
engineKillTimeout
Indicates the amount of time, in seconds, that the system coordinator will wait for engine processes to die when it has been restarted and detects that recovery is required in the system.
When the system coordinator is restarted it determines if recovery is required. If it is, it kills all running processes and waits for them to exit. If they haven't exited within this time interval the system coordinator will abort. This value must always be greater than all of the engine killTimeout configuration variables.
Distribution
This section describes the keys and variables that you use to configure distribution information in an ObjectSwitch system. There are two kinds of location configuration: directed, which requires you to preconfigure remote nodes that distribution will work with, and discovery, which automatically detects and configures remote nodes.
You can use discovery and directed distribution together. When your model executes create..on, if you have configured the specified node for directed distribution (see "Directed discovery" on page 98), then the object is created on that node. If no such node is explicitly configured, and there is a discovered node with that name, then the object is created on that node.
Because the discovery protocol uses UDP broadcast messages, you cannot use discovery outside of a subnet. ObjectSwitch nodes can communicate across subnet boundaries, but you must explicitly configure these connections using directed discovery.
Adding the distribution engine
To use distribution features, you need to configure the registry as described in this section, then add the distribution engine swdisteng. From the Engine Control Center, add the engine archive:
$SW_HOME/distrib/platform/engine/swdisteng.tgzto a node. When you start that engine, it reads the registry values described in this section and provides distribution services for all the other engines on the node.
Global configuration
You can configure the hash used in distribution-although you usually won't need to-under the registry key DSEGlobalKey\Distribution.
name typical description requestHashSize 101 Hash table size of outstanding requests. nodeHashSize 101 Hash table size of all open node connections.Directed discovery
You can explicity configure the location code for remote nodes under the registry key DSEGlobalKey\Distribution\Directed\location-name. Each remote node that you specify will have its own location-name subkey.
name typical description locationCode The location code of the remote node. tcpPort The TCP listener port for the remote node. hostName The host name of the remote node.You can configure additional node names under this registry key, so that applications can set the location code by name using the action language create ... on. For example, if a system has two nodes, one called NewYork and one called Tokyo, the registry for the Tokyo node might include:
DSEGlobalKey\Distribution\Directed\NY\locationCode=666 DSEGlobalKey\Distribution\Directed\NY\tcpPort=9876 DSEGlobalKey\Distribution\Directed\NY\hostName=mothra.acompany.comNote that a model may always create objects on the local node by omitting the on clause of the create statement.
Distribution transport
The DSEGlobalKey\Distribution\Transport subkey configures node-to-node communication for distribution transport.
tcpPort
This variable configures the TCP/IP port number used to listen for inbound connections. This port must be available on the local system.
There are two port settings used for distribution support. Do not confuse this port with the location mapper port described in "Distribution location mapping" on page 100.
recvBufferSize
Size, in bytes, of the receive buffer.
retryCount
The number of times a connection should be retried to a remote node before a service unavailable exception is raised to the application. A value of 0 indicates retry forever.
retryDelay
The number of seconds between connection retries.
M connectTableSize
Hash table size for connection management. See "Hash table sizing" on page 102 for information about configuring this parameter.
M requestTableSize
Hash table size for request management per connection. See "Hash table sizing" on page 102 for information about configuring this parameter.
minPendingRequest
Initial number of available request tokens per connection.
maxPendingRequest
Maximum number of request tokens that will be allocated per connection. When the limit is reached, subsequent requests will wait for current requests to complete first.
incPendingRequest
Allocation size for request tokens when the system runs out of them. And it will stop allocating when the current number is equal or greater than maxPendingRequest.
Distribution location mapping
The DSEGlobalKey\Distribution\LocationMapper subkey configures location discovery..
locationName
This is the name of the local ObjectSwitch node (the node that uses this registry). It is used in action language to specify this node in a create statement.
locationCode
This is the location code for the local ObjectSwitch node (the node that uses this registry). This code must be unique across your ObjectSwitch universe; by default it is set to the current time when the registry is populated.
broadcastPort
This specifies the UDP port number to broadcast discovery messages. This port number must be the same for all nodes in a distributed system. The port is used for datagram-based communication, not as a TCP listener, so it can be used by multiple nodes on the same computer.
There are two port settings used for distribution support. Do not confuse this port with the transport port described in "Distribution transport" on page 99.
resolveDelaySeconds
The number of seconds between location code mapping broadcast retries.
resolveRetryCount
The number of times a location mapping broadcast should be retried before a service unavailable exception is raised. A value of 0 indicates retry forever.
conflictDelaySeconds
Number of seconds the location mapper will wait to determine an existing node has this location code taken already.
locationHashSize
Hash table size for location information cache.
Hash table sizing
ObjectSwitch uses hash tables for many types of lookups, including object types, distribution connections, and many other functions. Variables that configure these tables are each described in the appropriate section of this chapter.
This section provides guidelines for hash table configuration. A registry variable that defines a hash table size is only used when that hash table is first created. Once an ObjectSwitch node is installed and running, changing these values will have no effect; they are "start of the world" parameters.
The hash table size is expressed as a number of hash buckets. The correct size for each hash table will depend on the number of items referenced through the table. If the number of hash buckets is much less than the number of items referenced through it, the system will create long hash chains, reducing performance. For best performance, the hash table size should be a prime number, large enough to avoid creating long hash chains.
|
Kabira Technologies, Inc. http://www.kabira.com Voice: (415) 446 5000 Fax: (415) 446 5199 |