5. Bug Fixes

Previous chapter

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

Slow stone startup with large possibleDead

If the stone is shut down after the markForCollection, but before promoteToDead, and the possibleDead set is very large, the restart of the stone may take a long time (30 minutes was observed with a 4 billion size possibleDead). (#49109)

Socket blocking issues

Session waiting in GsSocket >> accept does not respond to stopSession

When a session is waiting on a GsSocket >> accept, it did not respond to a stopSession out-of-band signal. (#49120)

GsSocket read or accept may block after Socket closed

A blocking read or accept operation on a GsSocket may continue to block, even if the socket itself is closed. (#49041, #49081)

readWillNotBlockWithin: and writeWillNotBlockWithin: result could be incorrect

The methods GsSocket>>readWillNotBlockWithin: and writeWillNotBlockWithin: could return true when the socket was not ready, so the subsequent read or write would block. (#49044)

Hot standby bugs

logsender did not respect not-default STN_TRAN_LOG_PREFIX

The logsender did not work correctly if the transaction logs generated by the master stone did not have the default name tranlogNN.dbf; that is, if the setting for STN_TRAN_LOG_PREFIX was not left at the default. (#48706)

logsender login failures caused excessive error messages

If a running logsender attempts to login to a restarted stone, and the login fails (such as incompatible Gem version), there was excessive printing to the stone log, as well as to the logsender log. Now, only a single login failure message is printed to the Stone log, and logsender prints messages less frequently. (#48752, 48957)

Repository>>continuousRestoreFromArchiveLogs: did not work on extent copy

When a hotstandby system was started using an extent copy backup, the continuousRestoreFromArchiveLogs: did not error, but it failed to replay tranlogs. (#48340)

startlogreceiver did not expand environment variables in -T argument

If the argument to -T included an environment variable, this was not expanded. (#49057)

CHeap memory leaks in failed X509 logins

Linked topaz and HostAgents may have excessive CHeap memory use after failed X509 logins. (#49230)

Restore from tranlogs may not replay clustering

When a clustering operation in a tranlog is being replayed, and the object was already modified by another tranlog replay and is not yet committed, clustering of that object to a different cluster bucket may be ignored, if the new cluster bucket does not relate to the object’s current page. (#48509)

Repository scan may fault in dead objects

When a repository scan operation is running while sessions are voting on dead objects, there is a small risk that objects that were faulted into memory that are being promoted to dead. This could potentially allow references to dead objects to be committed. (#49051) Now, this will cause a repository scan to error with "An atomic promote detected during operation, results are compromised - please try again".

DBF_PRE_GROW did not accept list with empty elements

Configuration parameters that take lists should allow empty elements (that is, two comma dividers with nothing or white space between them). This was not working for DBF_PRE_GROW. (48967)

Stone may not be responsive while disposing large CR backlog

When there is a large commit record backlog to dispose, the Stone may be unresponsive until the backlog is completely disposed. (#48755)

Out of Memory in code_gen space with many classes

The thresholds that managed garbage collection in the code_gen space of temporary object memory were not configured correctly, so cases that placed pressure on code_gen could encounter OutOfMemory errors. (#49143)

Error reporting for Stone not found

When the Stone named in topaz login parameters is not found, the error message returned to topaz included a number of secondary and duplicate errors. (#49032)

GsHostProcess executable-not-found error not helpful

GsHostProcess requires a full path to the executable, it does not do a path lookup. The error message when the path was omitted was not helpful in understanding the problem. (#48761).

Statmonitor issues

Deleting a statmonitor file in use may corrupt the new file

If the file to which statmonitor is writing is deleted, statmonitor opens a new file and continues writing. However it may write the buffered data to the new file before it writes the statmonitor header; which means VSD cannot read the file. (#49233)

In auto-restart mode, file name may be reused

When running with statmonitor -r or -R, which automatically create new files periodically, a new filename is generated containing an incremented sequence number. However, if the current file is moved or deleted, a file with that same sequence number was generated, rather than the next in the logical sequence. (#49235)

Topaz issues

Possible to redefine the ErrorCount predefined variable

Topaz includes a number of predefined variables, which should not be redefined. The ErrorCount variable was not previously disallowed in define, which could cause unexpected behavior; for example, from errorcount or exit/quit. (#48977)

Display bytes with multi-byte characters did not linebreak correctly

When executing with display bytes, the output for byte objects such as Strings include both the text, broken up into 20-byte lines, and the corresponding bytes. When displaying multi-byte characters, the line breaks were inserted off by one. (#49190)

Time and Date related issues

TimeZone fromPath: attempted to look for zoneinfo on client

The code in TimeZone fromPath: first looks for zoneinfo on the given path on the server; previously, if this was not found, it would attempt to find the given path on the client. Now, it searches only on the server. (#49009)

Duration printing of subseconds did not round up to second

Duration printing prints in milliseconds resolution. If this printing would normally round up to a full seconds (0.9999, for example), this did not increment the whole second, but left the subseconds as 0. Rounding up in now capped at .999. (#48802)

DateAndTime fromString: without timezone was incorrect

DateAndTime fromString: produced an oddly incorrect time, if the timezone portion of the argument was omitted. Note that fromString: is not expected to work with poorly formatted input strings. (#48804).

GciTsLibrary version: did not handle argument flexibly

The argument to GciTsLibrary >> version: was limited to specific versions, and failed to match some legal version numbers. (#48879)

Removed reference to JISCharacter in RangeEqualityIndex>>isBasicClass:

The source code for the image method RangeEqualityIndex>>isBasicClass: contained a reference to the class JISCharacter, which was moved to ObsoleteClasses in an earlier version; this method could not be recompiled. The reference has been removed. (#48343)

GemStoneParameters did not handle invariant password string

If the password: argument to an instances of a GemStoneParameters was invariant (such as a literal string), an error was thrown. (#48898)

Previous chapter