GemStone/S 64 Bitâ„¢ 3.3.9 is a maintenance release of the GemStone/S 64 Bit object server. This release fixes a serious problem with filenames on Windows clients, as well as a number of other bug fixes and enhancements.
These release notes describe changes between the previous version of GemStone/S 64 Bit, version 3.3.8, and version 3.3.9. If you are upgrading from a version prior to 3.3.8, 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.5.
GemStone/S 64 Bit version 3.3.9 is supported on the following platforms:
Supported Windows client platforms are
Note that (deprecated) Solaris/SPARC distributions are available for development and debugging only. Solaris on x86 continues to be fully supported.
For more information and detailed requirements for each supported platforms, please refer to the GemStone/S 64 Bit v3.3.5 Installation Guide for that platform.
The following versions of GBS are certified with GemStone/S 64 Bit version 3.3.9:
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.
The GemStone/S 64 Bit v3.3.9 distribution includes VSD version 5.4. The previous version of GemStone/S, v3.3.8, included VSD v5.3.1.
VSD version 5.4 includes many updates, new features and bug fixes. For details on the changes, see the Release Notes for VSD v5.4.
VSD versions are not tied to GemStone server versions: both older and newer versions of VSD can be used to read statmonitor files generated by both older and newer versions of GemStone/S and GemStone/S 64 Bit.
While copydbf is intended to be used with dbf files of the same version as the executable, it is useful to use copydbf -i on a backup file generated from an unknown version of GemStone. Previously, this was possible only in some cases, in which the backup file header formats were compatible.
Now, copydbf knows all backup file header formats. Copydbf can be used with backups generated from all versions of GemStone (including 2.x, 3.1.x, 3.2.x, 3.3.x, and 3.4.x, as well as 32-bit GemStone/S 6.7.1), and will return the GemStone version number. Other copydbf functions are limited to compatible versions only.
Note that this applies to backup files only; extents and tranlogs are unaffected by this feature.
(ssize_t) GciNextUtf8Character(
const char* src,
size_t len,
uint *chOut
);
For UTF-8 encoded src, return the next legal UTF-8 code point in *chOut. The function result is the number of bytes in the that code point, or -1 if the bytes are illegal for UTF-8. Can be called without a session. Does not generate GCI errors.
(BoolType) GciUtf8To8bit(
const char* src,
char *dest,
ssize_t destSize
);
Convert Utf8 input in *src to 8 bit data in *dest. If all code points in *src are in the range 0..255, and the result fits in destSize-1, returns TRUE and *dest is null terminated, otherwise returns FALSE. Does not generate any GCI errors.
GsFile was not able to open a Windows client file with a name that contained characters outside the ASCII range, that is, with codePoints over 127. For such filenames, the open:* methods returned nil. (#47720).
The fix for this is largely transparent to the user; but there are a number of changes involved to support the correct behavior.
The class Utf16 has been added. This is parallel to, and similar to, the existing Utf8 class.
An instance of Utf16 is a UTF-16 encoded string. For every codePoint cp in a Utf16 the following evaluates to true: cp >= 0 and: [cp <= 16r10FFFF]
Codepoints in a Utf16 use a variable number of bytes per codePoint, and thus only certain comparison methods, directly supported by the libicu libraries, are implemented. All other string manipulation must be done on the result of sending asUnicodeString to the instance of Utf16, and then operating on the equivalent Unicode7, Unicode16 or Unicode32 string.
Methods inherited from ByteArray operate on the raw bytes of the UTF-16 encoded string, and have no support for accessing codePoints.
The return values for GsFile contents*OfDirectory:, for file and directory names that included Characters with codePoints over 127, were not handled in user-friendly way in either Traditional or Unicode comparison mode. (#47325)
In this mode, the resulting filenames were instances of String encoded as UTF-8. Before using, the result String had to be decoded using decodeFromUTF8. Now, in this mode, the contents*OfDirectory: methods return instances of String, DoubleByteString, or QuadByteString.
The code to write or read bitmap (.bm) files did not handle UTF-8, and DoubleByteStrings or Unicode strings outside the Unicode7 range reported primitive failures or argument errors. (#47395)
Values for the ReclaimGem parameters:
#deadObjsReclaimedCommitThreshold
#objsMovedPerCommitThreshold
#sleepTimeBetweenReclaimMs
#sleepTimeWithCrBacklogMs
#reclaimDeadEnabled
Are reset following reclaimAll, MFC, or Epoch, to speed-optimized values, and the previous settings are not automatically restored. (#47797)
In version 3.3 and later, the values in the GcUser’s UserGlobals are used at startup only; runtime changes to these values are done using methods in System class.
When GEM_MAX_SMALLTALK_STACK_DEPTH is very large (over 35000) then an AlmostOutOfStack signal may result in a Gem SEGV, for Gems running on x86_64 processors. Now, this configuration is automatically limited to no more than 35000 on these platforms. (#47753)
When a nested transaction is started, the writeSet could be overstated, including objects that were not modified by the outer transaction. This persisted through the commit of the nested transaction. Also, attempts to modify an invariant object may have put the invariant object in the write set before signalling the Error that modification was not allowed.(#47799)
During a checkpoint, the Stone waits for the AIO page servers to complete the actual work involved in the checkpoint. The Stone was not checking often enough that the checkpoint work is done, resulting in a checkpoint appearing to take a minimum of 10 seconds to complete. (#47769)
With a .dbf file on an NFS-mounted disks, copydbf -i could return an error or report no results, although the file itself is valid. (#47732)
GemStone provides both 64 bit and 32 bit topaz executables with the Windows client. In 64-bit topaz, printing of Integers is incorrect. (#47733)
Running the image upgrade causes a new version of the TimeZone class to be unnecessarily created. (#47727)
In addition to the nil and remoteNil instances of UndefinedObject, GemStone internally produces several other kinds of UndefinedObject, which normally would only be visible when examining GsProcess stacks. These did not respond to asString correctly. (#47758)
GemStone classes have a category instance variable. This can be set to a String or be nil; however, setting it to nil resulted in a category of the string ’nil’, rather than nil. (#47788)
Classes may be created and not put into a specific SymbolDictionary by passing in a nil for the inDictionary: argument. The subclass creation methods subclass:... and indexableSubclass:... allowed this, but byteSubclass:... generated an error. (#47403)
When using the new indexing infrastructure, the BtreePlus index, and making a range query of the form a <= value <= b, the incorrect comparison operator was being applied for one of the two logical comparisons. This resulted in incorrect results. (#47509)