Releases: flightaware/tclrmq
Update for nix compatibility
Field Table Encoding
This release contains the following fixes:
- Field table encoding involving deriving the type of the values has been fixed. In particular, encoding for booleans (which were missing an encoder), floats (which used an incorrect endian ordering) and strings (which need to be all treated as long strings) now work properly
Avoid Excessive `after idle` Calls
This release contains the following changes:
- Avoid using the
after idle
idiom for invoking consumer callbacks
Makefile fix
This small release fixes an issue in the package Makefile with a package require
command.
Heartbeat Improvments
This release improves the handling of heartbeats by making them conform more closely to the spec and by making sure that a heartbeat check is always scheduled. These changes address the potential situation where a heartbeat check is not properly scheduled in the client, which is particularly necessary for clients who infrequently have messages to consume from a queue.
TLS Bug Fixes
This bug-fix release contains the following changes:
- TLS options are now supported properly
- Fixed bug that prevented TLS connections from operating as intended
- Removed issue with ::rmq::debug proc
Log Command
This release adds the -logCommand
argument to the Connection
class' constructor. This allows for debugging statements to be passed into an arbitrary Tcl command. Previously, all debugging statements were printed to stderr
if -debug
mode was enabled in the Connection
class.
Connection and Channel Close Cleanup
This release cleans up the code related to the connectionClose
and channelClose
methods. Both of these methods correspond to AMQP methods that can be sent or received by the client. Previously, both cases were combined in a single method. They are now separated, which cleans up their code significantly. Additionally, the README has been updated to clear up inconsistencies regarding these methods.
Channel Close Fixes
This release fixes the following bugs:
-
Incorrect variable names were used in one branch of the
Channel
class'channelClose
method. This caused the server to close the connection when a channel was closed due to an invalid encoding. -
The
closeD
argument passed toChannel
andConnection
close callbacks was incorrectly created as a dictionary of nested dictionaries.
Reconnect Fixes
This bug release fix focuses on the behavior of the attemptReconnect
method of the Connection
class.
-
Previously, reconnects were performed in a
while
loop. This could have the unfortunately side-effect of blocking all other events while waiting on a connection. Instead, now allattemptReconnect
calls happen in anafter
script. -
Also, the count of retry attempts happened in a local variable. While typically fine, bugs could arise if
attemptReconnect
was called from multiple code locations, all with a separate retry count. This is especially insidious in use cases where-autoReconnect
is false. The retry count is now maintained in an object member variable so that any calls toattemptReconnect
will see the same count of retries. -
A method
resetRetries
has been added to theConnection
class to accommodate any potential need to control this behavior manually. -
Further, the
connect
method, which is relied on byattemptReconnect
for deciding whether a connection has been re-established, had a subtle bug where it could return true prematurely before getting official connectivity confirmation from theconnectionOpenOk
method. If, for instance, a proxy server was used, theconnect
method could return true before a RST was sent. To fix this,connect
no longer returns true unlessconnectionOpenOk
sets theconnected
member variable before a timeout occurs.