GemStone/S 64 Bit 3.3.4 is a new version of the GemStone/S 64 Bit object server. This release fixes a number of significant bugs, includes several feature improvements, and adds support for Ubuntu 16.04.
These release notes describe changes between the previous version of GemStone/S 64 Bit, version 3.3.3, and version 3.3.4. If you are upgrading from a version prior to 3.3.3, 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.3.1.
GemStone/S 64 Bit version 3.3.4 is supported on the following platforms:
Supported Windows client platforms are
Note that Solaris/SPARC support is being deprecated and will be available for development only. Solaris on x86 will continue to be fully supported.
For more information and detailed requirements for each supported platforms, please refer to the GemStone/S 64 Bit v3.3.1 Installation Guide for that platform.
The following versions of GBS are certified with GemStone/S 64 Bit version 3.3.4:
For more details on supported GBS and client Smalltalk platforms and requirements, see the GemBuilder for Smalltalk Installation Guide for that version of GBS. Consult the matrices on the website, gemtalksystems.com/products/gbs-vw or gemtalksystems.com/products/gbs-va, for the latest updates.
When the stone recovers after an unexpected shutdown, and there is a large number of commit records to process, it can delay making the stone available for users for a significant period of time.
In this release, the way recovery from a commit record backlog is handled on startup has been modified to reduce this delay. Now, while some critical work is done during the initial recovery and startup, the final commit record processing and disposal is done in the background, after the stone is available to users.
The startup messages in the stone log under these circumstances have been updated to describe the new behavior.
GsSecureSocket server sockets now support the verification modes SSL_VERIFY_FAIL_IF_NO_PEER_CERT and SSL_VERIFY_CLIENT_ONCE, which can be used when server certificate verification is enabled.
New methods in the image allow you to set options, by passing in an array that may include:
These options are only supported for server sockets; there are no verification options for client sockets.
The following methods have been added
GsSecureSocket class >> fetchCertificateVerificationOptionsForServer
Answers an Array of Symbols which represent the certificate verification options that can be used by server sockets.
GsSecureSocket class >> setCertificateVerificationOptionsForServer: anArray
Sets the certificate verification options for server sockets using an Array of Symbols. If anArray is empty then any previously set options are cleared. Certificate verification for server sockets must be enabled before executing this method. Only applies for sockets created after this method is executed.
GsSecureSocket >> fetchCertificateVerificationOptions
Answers an Array of Symbols which represent the certificate verification options that can be used by the receiver. Certificate verification options are only supported by server sockets.
GsSecureSocket >> setCertificateVerificationOptions: anArray
Sets the certificate verification options for the receiver, which must be a server socket, using an Array of Symbols. If anArray is empty then any previously set options are cleared. The receiver must enable certificate verification before this method is executed, and must use this method before the receiver attempts a connection with its peer.
The following are added protocol to check for the current status of verification:
GsSecureSocket class >> certificateVerificationEnabledOnClient
Answer true if certificate verification is enabled for client sockets.
GsSecureSocket class >> certificateVerificationEnabledOnServer
Answer true if certificate verification is enabled for server sockets.
GsSecureSocket >> certificateVerificationEnabled
Answer true if certificate verification is enabled on the receiver.
Methods have also been added to specify a certificate directory.
GsSecureSocket class >> useCACertificateDirectoryForClients: aDirectoryString
Specifies a directory where trusted certificate authority (CA) certificates in PEM format are located. The certificates in this directory will be used to authenticate certificates provided by servers during the SSL handshake. The directory may contain more than one certificate.
Certificates are loaded into the internal SSL state which is valid for the current session only; the SSL state is not committed to the repository. Has no effect on instances created before the method was called nor server sockets.
If successful, this method also enables certificate verification for client sockets as if the #enableCertificateVerificationOnClient method had been called.
GsSecureSocket class >> useCACertificateDirectoryForServers: aDirectoryString
Specifies a directory where trusted certificate authority (CA) certificates in PEM format are located. The certificates in this directory will be used to authenticate certificates provided by client during the SSL handshake. The directory may contain more than one certificate.
Certificates are loaded into the internal SSL state which is valid for the current session only; the SSL state is not committed to the repository. Has no effect on instances created before the method was called or client sockets.
If successful, this method also enables certificate verification for server sockets as if the #enableCertificateVerificationOnServer method has been called.
Also, GsSecureSocket >> useCACertificateFileForClients: and useCACertificateFileForServers: now enable cerificateVerification; previously this required an additional step for clients.
The configuration parameter STN_GEM_TIMEOUT is designed to terminate gems that have had no interaction with the stone for some period of time. There was a logic error that prevented the check from running, with the result that idle gems were not terminated. (#46723)
When the repository’s oop number high water mark exceeded 4 billion, it was possible for a restore from full backup to hot hang. (#46252)
If a Gem exits prematurely during the wrong point in the Gem-to-Stone login handshake, a counter in the Stone that was incremented did not get the appropriate decrement. This reduced the maximum possible sessions that could log in (from the limit set by STN_MAX_SESSIONS or license limits). (#46817)
When a tranlog record contains only one record, a single selective abort, the size of the record is small enough that it is skipped by restore. (#46695)
Calling GsFile >> position: with a argument greater or equal to 231 (2147483648) returned nil, and caused subsequent calls to GsFile >> position to return incorrect values. (#46750)
If the last line of a configuration file contains a parameter setting, and this line does not end in a linefeed, then that final parameter setting was not used. (#46716)
Particularly in upgraded repositories, it was possible to have Fractions (normal POM objects with OOPs) that are in the range of the recently added SmallFraction type (special objects in which the value is encoded in the OOP). Passivate/activate did not work correctly for these instances. Conversion to SmallFraction is automatic, while handling of POM objects and specials during passivate/active are done differently. (#46784).
Symbol garbage collection can be run manually to remove unreferenced Symbols, per the instructions in the System Administration Guide. This code did not identify and mark for removal symbols that contain characters over 255 and so are instances of DoubleByteSsymbol or QuadByteSymbol. (#46614)
If an object is in an IdentityBag or IdentitySet with more than about 1015 or 2030 elements, respectively, a listReferences: or fastListReferences: operation did not detect the reference. (#46645)
During an upgrade from 3.2.x or earlier, the postconv step recompiles sortBlocks in persistent SortedCollections. If postconv specifies more gems to perform recompilation than there are instances of SortedCollection, postconv reports errors. (#46575)
When the multithreaded pageserver starts up, it has a number of tasks to complete, and was running hot attempting to find a port to listen on. The code now does a better job of port selection, and has improved reporting when unable to find a port to listen on. (#46818)
Now the default (when STN_PGSVR_PORT_RANGE is not set), defaults to use random ports within the range for ephemeral ports. On Linux, ephemeral ports are defined by /proc/sys/net/ipv4/ip_local_port_range.
Also, setting STN_PGSVR_PORT_RANGE to a value of 10000, 65535 will be interpreted as use random ports.
GemStone allows you to create nested in-memory transactions, using the method System class>>beginNestedTransaction. This method was creating a internal reference to a hidden object, an instance of GsMethodLookupCache. While commit of the in-memory transaction reported success, the subsequent commit of the actual transaction resulted in an error, which disabled further commits. (#46805)
When a remote shared page cache was shutdown while there was a read in progress, the gem handling was incorrect, resulting in the gem hanging. This prevented the complete shutdown of the remote cache. (#46708)
The results of allSelectors could return duplicate symbols, if the superclass implemented the same method. (#46621)
The primitive failure handling code for the at: anIndex argument was incorrect, resulting in an meaningless error message. (#46537)
If the IcuLibraryVersion was manually set to an instance of Unicode string, but the repository was not in Unicode comparison mode (StringComparison is set to String, not Unicode16), then logins failed due to a disallowed comparison. (#46813)