1. GemStone/S 64 Bit 3.4.1 Release Notes

Overview

GemStone/S 64 Bitâ„¢ 3.4.1 is a new version of the GemStone/S 64 Bit object server. This release includes some new features and fixes a number of bugs. We recommend everyone using or planning to use GemStone/S 64 Bit upgrade to this new version.

These release notes describe changes between the previous version of GemStone/S 64 Bit, version 3.4, and version 3.4.1. If you are upgrading from a version prior to 3.4, review the release notes for each intermediate release to see the full set of changes. Particularly note that there were many changes in v3.4, including the requirement for updated keyfiles and GBS upgrade.

The Installation Guide has not been updated for this release. For installation, upgrade and conversion instructions, use the Installation Guide for version 3.4.

Supported Platforms

Platforms for Version 3.4.1

GemStone/S 64 Bit version 3.4.1 is supported on the following platforms:

  • Red Hat Enterprise Linux Server 6.7 and 7.1, and
    Ubuntu 14.04 and 16.04, and SUSE Linux Enterprise 12, on x86.
    Testing has also been done on Red Hat Enterprise Linux Server 6.x and 7.x with the latest scecurity patches.
  • Solaris 10 and 11.3 on x86
  • AIX 6.1 on POWER6 and POWER7 and AIX 7.1 on POWER8
  • OS X 10.11.2 (El Capitan) with Darwin 15.2.0 kernel, and
    OS X 10.13.2 (High Sierra), with Darwin 17.3.0 kernel, on x86
    (Mac is supported for development only)

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.

Spectre and Meltdown

OS vendors have begun rolling out patches to these chip vulnerabilities as v3.4.1 has been in final QA. Testing results indicate that while there are no operational problems, there is a performance impact in line with industry reports for these patches. The specific impact varies depending on the specific GemStone operation and details of the hardware and virtualization of the test system.

v3.4.1 has been tested on Red Hat 6.x and 7.x with the latest security patches, and is fully supported with these configurations.

GemBuilder for Smalltalk (GBS) Versions

GemStone/S 64 Bit version 3.4.1 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.1:

GBS version 8.3

VisualWorks
8.2.1

32-bit and 64-bit

VisualWorks
7.10.1

32-bit

VisualWorks
7.10.1

64-bit

  • Windows 10, Windows 8.1, Windows 2008 R2 and Windows 7
  • RedHat ES 6.7, 7.1, and 7.4; Ubuntu 14.04 and 16.04
  • Windows 10, Windows 8.1, Windows 2008 R2 and Windows 7
  • RedHat ES 6.7, 7.1, and 7.4; Ubuntu 14.04 and 16.04
  • Windows 10
  • RedHat ES 7.1
GBS version 5.4.4

VA Smalltalk
8.6.3

  • Windows 10
  • Windows 8.1, Professional or above
  • Windows 2008 R2
  • Windows 7, Professional or above

For more details on supported GBS and client Smalltalk platforms and requirements, see the GemBuilder for Smalltalk Installation Guide for that version of GBS.

VSD Version

The GemStone/S 64 Bit v3.4 distribution includes VSD version 5.3.1; this is the same version as was distributed with the previous GemStone/S 64 Bit, v3.4.

Changes in this release

Updated library versions

The version of OpenSSL has been updated to v1.1.0g.

The version of LZ4 has been updated to v1.8.0.

The version of Kerberos has been updated to v1.16.

Change in lock files

The file /opt/gemstone/locks/<stoneName><hostid> is no longer created. A shrpcmonitor now creates only one file, /opt/gemstone/locks/<stoneName>~<hostid>.LCK, to represent both its listening socket and its shared memory segment.

Support for Mac/High Sierra file system

The new Apple File System, apfs, is now recognized and handled by GemStone, allowing support for the High Sierra Mac version.

Support for Opportunistic TLS Sockets

New methods have been added that can promote an existing GsSocket to a GsSecureSocket without losing an existing socket connection. The socket connection is transferred from the GsSocket to the GsSecureSocket, which enables STARTTLS behavior.

The following methods have been added to support this functionality:

GsSecureSocket class >> newServerFromGsSocket: aGsSocket
Creates a new instance and initializes it to act as an SSL server socket. Any existing (non-SSL) connection owned by aGsSocket is transferred to the new instance and aGsSocket is effectively closed. No SSL connection is made.

GsSecureSocket class >> newClientFromGsSocket: aGsSocket
Creates a new instance and initializes it to act as an SSL client socket. Any existing (non-SSL) connection owned by aGsSocket is transferred to the new instance and aGsSocket is effectively closed. No SSL connection is made.

GsFile flush performance over NFS

The performance of GsFile flush for a file accessed over NFS could be very slow. The method GsFile >> sync has been added, which invokes UNIX fflush and fsync.

Additional information on RC retry failures

When an RC retry failure occurs, it previously only provided a #'Rc-Write-Write' conflict object. Now, conflict resolution code has the option of including additional information, using the conflict keys:

#'Rc-Retry-Failure-Description'
#'Rc-Retry-Failure-Reason'

Configuration Parameter Changes and Fixes

Change in configuration parameter STN_GEM_ABORT_TIMEOUT

The parameter STN_GEM_ABORT_TIMEOUT now configurable in seconds, and the runtime configuration parameter has been renamed.

Previously, this parameter was only configurable in minutes, although internal resolution was in seconds. Now, this can be configured in seconds. This is done by specifying the number of seconds followed by 'seconds', for example, 60seconds. Values without the trailing seconds are interpreted as minutes, for compatibility with previous releases, so a value of 60 is 60 minutes.

The minimum is changed from 1 (that is, 1 minute) to 5seconds.

Runtime parameter #StnGemAbortTimeout renamed

The runtime parameter has been renamed from #StnGemAbortTimeout to #StnGemAbortTimeoutSeconds.

STN_SIGNAL_ABORT_AGGRESSIVE now make LostOt aggressive also

This configuration parameter made sigAbort handling more aggressive, but did not previously affect lostOT and was not sufficient to manage the CR backlog in cases of very high commit rate. (#47335)

GEM_PGSVR_USE_SSL is unreliable

There are code paths that are broken when the configuration parameter GEM_PGSVR_USE_SSL is set to TRUE. There are thread safety issues in the socket code, making the multi-threaded pgsvr end of the ssl connection unreliable (#47275).

GEM_PGSVR_UPDATE_CACHE_ON_READ can cause errors for remote logins

When the remote gem configuration parameter GEM_PGSVR_UPDATE_CACHE_ON_READ is set to true, logins from remote gems may encounter the error ’Repository root page is corrupted or contains a disk media defect’. This is related to the requested root page having been flushed from the Stone’s cache. (#47291)

Bug Fixes

gslist crashed if GS64 2.x Stone or NetLDI is running

If a Stone or NetLDI from older, 2.x version of GemStone/S is running on a host machine, the v3.4 gslist gets a segmentation fault. (#47234)

Failed mid-level cache startup caused Gem crash

When a mid-level cache could not be started, it caused a fatal error in the gem. (#47305)

Abort may not advance view if not in transaction and many CRs behind

If a session performs an System >> abortTransaction, when the session is outside of transaction, and many commitRecords behind the current, it will not advance it’s view. (#47344)

GsFile contents*OfDirectory: did not correctly handle Characters with codePoints over 127

In Unicode Comparison Mode, the method GsFile class >> contentsAndTypesOfDirectory: and contentsOfDirectory:, when encountering a directory or file name that included Characters with codePoints over 127, returned instance of Utf8. In Traditional String Mode, the results were corrupt. (#47325)

Now, in Unicode Comparison Mode, these methods return instance of Unicode16, and in Traditional String Mode, the results are a DoubleByteString or String with valid contents.

Restore from backup with missing or corrupted objects

If a backup file has corruption which prevents certain objects from being restored, the restore would terminate with a non-fatal error depending on the specific problem, and the backup file could not be restored. (#47401)

Rather than allowing the backup to be completely unusable, the restore now tolerates some corrupted records and continues to complete the restore. On completion, the restore reports a new fatal error, BKUP_ERR_RESTORE_FAILURE/4152.

If you encounter this error, it is recommended that you find a non-corrupt backup file to restore. However, if you do not have another backup, you can continue to restore the tranlogs and perform commitRestore. After the commitRestore you should perform an object audit to determine the extent of the problems, and if possible, attempt to repair the issues.

Code path in validatePassword: could crash Gem

It was possible under certain conditions that sending validatePassword: to a UserProfile could crash the Gem. (#47327)

This was specifically exposed when using the GBS User Tool to change a User’s authentication from UNIX to GemStone. However, note that changing the authentication to GemStone did not work in 3.4, due to bug #47294.

Errors on bitmap filenames that are not String or Unicode7

The code to write or read bitmap (.bm) files did not handle UTF8, and DoubleByteStrings or Unicode strings outside the Unicode7 range reported primitive failures or argument errors. (#47395)

RcIdentityBag loses RC when remove bags are large

If the number of items in an internal per-session remove bag becomes large, that is, contains more than about 2000 items, the remove bag becomes subject to transaction conflicts. Remove bag entries are associated with the session slot that added the object; this required a particular set of circumstances to occur. (#47212)

PR_SET_PTRACER misplaced error message

In some cases unrelated to pstack, the printout "PR_SET_PTRACER returned -1, pstack may fail" appeared. This is now only printed when appropriate, when forking to run pstack. (#47333)

Security error when browsing implementors

If session methods have been enabled for a user that does not have CodeModification privilege, attempting to browse implementors of any method will trigger a SecurityError. (#47364)

openSSL executable not working on Windows

openSSL executables are provided with the GemStone distribution on each platform. On Windows, libraries were missing and the executable would not run. (#47393)

The windows client distribution in v3.4.1 includes additional files:

bin\libcrypto-1_1.x64.dll, .pdb
bin\libssl-1_1-x64.dll, .pdb
bin\openssl.pdb
bin32\libcrypto-1_1.dll, .pdb
bin32\libssl-1_1.dll, .pdb
bin32\openssl.exe, .pdb

Subclass creation using byteSubclass:... did not tolerate nil SymbolDictionary

Classes may be created and not put into a specific SymbolDictionary by passing in a nil for the inDictionary: argument. The subclass creation methods subclass:... and indexableSubclass:... allowed this, but byteSubclass:... generated an error. (#47403)

GsSecureSocket did not correctly apply client certificates

There was a bug in the internal code such that when configuring mutual authentication, the method to set CA certificates did not work correctly for client contexts. This did not cause any observed problems, although openSSL documentation indicated this was required. (#47256).

Restore from secure but not encrypted backup accepted decryption key

The methods that perform secure restore, are used to restore both encrypted and signed but not encrypted backups. When restoring a signed unencrypted backup, the private key arguments and passphrase are not needed and should be nil. It was previously not an error if these arguments were provided. (#47138)

GsFile >> isTerminal incorrect

The code for isTerminal checked against an incorrect constant and did not return correct results. (#47283)