GemStone/S 64 Bit™ 3.5.8 is a new version of the GemStone/S 64 Bit object server, including a number of feature enhancements and bug fixes.
These release notes describe changes between the previous version of GemStone/S 64 Bit, version 3.5.7, and version 3.5.8. If you are upgrading from a version prior to 3.5.7, 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.5.6 for the Mac, or 3.5.3 for other platforms.
GemStone/S 64 Bit version 3.5.8 is supported on the following platforms:
For more information, please refer to the GemStone/S 64 Bit Installation Guide for that platform.
GemStone/S 64 Bit version 3.5.8 requires GBS version 8.4 or later for VisualWorks Smalltalk, or version 5.4.5 or later for VAST Platform (VA Smalltalk).
The following versions of GBS are supported with GemStone/S 64 Bit version 3.5.8.
The GemStone/S 64 Bit v3.5.8 distribution includes VSD version 5.5.3. The previous version of GemStone/S 64 Bit, v3.5.7, included VSD v5.5.2. VSD 5.5.3 includes improved searching, bug fixes, and updates to the help system.
VSD v5.5.3 is included with the GemStone distribution, and can also be downloaded as a separate product. For details or to download, go to https://gemtalksystems.com/vsd/.
GemStone backups include all objects in the repository, which include UserProfiles such as SystemUser and DataCurator, and the passwords for these accounts at the time the backup was made. These passwords, of course, must be known to GemStone Administrators, but should be kept private and changed regularly for system security.
In previous releases, this added a requirement that along with GemStone backups, the administrative passwords that were valid at the time of that particular backup had to be recorded. Otherwise, while the backup could be restored if necessary, it was possible that administrative accounts could not log in.
Now, you may restore secure or unsecured backups and at the same time, specify a new password for SystemUser, using Repository methods with the new newSystemUserPassword: keyword. This allows you to restore a backup so the restored repository will have SystemUser’s password set to the argument password. SystemUser can login, and update other passwords as needed to allow complete use of the restored repository.
If your application contains sensitive data that should not be visible to unauthorized individuals, there are several administrative requirements that become more immediately visible with this feature. These requirements are not new; in previous releases plain text data may be visible within the bytes of a non-secured backups.
The following instance methods have been added to Repository, which are variants of existing methods with the additional keyword newSystemUserPassword:.
restoreFromBackup:newSystemUserPassword:
restoreFromBackups:newSystemUserPassword:
restoreFromSecureBackup:privateDecryptionKey:
passphrase:newSystemUserPassword:
restoreFromSecureBackup:privateDecryptionKey:passphraseFile:
newSystemUserPassword:
restoreFromSecureBackups:privateDecryptionKey:passphrase:
newSystemUserPassword:
restoreFromSecureBackups:scavengePagesWithPercentFree:
privateDecryptionKey:passphrase:newSystemUserPassword:
Previously, the simple secure backup method accepting a passphrase file did not exist; this method, and the variation with the additional keyword, have also been added:
restoreFromSecureBackups:privateDecryptionKey:passphraseFile:
restoreFromSecureBackups:privateDecryptionKey:passphraseFile:
newSystemUserPassword:
The argument to the newSystemUserPassword: keyword is a String meeting the same restrictions as to the password: method. Following the restore, login as SystemUser requires this password string.
When restoring using the methods that allow you to specify a new SystemUser password, you must be logged in as SystemUser. This restores the objects in the backup; but the new SystemUser password is saved in encrypted form in the root page state of the repository. The restore itself does not update SystemUser’s UserProfile object.
It is strongly recommended to log in again as SystemUser after the commitRestore (if you are in full transaction logging mode), or after the restore is complete (in partial logging mode). This login will cause the SystemUser password to be updated in SystemUser’s UserProfile.
Shutting down the stone does not affect the SystemUser password state in the root page; after restart, the SystemUser password remains as set by newSystemUserPassword:.
Finding out any information about another user’s UserProfile, such as the lastLoginTime or authenticationScheme, previously required OtherPassword privilege. This privlege also allowed modifying another users’s UserProfile.
To allow reading another user’s UserProfile, but not allow modifcation, a new privilege, ReadOtherUserProfile, has been added. A UserProfile with this privilege can read some information for other UserProfiles, but cannot make changes.
A UserProfile with OtherPassword has implicitly also ReadOtherUserProfile, so there is no need to grant this additional privilege to users with OtherPassword.
The following methods can be executed by a UserProfile with OtherPassword, ReadOtherUserProfile, or both privileges:
UserProfile >> activeUserIdLimit
UserProfile >> authenticationScheme
UserProfile >> hasLoginLogging
UserProfile >> isReadOnly
UserProfile >> lastLoginTime
UserProfile >> lastPasswordChange
UserProfile >> ldapBaseDn
UserProfile >> ldapSearchFilterDn
UserProfile >> loginsAllowedBeforeExpiration
UserProfile >> passwordAgeLimit
UserProfile >> passwordAgeWarning
UserProfile >> staleAccountAgeLimit
UserProfile >> userIdAlias
UserProfile >> passwordNeverExpires
The classes GSTestCase, GSTestResult, and GSTestSuite, which have been distributed in the $GEMSTONE/examples/testing directory, have been renamed to GsTestCase, GsTestResult, and GsTestSuite, and are now in Globals in the image.
These classes provide additional protocol and GemStone-specific behavior to the existing SUnit framework. These classes are also used internally at GemTalk for product testing.
The distribution no longer includes the directory $GEMSTONE/examples/testing.
The class NonPersistentArray has also been added to the image; this is used by the GsTest framework, but is available for general use. It is a subclass of Array with the class option #instancesNonPersistent.
In addition to the class name change, the GemStone SUnit classes now included in the image include bug fixes from the versions included in $GEMSTONE/examples/testing in previous releases.
GsTestResult treated errors and failures as the same, which led to miscounting of errors and of failures. SUnit supports defects, which includes both errors and failures.
GsTestResult now tracks defects, as well as supporting the superclass errors and failures. The instance variable defects has been added to GsTestResult.
Note that the TestCase >> defects returns results sorted with all errors followed by all failures, while GsTestCase >> defects returns both errors and failures in order of occurrence.
The methods for logging failures has been corrected; the methods:
GsTestResult >> logFailure: aTestCase
GsTestResult >> failureLogFile
have been removed, and are replaced by new methods:
GsTestResult >> logDefect: aTestCase
GsTestResult >> defectLogFile
And these methods now write to SUnitDefects.log, rather than SUnitFailures.log
The classes NonCoreTestCase and CoreTestCase have not been included in the GemStone kernel and the files are no longer distributed; these classes provide no particular value outside GemTalk internal testing.
Instances of GsTestResult store printStrings of the GsTestCase instance run, rather than the instances themselves. This is more space efficient, but sending methods such as isError: to these objects returned incorrect results (always false).
The following methods, inherited from TestResult, are now disallowed for GsTestResult:
isError:
isFailure:
isPassed:
The following private methods have been removed:
Repository >> _primRestoreSecureBackups:scavPercentFree:
bufSize:privateDecryptionKey:passphrase:numThreads:
Repository >> _restoreBackups:scavPercentFree:bufSize:
numThreads:
UserProfile >> _validateUserProfileAccess
The following error as been added, as part of the changes for bug 49715, described here.
The following cache statistic has been added, as part of the changes for bug #49771, described here.
The following bugs in v3.5.7 are fixed in v3.5.8.
Object >> trackRead was added in v3.5.7 as part of the Object Read Tracking feature. If this method was sent to an uncommitted object, it resulted in a Gem crash with SEGV. (#49679)
Under some conditions, a Gem may attempt to write an invalid record kind 0; in the observed case, it should have been a BEGIN_DATA. Now, if such a case occurs, the Gem will get a fatal error (see GS_ERR_INVALID_TRANLOG_RECORD / 4021), and the data is not written to the tranlog. (#49715)
A case was observed in which an entry in an NSC was not recorded in the transaction log when STN_TRAN_INCREMENTAL_LOGGING=true. (#49713)
When a multi-threaded operation such as markForCollection was requested with more threads than currently available process slots in the repository, previously the operation executed with as many threads as available process slots. This prevented other sessions from logging in, including stopstone. In addition, if the multi-threaded operation was expected to run with a large number of threads but only a small number of slots was available, it would run with those few threads, unexpectedly taking much longer to complete. (#49611)
Now, if there are not enough process slots available, the requested operation is executed with half as many threads as requested.
If this is still more than is available, an error is reported, allowing you to determine the reason for unavailable slots and correct the problem, or retry with a smaller number of threads.
When upgrading from a version earlier than 3.5, if the GemStone base classes in the originating repository have an unusual distribution of classes and methods over the GsObjectSecurityPolicies, there may be security errors in upgradeImage, when CodeLibrarian performs the recompile of methods. (#49807)
There were bugs in the code to upgrade GsDevKit (issues 15, 16, 21 and 23 on the github project). These fixes are included in the distribution in $GEMSTONE/examples/seaside/bin/GsDevKit_upgrade.gs. (#49795, 48510)
SHR_PAGE_CACHE_LARGE_MEMORY_PAGE_SIZE_MB=0;
SHR_PAGE_CACHE_LARGE_MEMORY_PAGE_POLICY=2;
On stone startup, the SPC Monitor crashes with a SIGFPE (divide by zero). (#49737)
For some uses of the {} Array constructor syntax using nested blocks, with native code enabled, the Gem could encounter a SEGV or endless loop in methodLookupCache. (#49712)
The characters µ/code point 181 and ÿ/code point 255 have uppercase forms that are outside of the range of a Single-byte String. Sending asUppercase to a single-byte String containing either of these characters did not convert to a DoubleByteString, and resulted in a single-byte String containing the wrong upper case form. (#49741)
When a remote cache fails to start, the messages were misleading, and the retry logic incorrectly attempted retrying the fork. (#49718)
If a commit fails due to RC conflicts, an abort should be done before a subsequent attempt to commit. This abort was not required, so a commit was allowed, which could bypass correct transactional behavior, since the commit was based on the view with partial updates from the RC replay. (#49777)
The following stone cache statistics were not updated in some cases of grows initiated internally. The affected statistics are:
totalExtentGrows
timeInExtentGrows
avgTimePerExtentGrow
The statistic ExtentGrowFailedTotal has been added, to track extent grow failures; see ExtentGrowFailedTotal (Stn).
While Epoch GC runs, the AdminGem sets itself to be in automatic transaction mode. If Epoch fails to start, for example if there are not enough available process slots in the shared page cache, it did not correctly reset its transaction mode to #manualBegin, and thus remained in transaction. (#49657)
Locale can be used in GemStone to specify to use the comma as the decimal points, for fromString: and printing, but does not affect compiler parsing. ScaledDecimal literal syntax (using a period decimal point and s, such as 3.45s6) did not parse in a comma Locale. (#49822)
There are cases in which CByteArrays and CPointers that used by FFI can be committed, faulted out, and lose C data when faulted in, causing the Gem to crash. (#49769). The changes in this release are to avoid the crash; the underlying bug condition remains.
By default, topaz automatically reads a existing .topazini file on startup. If the .topazini sets any of the standard login parameters (gemstone, username, etc.), it clears any X509 login parameters, including those passed in via the topaz command line. This design is intended to avoid mixing sets of login parameters
Now, a warning is printed if command line -X arguments are cleared by a .topazini setting. (#49761)
Using kill -USR1 to print stacks to the process log file, in some case where the stack is corrupted, it may have entered a loop printing [ incomplete frame, send in progress ] to the log file, potentially filling up the disk space. (#49655)