GemStone/S 64 Bitâ„¢ 3.4.5 is a maintenance release of the GemStone/S 64 Bit object server. This release includes several feature enhancements and fixes a number of bugs.
We recommend everyone using GemStone/S 64 Bit upgrade to the latest version, currently v3.5.1. The v3.4.5 release provides bug fixes and enhancements to customers who are not yet able to upgrade to v3.5.1 or later.
These release notes describe changes between the previous version of GemStone/S 64 Bit, version 3.4.4, and version 3.4.5. If you are upgrading from a version prior to 3.4.4, review the release notes for each intermediate release to see the full set of changes.
The Installation Guide has not been updated for this release. For installation, upgrade and conversion instructions, use the Installation Guide for version 3.4.
GemStone/S 64 Bit version 3.4.5 is supported on the following platforms:
For more information and detailed requirements for each supported platforms, please refer to the GemStone/S 64 Bit v3.4 Installation Guide for that platform.
GemStone/S 64 Bit version 3.4.5 requires GBS version 8.3 or later for VisualWorks Smalltalk, or version 5.4.4 or later for VA Smalltalk.
The following versions of GBS are supported with GemStone/S 64 Bit version 3.4.5:
Note that Windows 7 reached end of life as of January of 2020. While GemTalk will continue to support GemStone clients on Windows 7, it will no longer be considered certified.
For more details on supported GBS and client Smalltalk platforms and requirements, see the GemBuilder for Smalltalk Installation Guide for that version of GBS.
The GemStone/S 64 Bit v3.4.5 distribution includes VSD version 5.4.2. The previous version of GemStone/S, v3.4.4, included VSD v5.4. (VSD v5.4.1 was a limited distribution release; all changes are included in v5.4.2).
VSD version 5.4.2 is a maintenance release, including a few bug fixes. For details on the changes, see the Release Notes for VSD v5.4.2.
VSD versions are not tied to GemStone server versions: both older and newer versions of VSD can be used to read statmonitor files generated by both older and newer versions of GemStone/S and GemStone/S 64 Bit.
If there is an unexpected shutdown, the lock files (filename..LCK) for GemStone processes such as Stone and cache remain in the /opt/gemstone/locks/ directory. These lock files include the PID and other information that is used to determine process status.
On restart, it is possible for kernel processes to reuse this PID. If the owner is root, GemStone cannot reliably determine the status of the process and thus cannot safely delete the lock file. These lock files must be manually deleted.
It is recommended that systems should be setup so that on boot, the lock files in /opt/gemstone/locks/*.LCK are deleted automatically on system restart.
Do not delete /opt/gemstone/locks/gemstone.hostid, which is in the same directory.
The following methods have also been added, providing the important details of commit conflict in a readable string. Each line includes the conflict kind and the conflict objects.
System class >> conflictReportString
Return a String summarizing the results of System class >> transactionConflicts.
System class >> conflictReportString: conflicts
The conflicts argument is Array returned by System class >> transactionConflicts. The report is limited to the first 100 oops in each category of conflict.
topaz 1> run
System conflictReportString
%
1 Write-Write Conflicts( 10528769(a SymbolDictionary))
The following methods have been added to programmatically terminate a running GsHostProcess:
GsHostProcess >> killChild
Terminate a GsHostProcess process that is running.
GsHostProcess >> killChild: timeout
Wait for the specified timeout and if the GsHostProcess child process is still running, terminate it.
gslist has added the -j argument, which returns information about running GemStone processes comparable to the gslist -x output, in json format.
unix> gslist -j -n gs64stone
{"GemStoneServers":[
{
"Name":"gs64stone",
"Host":"benton",
"HostId":"69621bb0476b1938",
"Ip":"10.94.141.12",
"Status":"Exists",
"Type":"Stone",
"Version":"3.4.5",
"Creator":"gsadmin",
"Started":"2020-01-13T16:08:00.000-07:00",
"Pid": 29010,
"Port": 35043,
"Options":{},
"LogName":"/users/gsadmin/345/data/gs64stone.log",
"Sysconf":"/users/gsadmin/345/data/system.conf",
"Execonf":null,
"GEMSTONE":"/users/gsadmin/345",
"Exe":"/users/gsadmin/345/sys/stoned"
}
]}
This can be easily processed as needed for system administration. For example:
(JsonParser new parse: (System performOnServer: 'gslist -j')
creates a structure of Dictionaries and Arrays in GemStone Smalltalk containing all information about all GemStone services.
Note that all keys and values in the output are capitalized. This includes gslist status values (such as ’Exists’), and command line arguments.
A line has been added to the copydbf -i/-I output for an extent file, providing the version number of the extent.
Errors in the NetSAccept/NetSConnect handshake can now be configured to print additional diagnostic information.
To enable detailed printing of socket failures during login, set the environment variable:
export GS_DEBUG_LOGIN=1
before startnetldi. For GCI clients with a console, it is recommended that this also be set in that environment before starting the client.
The following bugs that were present in v3.4.4 are fixed in this version.
The AIO pgsvr made several calls to HostGetNanoTime() within its loop. These calls put load on the CPU and impacted performance. (#48503)
Reduced Conflict (RC) objects (such as RcKeyValueDictionary, etc.) maintain changes in a redo log that allows a commit conflict to be resolved by replay. However, when an RC object was modified within a nested transaction, and that nested transaction was aborted, the redo log was not updated. If later, the RC object has further changes, and the commit again has conflicts such that the redo log is replayed, the changes that had been made earlier and aborted may be applied. (#48389)
When sending terminate to a GsProcess that is executing an ensure block, there is a risk that the timeout may expire before the ensure block completes.
The timeout in GsProcess>>terminate has been raised from 10 to 30 seconds to reduce the risk of this problem. (#48271)
A GCI client (including RPC GBS and topaz) on Windows 7 may hang when a socket is killed and the Gem exits. This is related to that OS version’s socket library returning EWOULDBLOCK, which otherwise implies data on the socket. The GCI client code now recognizes this condition and will terminate the connection. (#48448)
Removing a dynamic instance variable from an instance of a subclass of SequenceableCollection (such as Array, OrderedCollection, or String), that is a Large object (that is, a pointer size larger than 2K or a byte size larger than 16K), causes the size to become incorrectly very large. (#48506)
It was possible for an attempt to remove an old lifetime of a page in a remote cache to result in a stuck hash table lock. (#48453)
If the only reference to an object was via a class instance variable, and the class itself was not in any user’s SymbolDictionaries, the object could be incorrectly reported as unreachable/dead. (#48447)
The hotstandby processes, logreceiver and logsender, print some information to their log files. Starting in v3.4.2, to reduce clutter in the logs, some of these output statements are only printed when debugging is enabled. Debugging is enabled using the startlogreceiver/startlogsender utility argument -d. Some log messages now printed only in debug mode were still prefixed with [Info]. In addition, flush records are printed to the log in regular as well as debug mode. (#48484)
When setting up a new a hot standby system, the final steps are to run startlogreceiver, and then to execute continuousRestoreFromArchiveLogs: on the slave system. However, it takes a few seconds after executing startlogreceiver before the tranlogs are available on the slave system. If continuousRestoreFromArchiveLogs: is executed immediately after the startlogreceiver is started up, before any logs were available, it failed with a file not found error. (#48346)
The arguments to asStringUsingFormat: include the number of digits to include following the decimal point. While DecimalFloat rounded if there were more digits, it did not pad with 0 as documented to the minimum number of digits. (#48305)
The GCI function GciNewUtf8String() did not put the newly created object in the export set, which allowed it to be garbage collected while still in use. (#48217)
Some GemStone operations could error when run within 32-bit processes (such as 32-bit topaz RPC, or a 32-bit GCI application), on 64-bit XFS file system. Specifically, GsFile client file directory operations from 32-bit client processes for 32-bit client processes resulted in EOVERFLOW. (#48462)
For a repository that originated in an early version of GemStone, and had fewer than 19 GsObjectSecurityPolicies (previously Segments), repository scan operations failed in v3.4 and later. (#48276)
Repositories that were converted from 32-bit Gemstone/S and did not run postconv during that conversion, may have the older internal collection tree fanout. This is reported as a warning by objectAudit. This warning did not respect the topaz push command, and was only visible in the console, and thus was not always found. (#48277)
As described in the Programming Guide, the transient and persistent SymbolLists have different functions. Several methods referred to the current User’s SymbolList, where they should refer to the session SymbolList. (#48050)
The following methods have been updated:
GsNMethod >> _literalValToAssocations:
SortedCollection >> resortAll:hiddenSetForErrors: