Pythomnic3k

Changelog

version 1.2, rel. Dec 6, 2010

• Logging priority can be changed at runtime, no need to restart a cage.
• Request timeouts can be specified on per-interface basis. This way for example requests from a synchronous HTTP interface may have their deadline in 10 seconds, and requests for processing incoming JMS messages - in 30 seconds.
• Resource pools can be configured to be kept warm, i.e. having a few free instances always connected.
• Changed the way logging works. Now each request has a readable description which is included in its logging messages. Request's remaining time to live is also included.
• Added support for custom acceptance methods for transactions. Acceptance method receives intermediate results of the resources participating in the transaction and decides what to do with them. It can perform tricks such as:
1. Pick the fastest result and return transaction result early without waiting for all participants to return.
2. Deduce the result by voting despite occasional failures.
3. Mask irrelevant failures.
etc.
• Changed the way transactions and resources report errors. Now if a transaction fails, it throws ResourceError, which contains failure information in a uniform way.
• Retried call queues can be configured to maintain FIFO order, a failed call will remain in front of the queue and retried.
• Added configurable file permissions when files are being saved to a shared directory using file resource.
• Email protocol now supports sending (SMTP) and receiving (POP3) messages over SSL.
• Oracle SQL resources return all numbers as Decimals, never ints, making no attempt to deduce type information from the values.
• Unknown SMPP optional tags on incoming PDUs are ignored, rather than cause a parsing failure. One awkward SMPP SMSC kept sending optional tags from SMPP 5.0 to SMPP 3.4 client which Pythomnic3k is.
• GREATLY simplified the request creation logic. This is of use for anyone who is going to implement some protocol support for Pythomnic3k.
• Added CPU, memory statistics to cage performance web page.
• Request context is preserved between cages verbatim, not modified across RPC calls.
• Persistent state is disabled if free disk space falls below configured threshold. Note that this affects retried calls too.
• Python 3.2 compatibility fixes.

version 1.1, rel. Jun 1, 2010

• Added support for "reverse RPC" where target cage polls the source for incoming calls. This is useful in DMZ scenarios when a service from DMZ needs to call the one from LAN, but TCP connections from DMZ to LAN are prohibited by the firewall.
• Switched persistent RPC message sending syntax from
pmnc("target_cage:retry").module.method()
to
pmnc("target_cage", queue = "retry").module.method()
• Support multiple persistent retry queues using
pmnc("target_cage", queue = "queue_name")
where each queue may have its own retry interval and expiration settings.
• Results of SQL requests (recordsets) returned from database resources are no longer lists of field name-value dicts, but instead lists of instances of special class SQLRecord which contains the same name-value pairs, but allows case-insensitive field reference so that
rec["name"] == rec["NAME"] == rec["nAmE"]
this is useful with Oracle.
• HTTP protocol request handler now has control over cache-related response header fields.
• Performance monitoring web page now displays configurable amount of application messages, not always last 100 as before.

version 1.0, rel. Sep 14 2009

• Initial release.