

GemStone/S 64 Bitâ„¢ 3.7.6 is a significant new release of the GemStone/S 64 Bit object server, including a number of new features and feature enhancements and fixing several critical bugs.
This release also adds support for Debian and for installation using APT.
These Release Notes include changes between the previous version of GemStone/S 64 Bit, v3.7.5, and 3.7.6. If you are upgrading from a version prior to 3.7.5, review the release notes for each intermediate release to see the full set of changes.
For details about installing GemStone/S 64 Bit 3.7.6 or upgrading from earlier versions of GemStone/S 64 Bit, see the GemStone/S 64 Bit Installation Guide for v3.7.6 for your platform.

This release includes a new feature, Local passwordless login. This feature is disabled by default, and can be enabled/disabled on the command line. The upgradeImage script has been updated to use this feature, to avoid the security risk of persistently setting SystemUser’s password to the default during upgrade. upgradeImage now requires that you enable passwordless login. For details, see the Installation Guide for v3.7.6.


GemStone/S 64 Bit version 3.7.6 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.7.6 Installation Guide for that platform.

The following versions of GBS are supported with GemStone/S 64 Bit version 3.7.6:

The GemStone/S 64 Bit v3.7.6 distribution includes VSD version 5.6.7. The previous release, v3.7.5, contained VSD v5.6.5. v5.6.6 was not released; v5.6.7 includes a minor feature enhancement, and is built with updated TCL libraries.
VSD 5.6.7 is included with the GemStone distribution, and can also be downloaded as a separate product from https://gemtalksystems.com/vsd.


The historic GemStone upgrade process requires that you set the repository’s SystemUser password to the default. This is a security hole.
Other modern databases such as Oracle and PostgreSQL include features that allow login without a password under specific conditions.
Local passwordless login support has been added to GemStone. This feature is controlled by a new configuration parameter, STN_LOCAL_PASSWORDLESS_LOGINS_ENABLED, which is disabled by default. For details on this parameter, STN_LOCAL_PASSWORDLESS_LOGINS_ENABLED.
This feature is used by upgradeImage in v3.7.6. It must be enabled during the upgrade process; passwordless login can be enabled transiently and re-disabled immediately after upgrade, using new scripts.
With this configuration parameter enabled, any user (regardless of authentication scheme) can login with an empty password field, provided that all the following conditions apply:
Use caution when enabling passwordless login, other than during upgrade. If you are running the Netldi in guest mode with captive account, and the captive account is the same user that started the Stone, then any RPC Gem started by that Netldi on the Stone’s node is running as the captive account’s Unix user. This Gem may be able to exploit passwordless login via triggering separate linked login.

GemStone upgrade now relies on the passwordless login, to avoid the security hole of setting SystemUser’s password to the default. The upgrade instructions have changed; before executing upgradeImage, you must enable passwordless login.
Please read the Installation Guide for v3.7.6 carefully for changes.

STN_LOCAL_PASSWORDLESS_LOGINS_ENABLED can be enabled and disabled at runtime.

enablepasswordlesslogin [ -h ] [ -l log ] -p systemUserPassword [ -s stoneName ]
|
Full path to a log file for debugging. File is appended if it already exists. Default: /dev/null |
|
Enable passwordless login for the specified Stone. This script logs in as SystemUser with the given password. Upon success, passwordless logins are enabled for all UserProfiles, as long as all the following conditions are true:
The change made by this script is NOT permanent; the Stone will revert to the config file setting STN_LOCAL_PASSWORDLESS_LOGINS_ENABLED on Stone restart.

disablepasswordlesslogin [ -h ] [ -l log ] [ -s stoneName ]
|
Full path to a log file for debugging. File is appended if it already exists. Default: /dev/null |
|
Disable passwordless login for the specified stone. This script assumes passwordless logins are already enabled and logs as SystemUser without a password. That login will fail, and this script will error, if passwordless logins were already disabled. Upon success, passwordless logins are disabled.
The change made by this script is NOT permanent; the Stone will revert to the config file setting STN_LOCAL_PASSWORDLESS_LOGINS_ENABLED on Stone restart.


The following method has been added, which can look up the sessionId based on the PID for a local or remote gem.
System class >> sessionIdForPid: aPid
Answer the session ID for the given gem process ID, or nil if no such gem exists.

GemStone provides access to an array of session state, which includes offsets that are reserved for GemStone internal values, and offsets for use by customer applications. Over the years, the range of offset reserved for GemStone has changed.
The original methods _sessionStateAt:/_sessionStateAt:put: were replaced by public methods sessionStateAt:/sessionStateAt:put: in v3.2. The methods _sessionStateAt: and _sessionStateAt:put: were deprecated. These methods were not updated for the new reserved range for GemStone internal session state; that has been corrected in this release (#51948).
If your application uses the deprecated _sessionStateAt:* methods, it is strongly recommended to upgrade these to use the public sessionStateAt:* methods.
You should see no issues if you only use _sessionStateAt:/_sessionStateAt:put: within an application. However, if you mix the use of _sessionStateAt:/_sessionStateAt:put: and sessionStateAt:/sessionStateAt:put: in the same session, or if you are accessing GemStone internal values using the underscore methods, the results may be inconsistent.

The classes TrueClass and FalseClass, which were provided to support Ruby, have been moved to ObsoleteClasses, and are no longer visible.
The method System class >> encryptPassword:withSalt: has been removed, to avoid issues with library dependencies (GemStone did not run on RedHat v10 due to libxcrypt dependency).

In a hot standby system, when continuousRestoreFromArchiveLogs: exits, it prints messages about the shutdown of the working threads. Now it also explicitly reports the continuous restore shutdown, for example:
--- 04/15/26 15:38:26.136 PDT Continuous Restore stopped


The following configuration parameter has been added:
STN_LOCAL_PASSWORDLESS_LOGINS_ENABLED
A boolean which indicates if logins without a password are allowed when all of the following conditions are true:
1) The login is from a linked GCI application (e.g.: topaz -l).
2) The process is running on the same host as the Stone process.
3) The effective user ID of the process is the same as the effective user ID of the Stone process.
4) The password field is left blank or set to an empty string ('')
Must be set to TRUE during GemStone upgrades. Refer to the installation documentation for further details.

The output printed to the Login log, as enabled by the configuration parameter STN_LOGIN_LOG_ENABLED, includes a "Login authentication kind" field.
Logins that use the passwordless login process will be specified by a -2 value.

The calculation for system default values, such as the number of reclaim threads or AIO page servers, depends on the repository size, cache size, and number of extents, but was too heavily skewed by the number of extents. This computation has been adjusted to avoid producing unreasonable values for some configurations.
After upgrading to v3.7.6, please review the computed values documented in the Stone log against the defaults from earlier versions. These changes may affect your performance.

The GemStone Windows client now includes gslist.exe. While GemStone server processes do not run on Windows, using gslist on Windows with the -m option allows you to query for information on GemStone servers on a Linux or Mac host.


Support has been added for tracking the time spent in FFI calls.
TimeInFfi (Gem)
Approximate total number of real milliseconds spent in FFI callouts.

NextSleepTime for the StnAioThr stat type has been changed to NextSleepTimeUs
NextSleepTimeUs (StnAioThr)
NextSleepTimeUs is the number of microseconds that a free frame or extent write thread will sleep during the next sleep period. This value is adjusted based on cache pressure and checkpointing.

The following bugs were present in v3.7.5 and are fixed in this version.

Under rare circumstances, the in-memory garbage collector may have misidentified a non-oop pointer as an oop, when the garbage collection was triggered from an optimized (frameless) method. This resulted in a SEGV. (#51970)


Restore from transaction logs considers a tranlog with no records as invalid. However, a tranlog is created as an empty file, with a record written immediately afterwards. Using the split tranlogs feature, this may mean an empty tranlog is part of the sequence, and the timing of hot standby restore on some configurations can attempt to restore the empty tranlog and cause continuous restore to stop. This caused the restore to fail although the tranlog series was valid. (#51977, #51967)

System >> suspendLogins is designed to prevent user logins. This did not work when the repository was in restore mode. (#51962)

When running multiple of either of these types of pageservers, they should scan sections of the cache to distribute the work. They were scanning the entire cache, which is less efficient. This can lead to serious performance problems on systems with a very large SPC. (#51998)

If an instance of GsFile or GsSocket is modified in a nested transaction and then committed, the subsequent logout SEGVed. (#51954)

When sessions are starting up, if a remote cache cannot be found, the code may SEGV. (#52017)

When loading data configured for STN_OPENID_DISCOVERY_URLS to support JWT logins, if the data is larger than the buffer such that the buffer is grown, the new size of the buffer not correctly computed and might not have been large enough to accommodate longer JSON strings. This resulted in a buffer overrun and SEGV. (#52019)

RedHat v10 did not by default install libxcrypt-compat, which was required for GemStone to run. This dependency has been removed from GemStone. (#51854).

Using kill -TERM on the Stone process performs a clean shutdown, similar to stopstone. However, the sequence of shutdown operations was slightly different between stopstone and kill -TERM, and after kill -TERM, there might be some delay before the shared memory segment was freed. The shutdown process for both stopstone and kill -TERM has been updated in this version to provide a clean shutdown; the lock file is not removed until all shutdown is complete. (#51945)

When the cache warmer warms a cache using the working set file, there are ways that invalid pages (with id -1, or out of range) may be introduced. Reading these invalid page ids from the working set file errored, which caused cache warming to hang. (#51584)

Object >> dynamicInstVarPairs did not handle the case where the receiver is a special (Character, SmallInteger, etc.), and SEGVed. (#52002)


Objects returned from GCI calls are typically added to the PureExportSet on the GCI client, to ensure these are not garbage collected. The GciTsResolveSymbol, GciExecuteStrTrav, and GciExecuteStrTrav_ calls that return a Symbol, inadvertently added a String to the PureExportSet, causing the PureExportSet to grow. (#51976)

When a non-blocking login is in progress but not complete, sending GciTsNbLogout does not log out, and login may complete and stay logged in. (#51873)

ISOLatin >> printOn: errored when the argument was not a kind of PrintStream (#51980)

The "fast" versions of repository scan operations, such as fastMarkForCollection, are designed to use more system resources to complete faster. However, the calculation for the number of threads was excessive, increasing system load without improving scan progress. (#51951)

The processes that support remote caches are subject to a number of timeouts for startup and reconnect. The calculated remote cache page server timeout was incorrectly too small, resulting in disconnects where a reconnect was possible. (#52018)

The cache statistics ProgressCount allows you to see the progress of a repository scan over all OOPS in the repository. This is used to compute the percentage complete, which is reported periodically on stdout during an MFC. This computed percentage complete did not account for the number of FreeOops in the repository, and thus was potentially much lower than the actual percent complete. The percent complete cannot be determined precisely, but the estimate is now much closer to the actual percent complete. (#51952)


Repository >> fastListReferencesToInstancesOfClasses: was not scalable on larger systems, due to inefficient code and a too-small buffer size. (#49957)

The Repository methods allReferencesToInstancesOfClasses:, fastListReferencesToInstancesOfClasses:, etc. did not handle the special classes added in v3.6, including SmallDate, SmallDateAndTime, SmallScaledDecimal, and SmallTime. (#51876)

This method accessed an incorrect variable, and did not produce correct results. (#52008)

PersistentCounter updates (System persistentCounter* methods) should be written to the tranlogs; a case was found in which records for persistent counter updates were not flushed during a checkpoint, and could be missing from the tranlogs. (#51858)

The following changes only apply in X509-secured GemStone

When a certificate used to authenticate in X509-secured GemStone expires, the expiration was not clearly reported.
Now, the X509 Netldi and HostAgent will check for expired certs, and always refuse to start if a cert is expired. Note that if the cert expires while the Netldi or HostAgent are running, these will continue to run.
At startup of the X509 Netldi or HostAgent, they will print the expiration dates of all certs in their chain. These will also print a warning if any cert will expire within 30 days.

To support environments in which host names are more reliably unique than IP addresses, the HostAgent name (used in the lock file and reported by gslist) has been changed. Previously, this had the form:
hostagent-stonename-IPAddress (for example, hostagent-gs64stone-10.95.143.15)
hostagent-stonename-hostname (for example, hostagent-gs64stone-lark).