1. GemStone/S 64 Bit 3.2.7 Release Notes

Overview

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.

Supported Platforms

Platforms for Version 3.2.7

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

  • Solaris 10 and 11 on SPARC
  • Solaris 10 on x86
  • AIX 6.1, TL1, SP1, and AIX 7.1
  • Red Hat Linux ES 6.5; Ubuntu 12.04; and SUSE Linux Enterprise 11 Service Pack 3, on x86
  • Mac OSX 10.6.8 (Snow Leopard), with Darwin 10.8.0 kernel, on x86

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.

GBS Versions

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.

GBS version 7.6.1

VisualWorks
7.10.1

32-bit

VisualWorks
7.10.1

64-bit

VisualWorks

7.9.1

32-bit

  • Windows 8,
    Windows 2008 R2 and Windows 7
  • Solaris 10 on SPARC
  • Ubuntu 12.04,
    RedHat Linux ES 6.5, and SUSE Linux ES 11 SP3
  • Windows 8,
    Windows 2008 R2 and Windows 7
  • Solaris 10 on SPARC
  • Ubuntu 12.04,
    RedHat Linux ES 6.5, and SUSE Linux ES 11 SP3
  • Windows 2008 R2 and Windows 7
  • Solaris 10 on SPARC
  • SUSE Linux ES 11 SP3
GBS version 5.4.2

VA Smalltalk
8.6

VA Smalltalk
8.5.2

  • Windows 8, Professional or above
  • Windows 2008 R2
  • Windows 7, Professional or above
  • Windows 2008 R2
  • Windows 7

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.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:

  • Recompile with updated libraries; moved from BLT libraries to Refactored BLT Components.
  • New, VSD-specific application icon for Windows.
  • VSD online help made more usable by filtering out statistics definitions

Other minor changes and fixes are also included. For more details, see the Release Notes for VSD v5.0.

Changes and Bugs Fixed

The following are changes between v3.2.6 and v3.2.7:

Updated SSL libraries

The version of OpenSSL used by GemStone/S 64 Bit v3.2.7 has been updated to 1.0.2c.

Performance improvement on AIX

Some OS functions used by GemStone can be optimized using compiler built in functions on AIX. (#45267)

Issues with SymbolGem

Symbol GarbageCollection broken in 3.2.x

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)

SymbolGem TOC inadequate for very large AllSymbols

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)

Added configuration parameter

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

Stone runs hot after SymbolGem automatic restart

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)

Problems with clusterAllSymbols

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)

AllSymbols _collisionBucketsDo: had no effect

Sending _collisionBucketsDo: to AllSymbols had no effect. (#45388)

Object >> isCommitted may return true after failed commit

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)

Risk for GCI applications connecting to a server with different endianness

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)

Operations on SequenceableCollections can corrupt objects

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)

GcGem stuck while holding commit token

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)

GsObjectInventory methods could fail with OutOfRange error

It was possible for the GsObjectInventory methods #profileRepositoryAndListInstancesInPageOrder:toFile: and profileRepositoryAndSkipHiddenClassesAndListInstancesInPageOrder:toFile: to fail with an OutOfRange error. (#45292)

Find references issues

A number of issues related to the Repository>>findAllReferencePathsToObject* and other related methods have been fixed in this release.

Behavior when searching on highly connected objects

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: 

Improvements in memory use

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)

Disconnected classes reported

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)

Tracing included some garbage

The Repository >> findReferencePathToObject* and findAllReferencePathsToObject* methods print tracking information to stdout while running. Due to an uninitialized buffer, some object name displays included garbage left from a previous name. (#45228)

Incorrect stack variables display in debugger frames

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)

AdminGem vote on dead could trigger AlmostOutOfMemory

It was possible for the AdminGem's vote on possible dead to trigger an AlmostOutOfMemory, potentially causing an error. (#45233)

Changes in behavior when creating Number fromString:

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)

RcKeyValueDictionary>>at:ifAbsent: did not use block on nil argument

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)

Statmonitor may crash with arguments including network stats on Linux

Certain statmonitor invocations that include the -N to collect network statistics may have caused statmonitor to SEGV. (#45120)

Issues related to conversion from 2.4.x

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.

Conversion of repository containing DoubleByteSymbols has risk during upgradeImage

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)

Viewing unrecompiled GsMethod in GBS resulted in MNU

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)

Finding references to object errors with unrecompiled GsMethods in visible classes

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)

Upgrade leaves versioned classes and unrecompiled GsMethods

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.

ObsQuadByteSymbol methods are not recompiled by upgrade

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)

Persistent instances of GsClassDocumentation

After upgrade from 2.x, there are a small number of instances of GsClassDocumentation than are not removed by garbage collection. These references are from internal references from the Class, not visible in Smalltalk code. (#45235)

Obsolete classes moved to Globals at: #ObsoleteClasses

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