GemStone/S 64 Bit 3.2.7 is a new version of the GemStone/S 64 Bit object server. This release fixes a number of critical bugs, and includes other feature changes and bug fixes. We recommend everyone using or planning to use GemStone/S 64 Bit v3.2.x upgrade to this new version.
These release notes provide changes between the previous version of GemStone/S 64 Bit, version 3.2.6, and version 3.2.7. If you are upgrading from a version prior to 3.2.6, 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.2.6.
GemStone/S 64 Bit version 3.2.7 is supported on the following platforms:
Note that on Linux, GemStone/S v3.2.6 and v3.2.7 have been compiled on a later kernel; Red Hat 6.1 and 6.4 are no longer supported.
For more information and detailed requirements for each supported platforms, please refer to the GemStone/S 64 Bit v3.2.6 Installation Guide for that platform.
The following versions of GBS are supported with GemStone/S 64 Bit version 3.2.7. You must use GBS version 7.6.1 or later for VisualWorks, or 5.4.2 or later for VA Smalltalk, with GemStone/S 64 Bit v3.2.7.
The GemStone/S 64 Bit v3.2.7 distribution includes VSD version 5.0. The previous version of GemStone/S 64 Bit, v3.2.6, included VSD v4.0.2.
The most significant changes in 5.0 are internal. Changes between VSD v4.0.2 and v5.0 include:
Other minor changes and fixes are also included. For more details, see the Release Notes for VSD v5.0.
The following are changes between v3.2.6 and v3.2.7:
The version of OpenSSL used by GemStone/S 64 Bit v3.2.7 has been updated to 1.0.2c.
Some OS functions used by GemStone can be optimized using compiler built in functions on AIX. (#45267)
Unreferenced Symbols are garbage collected via a configuration option, STN_SYMBOL_GC_ENABLED, when set to true; it is false by default.
In all 3.2.x versions, Symbol GC may not complete correctly with non-trivial numbers of Symbols.
This issue is not fixed in this release; in v3.2.7, setting STN_SYMBOL_GC_ENABLED to TRUE has been disallowed. (#45403)
The SymbolGem may commit up to 500 new symbols per commit. When AllSymbols is large (over 6M), and a large number of new symbols is being created so the 500 limit is reached, the SymbolGem’s default temporary object memory may not be large enough to hold the collision buckets for all of the new symbols. In this case the SymbolGem shuts down with an out of memory error. (#45379)
The following configuration parameter has been added:
STN_SYMBOL_GEM_TEMPOBJ_CACHE_SIZE
Specifies the temporary object memory size of the Symbol Gem. The Stone's runtime parameter #StnSymbolGemTocSize is initialized from STN_SYMBOL_GEM_TEMPOBJ_CACHE_SIZE at stone startup. If the Symbol Gem dies (other than from an explicit execution of System stopSymbolGem), and is automatically restarted, then the setting for #StnSymbolGemTocSize setting will be doubled.
This doubling only occurs for the first restart since either Stone startup or an runtime change to #StnSymbolGemTocSize.
While the default is normally 20MB, if repository conversion is detected at stone startup (startstone -C) the default is 200MB.
Runtime equivalent: #StnSymbolGemTocSize
Min: 10000KB
Max: 10GB
Default: 20MB
When the SymbolGem dies inadvertently while there are outstanding symbol requests (for example, on out of memory from bug 45379), and is automatically restarted, the stone may continue to receive messages regarding the suspended symbol creation request, and run at 100% CPU. (#45376)
The code supporting the System class >> clusterAllSymbols functionality did not correctly determine when to commit, and could run out of memory. It also did not return control to the invoking session, which prevented it responding to sigAborts, with the risk of a commit record backlog. (#45400, #45411)
After a failed commit, temporary objects that would have been committed are in a special state, normally resolved by abort or by a retry of the commit. After the failed commit but before further commit or abort, sending #isCommitted to these temporary objects would return true, although the objects were not actually committed. (#45409)
When the byte ordering of the client is different than the byte ordering of the gem (for example, Linux or Solaris/x86 client connected to AIX or Solaris/SPARC host), and transmission is compressed, there is a risk of SEGV. (#45355)
When elements are added, removed, or copied to a SequenceableCollection with a size greater than 2034, there is a risk that it and/or other objects in the VM can become corrupted or the gem crash with a SEGV. (#45358)
If the GcGem gets stuck while holding the commit token, the handling specified by STN_COMMIT_TOKEN_TIMEOUT is not effective, since the GcGem was exempted from being terminated this way. Other sessions that request commit were hung indefinitely, waiting for the commit token. This immunity has been removed, and a stuck GcGem holding the commit token will now be killed like other gems. (#45103)
It was possible for the GsObjectInventory methods #profileRepositoryAndListInstancesInPageOrder:toFile: and profileRepositoryAndSkipHiddenClassesAndListInstancesInPageOrder:toFile: to fail with an OutOfRange error. (#45292)
A number of issues related to the Repository>>findAllReferencePathsToObject* and other related methods have been fixed in this release.
The methods Repository>>findAllReferencePathsToObject* previously returned the complete set of all paths to reach a given object. These methods are intended to locate a hard to find object or objects; when used with some common objects, the number of paths may be unreasonable. The need for temporary object memory could therefore grow unbounded for inadvertent cases, and result in out of memory errors.
To avoid such problems, the these methods now search for the first 32 paths to the given object/s.
To specify a search with a larger number of paths (or fewer paths), the following methods have been added that include the maxPaths: keyword to specify the maximum number of paths to search along.
Repository >> findAllReferencePathsToObject:maxPaths:
Repository >> findAllReferencePathsToObjects:limitObjArray: printToLog:maxPaths:
Repository >> findAllReferencePathsToObjects:maxPaths:
Repository >> findAllReferencePathsToObjects:printToLog:maxPaths:
The Repository>>findAllReferencePathsToObject* methods required a large amount of memory to store intermediate results. The algorithms have been redesigned to use much less memory. (#45190)
Recent releases have moved some obsolete classes to Globals at #ObsoleteClasses, and classes may legally be in locations other than in a SymbolDictionary in the SymbolList. In these cases, the scan reported ***Disconnected Class/Metaclass detected***. This did not affect results, but was alarming and may have slowed down performance. (#45317)
When stepping through code in the debugger, in GBS or in topaz with display oops and display classoops, the evaluation temporaries are included in the variables with the frame listing. These evaluation temporaries would normally include the immediate argument and topOfStack. The immediate argument was missing in versions 3.2.1 and later. (#44225, GBS bug #44475)
It was possible for the AdminGem's vote on possible dead to trigger an AlmostOutOfMemory, potentially causing an error. (#45233)
When creating subclasses of Number using Number>>fromString:, the handling of exponent and literal designator characters has changed in this release. The f, F, p, q, and s characters are now accepted. P and S now raise an exception, since these do not conform to the GemStone BNF. (#45168)
The methods RcKeyValueDictionary >> at:ifAbsent: and RcKeyValueDictionary >> at:otherwise: returned the error #rtErrNilKey (error 2090) when the specified key was nil, rather than executing the block supplied to handle nil keys. (#44961)
Certain statmonitor invocations that include the -N to collect network statistics may have caused statmonitor to SEGV. (#45120)
After upgrade from 2.x to 3.x, GsMethods must be converted to instances of GsNMethod before they can be executed. GsMethods that do not get executed, for older versions of classes or for obsolete classes, may not need recompile.
Version 3.2.7 includes both changes in the impact of unrecompiled methods, and changes in the upgrade process that reduce unrecompiled methods on kernel classes.
If a 2.x repository contains DoubleByteSymbols, there is a risk that these objects may have incorrect in-memory state in the SymbolGem during the upgrade step of conversion, depending on the relative in-memory location of the classes. (#45206)
While they cannot be executed, the source code of GsMethods in an upgraded repository can be viewed. GBS browsers invoked a method that was not present in GsMethod, so attempting to view them resulted in a message not understood _allBreakpoints. This method has been added to GsMethod. (#44744)
If current versions of classes contained unrecompiled GsMethods, the method ClassOrganizer>>referencesToObject:, which is also used by GBS’s operations "Find All References to this/any Class", raised a message not understood _literalsIncludesValue:. This method has been added to GsMethod. (#45278)
A small number of kernel classes that do not have reserved OOPs, and which have class definition changes, are versioned by upgrade. The older versions of these classes did not have methods recompiled into instances of GsNMethod. Now, during upgrade to v3.2.7, methods are removed for older versions of kernel classes. (#44744)
Affected classes are ProfMonitorEntry, ProfMonitorTree, and SimpleTestResource.
The class ObsQuadByteSymbol is obsolete in v3.2.x; as such, its class methods were not recompiled into instances of GsNMethod. In v3.2.7, this class along with other obsolete classes, have been moved out of Globals and into (Globals at: ObsoleteClasses) (#45225)
The following classes have been moved from Globals to (Globals at: #ObsoleteClasses):
ObsDoubleByteString
ObsDoubleByteSymbol
ObsFloat
ObsLargeNegativeInteger
ObsLargePositiveInteger
ObsoleteDateTime50
ObsoleteExceptionA
ObsoleteGsProcess
ObsoleteGsRdbConnection
ObsoleteGsSocket
ObsoleteMetaclass
ObsQuadByteString
ObsQuadByteSymbol
ObsSmallFloat