Changelog

This is the changelog for casual and all changes are listed in this document.

[1.6.19] - 2024-04-25

Fixes

  • http: improved error logging in http-outbound (#367)

  • http: use route name in outbound when ack:ing service calls (#364)

  • queue: add example server with enqueue and dequeue services (#348)

  • documentation: improved configuration documentation

  • documentation: updated and removed invalid api-documentation

  • example: fix casual/example/work (#349)

[1.6.18] - 2024-03-18

Fixes

  • domain: print domain name in shutdown task (#336)

  • common: do not set environment when (re)setting execution-id (#333)

  • http: propagate execution id over http (#326)

  • gateway: fix markdown documentation for interdomain protocol (#319)

  • sf: ‘attribues’ is misspelled in describe model (#264)

  • domain: improve error messages (#315)

  • http: use a single correlation for entire service call (#318)

  • ipc: fix discard while message is only partially received (#311)

  • queue: clear available when moving message to error queue (#312)

  • domain: assassinate needs more precise logging (#309)

  • service: handle assassinate during shutdown (#299)

  • gateway: outbound sent discovery to disconnect-mode connections (#297)

[1.6.17] - 2023-11-13

Fixes

  • transaction: TM asserts when transaction is not found in prepare-handle (#288)

  • cli: header output in porcelain if –header true (#283)

  • service: perform discovery on external_discovery (#269)

  • xatmi: comply to specification signal handling (#271)

  • service: cli –list-services does not add - when contract is missing (#281)

  • cli: add precondition casual log can’t be tied to stdout (#259)

  • domain: propagate restart to configuration-get (#240)

  • domain: handle restarts attribute correct (#277)

  • transaction: cli - add legend for list-resources

  • transaction: show metric for resource-proxy pending requests in cli (#273)

  • transaction: fix resource-proxy metric (#273)

  • cli: fixed and simplified the transaction cli (#272)

  • queue: dequeue with id as selector should ignore available (#270)

[1.6.16] - 2023-10-10

Fixes

  • queue: send reply on failed dequeues (#262)

  • gateway: pending ‘calls’ could be sent after a rollback (#261)

  • buffer: buffer-field-serialize should generate with [[maybe_unused]] (#255)

[1.6.15] - 2023-09-14

Fixes

  • transaction: TM commits when it act as a resource and gets a prepare (#256)

[1.6.14] - 2023-09-03

Fixes

  • event: make sure we try to reopen the event file if it’s “broken” (#250)

  • log: do not throw if we can’t open logfile -> error to stderr (#250)

  • cli: add internal cli for generic message count metric

  • service: SM sends error-reply to no-reply request on timeout/core (#247)

  • documentation: add topology::Update to protocol documentation

  • service: improve handling of service timeout (config/cli) (#244)

[1.6.13] - 2023-08-22

Fixes

  • http: nginx could block caller for ever with payloads > ~50k (#242, #243)

  • configuration: prevent global contract setting being default overridden (#244)

[1.6.12] - 2023-07-18

Fixes

  • discovery: hops are not correctly propagated if services are known

[1.6.11] - 2023-06-22

Fixes

  • xatmi: error log unexpected error codes (#226)

  • service: handle multiple busy lookups (#217)

  • common: reduce complexity for the fan::Out abstraction

  • queue: forward stability during sqlite error (#222)

  • queue: group to handle > 1 message between persistent writes

[1.6.10] - 2023-06-09

Fixes

  • gateway: outbound does not wait for in-flight transactions

  • gateway: error-log if connection is lost unexpectedly (#216)

  • gateway: inbound does not handle prepare::Reply with read_only correct

  • service: avoid double busy lookup (#217)

[1.6.9] - 2023-06-08

Fixes

  • gateway: inbound must wait for in-flight transactions during shutdown

[1.6.8] - 2023-06-01

Fixes

  • discovery: “local” known services/queues are not added to discovery reply

  • discovery: replies should only contain a subset of the requested

  • service: include parent in service metrics

[1.6.7] - 2023-06-01

Fixes

  • discovery: aggregate external discovery requests for performance

  • domain: handle shutdown signals (#207)

[1.6.6] - 2023-05-29

Fixes

  • discovery: handle prospect services (#198)

  • domain: try to remove ipc device from exited ‘singletons’

  • gateway: handle routing problems (#197)

  • gateway: outbound order of connection for a service gets too “orderly”

  • gateway: outbound might core if connection lost during QM “restart”

[1.6.5] - 2023-05-19

Fixes

  • ipc: improve detection of removed ipc devices (files) (#194)

  • service: always send timeout duration in lookup reply

  • service: service timeout could render zombie transactions (#191)

  • gateway: always advertise discovered resources (#188) (#190)

  • gateway: shutdown doesn’t wait for inbounds before outbounds (#186)

[1.6.4] - 2023-04-25

Fixes

  • buffer: fix field doesn’t track ‘service buffer’ during auto realloc (#179)

  • queue: prevent forward causing service-manager coredump (#182) (ported from 1.5.15)

[1.6.3] - 2023-04-09

Fixes

  • sql: make sure sqlite uses synchronous=NORMAL (#177)

  • queue: fix memory leak by not (implicitly) using setenv repeatedly (#175)

[1.6.2] - 2023-03-25

Fixes

  • queue: extend c-api for get reply and get available

  • configuration: fix queue configuration default directory

  • queue: send error reply on failed enqueue

[1.6.1] - 2023-03-13

Fixes

  • queue: fix pending data structure slicing (memory leak)

  • documentation: fix sphinx-config

  • build: fix version.py to handle new minor

[1.6.0] - 2023-03-06

Added

  • cli: add force service/queue discovery to cli (#110)

  • configuration: add set operations union, intersection, difference

  • discovery: add build configuration option to set a service visibility (#86)

  • discovery: add domain configuration option to set a service visibility (#86)

  • discovery: add state and metric information to discovery (#110)

  • discovery: add directive to limit service discovery from other domains

  • domain: add start time for domain in information (#132)

  • domain: log name of exiting process (#105)

  • event: add event-logging for significant stuff that is done

  • event: add service sequential/concurrent order to event-service-log (#115)

  • general: all “managers” use multiplex send

  • http: outbound configuration to control caller fresh connect (#65)

  • http: make http payload base64 encoding optional

  • http: call::Context prepare for multiplexing and ‘http-forward’

  • http: use multiplexing in nginx inbound

  • queue: add browse-peek to queue api

  • queue: recover queue message (#74)

  • transaction: list external resources from cli

  • xatmi: extend c-api with execution service name (#140)

Fixes

  • build: package resources.yaml in /etc/casual/

  • cli: fix gateway –list-connections to indicate inbound discovery forward

  • cli: fix domain –configuration-get not outputing ‘system’ (#108)

  • cli: generalized –state option and the serialization to stdout

  • cli: fix stderr printout on error from casual call ...

  • cli: add legend for gateway –list-connections

  • cli: fix transaction cli output

  • cli: corrected legend for –list-services option to match header

  • common: add error logging on assert (#88)

  • configuration: improve configuration update semantics

  • configuration: default to one instance everywhere

  • discovery: don’t forward discovery if service/queue is known (#141)

  • domain: core servers must restart on unexpected exit

  • domain: keep service and queues sorted in discovery (#77)

  • event: fix event-service-log to also reopen ‘casual.log’ on SIGHUP

  • event: show trid in metric when trid is created by callee (#142)

  • event: make sure service-log listen to events before “connect”

  • environment: don’t create directories when constructing internal environment paths (#19)

  • forward: generate new execution id for each service call

  • forward: fix forwards dying when scaling aliases

  • gateway: reduce batch read/write in tcp handler

  • gateway: don’t let children inherit tcp file descriptors

  • gateway: fix tcp-logical-connect to detect loss of destination ipc

  • http: correct http inbound to handle keepalive

  • http: upgrade nginx to latest stable 1.22.0

  • http: remove debug log level as default (#79)

  • log: add api to configure log during runtime

  • service: fix pending “error” reply when server cores/exit

  • transaction: fix core when resources in distributed prepare (service) fails

  • queue: fix local lookup to also search external known queues

  • queue: log queuename when failing operation on queues (#106)

  • queue: fix cli to handle queue message with message attributes

  • queue: fix –list-remote

  • xatmi: tpsrvdone should never be called if tpsrvinit has not been called

[1.5.14] - 2022-09-08

Fixes

  • conversation: fix a bug where tprecv and tpsend failed to set the global tpurcode.

  • conversation: generate events in tpsend when partner calls tpreturn or tpdiscon.

  • conversation: fix handling of server process exit/core.

[1.5.13] - 2022-08-16

Fixes

  • queue: add lookup restrictions depending on caller location

  • service: add lookup restrictions depending on caller location

  • queue: fix pre/post statements for “tuning”

  • http: fix outbound to advertise services with order 0

  • discovery: fix using routes for services correctly

[1.5.12] - 2022-05-10

Fixes

  • cli: fix configuration –normalize

  • gateway: fix outbound to handle ‘gateway loop’

  • gateway: fix inbound to stop consume from a removed connection

  • service: use multiplex send as much as possible

  • service: fix lookup-forget-reply has replied for remote services

  • gateway: improve multiplex send, and consume ratio between ipc and tcp

  • discovery: reduce amount of topology related discoveries

  • discovery: use batch topology update, semantics for performance

  • tcp: guard errors in socket::address::host/peer

  • gateway: fix outbound to always remove transaction state

  • transaction: fix external resource prepare/commit request

  • gateway: handle lost connection in tcp send correctly

  • transaction: fix notification to TM for services with branch semantics

  • transaction: fix problem when to use TMJOIN in xa_start

  • transaction: be conformant with flags to xa_end

  • discovery: use multiplex send as much as possible

[1.5.11] - 2022-04-19

Fixes

  • cli: fix confusing arguments for casual service –legend

  • cli - remove extra root domain: casual configuration –normalize

  • gateway: make gateway more robust in error situations

  • xatmi: suspend involved resources during tpcall

  • gateway: absorb tcp errors and only effect the relevant tcp-connection

Changes

  • casual has moved to GitHub

[1.5.10] - 2022-03-21

Fixes

  • gateway: use multiplexing on the tcp-connection phase, no blocking if the tcp-connect takes a long time.

  • cli: fix casual domain --list-servers to show correct number of configured instances

  • transaction: fix local transaction with multiple resources

    • casual did not handle this correct (at all)

  • domain: fix shutdown if an instance of a server has died

[1.5.9] - 2022-02-18

Fixes

  • discovery: propagate topology updates upstream

    • When a domain logically connects (connector) to another domain (connectee), the connector propagates topology update to all “it’s inbounds” that has discovery:forward true configured. Hence, enable (auto) discovery for stuff arbitrary number of nodes upstream.

  • gateway: “move” listeners and connectors to failed on fatal errors.

    • Listeners: on error we move the listener directly to failed

    • Connectors: on fatal errors we move the connection to failed, on non fatal we try again after some time (as before).

  • cobol: set return status in Cobol api TPRETURN

  • gateway: keep trying to connect if the logical connection fails

[1.5.8] - 2022-01-08

Fixes

  • transaction: fix distributed transaction bug in complex topology

  • queue: forward react if queue group “dies”

  • xatmi: conversation disconnect not properly handled

  • queue: return no_queue iso no_message when writing to non existing queue

  • discovery - on discoverable::Available event: we only discover when it makes sense

Internal

  • log: made sure we only use our own stream::write and got rid of global ostream stream operator

  • common - flag abstraction degradation: equality operator for underlying enum type messed up semantics

[1.5.7] - 2021-11-26

Fixes

  • transaction: fix distributed commit when RM fails -> rollback

  • discovery: registration for discoverables more robust with request->reply

    • Primarily for unittests when booting, testing and shutdown of multiple domains within a couple of 100ms or so.

[1.5.6] - 2021-11-15

Changed

  • configuration: added system at the same level as domain

    • system holds system wide configuration, and for the time being only system.resource which replaces the resource.properties file (casual can still handle the deprecated file though).

  • cli: reverted the ‘locale’ awareness for the CLI

    • To many subtle and not to subtle problems - not worth it.

  • configuration: service restrictions for servers are now treated as regex

    • If set, only services that matches at least one regex are advertised.

[1.5.5] - 2021-11-09

Fixes

  • xatmi - conversation: major refactoring

  • xatmi: fix leak of descriptors for conversational services.

  • cli - configuration edit: made sure we sink the SIGCHILD signal from the spawned editor

  • documentation: fixed the example configuration files

  • queue: forward to remote queues did not work correctly

[1.5.4] - 2021-10-23

Fixes

  • transaction - if rm:s report error during xa_start: reply with TPESVCERR

  • configuration|cli - validate: only positive integers for instances

  • cli: version information, lowercase key names, compiler version

  • queue: support queue-peek in c-api

[1.5.3] - 2021-09-22

Fixes

  • http: outbound handle discovery (http-services are treated external as they should)

  • xatmi: support for conversations (primarily targeting COBOL)

  • gateway: fixed so outbound holds unique connections per service

  • discovery: service-manager only replies with local services

    • attention if the intention is that a domain should expose services that the domain has found in other domains (not local), the domains inbound connections should have the directive discovery.forward = true set. This also applies to http exposed services (since they’re not local)

[1.5.2] - 2021-09-17

Fixes

  • domain: fixed so order of groups (configuration) can be arbitrary, regardless of dependencies.

  • discovery: made sure we flush send to mitigate deadlocks when interacting with casual-domain-discovery

[1.5.1] - 2021-09-11

Fixes

  • gateway - respect hops: round-robin on the partition with smallest hops

  • gateway: fix interdomain protocol example tool

  • paths: made sure we do not use std::filesystem::equivalent with non existing file

  • cli: improved (subjectively) event::Notification print out (new for 1.5)

  • configuration: fix bug with empty aliases for gateway

  • configuration: fixed bug when ‘update’ an alias key ‘entity’. We moved from the one we supposed to add to…

[1.5.0] - 2021-09-01

Added

  • configuration: runtime configuration stage 1

    • cli for get, post, put, and edit which spawns an editor and when the configuration is saved casual tries to conform to the (possible) new configuration.

    • attention: under (heavy) load there might be some noise still, we aim to fix this in stage 2

  • cli: version information without a domain running

  • cli: added option to reopen casual.log. Prints information of all processes that casual are not sure can handle a SIGHUP, hence it easier for users to automate log-rotation.

  • cli: make casual cli user ‘locale’ aware, to play nicer with unix tools, such as sort

  • cli: added value auto to option --header. With auto, headers are only used if tty is bound to stdout

  • gateway: handle queue- and service information in connection state viewable in cli

  • xatmi - extended: function to browse instance services

  • cli: made sure wrong written cli command doesn’t gives error in log

  • queue - handle zombie queues: queues that are not configured anymore, but still exists in the queuebase

  • discovery: gateway inbound discovery forward

  • discovery: central ‘agent’ for handling discoveries

Changed

  • transcoding: platform-independent third-party-header-only-lib for base64-transcoding

  • paths: using std filesystem

    • attention: this might change semantics which temporary path is used.

    • https://en.cppreference.com/w/cpp/filesystem/temp_directory_path

    • On POSIX systems, the path may be the one specified in the environment variables TMPDIR, TMP, TEMP, TEMPDIR, and, if none of them are specified, the path “/tmp” is returned

  • python binding: upgraded to python3

Fixes

  • serialize - some simplifications: std::filesystem::path logs correctly

  • common: ‘helper’ for directory::create to handle corner cases with links

  • log: made the reopen on SIGHUP more robust

  • common: less semi confusing logging

  • xatmi: placed definition of functions where they should be to avoid confusion

  • cygwin compatibility

  • build: calculate version from tags -> more robust version sequences

Internal

  • configuration - better model: all managers supply their configuration

  • unittest: more deterministic unittests

  • common - algorithm clean up: moved some stuff to separate headers

  • build - improved and fixed some build related stuff: simplification

  • maintenance - simplify traits: some improvements in algorithm

  • signal: simplified signal to only have one handler for a given signal at a given time

  • build: fixed problem with linking on Ubuntu

  • build: turning archive to a shared library to avoid ODR

  • common - strong::Type: made a strong::Type that replaces “value::id” and “value::optional”

  • common: error handling and log fixes

  • build - casual-make: use new build system

[1.4.20] - 2021-06-15

Fixes

  • queue: improved performance while dequeuing messages

[1.4.18] - 2021-06-09

Fixes

  • gateway: tcp connect/accept errors might lead to inbound/outbound exit/restart

  • service: removed false error log when a timeout occur and the callee is killed

  • gateway: false error during tcp consume of logical (large) message

[1.4.16] - 2021-05-29

Fixes

  • gateway: improved tcp connection phase robustness -> spawns a process that take cares of the logical connection phase

[1.4.15] - 2021-04-14

Fixes

  • service: pending lookups did not work correctly for routes

  • gateway: made sure we terminate a detected ‘loop’ for calls

  • gateway: improved connect to be more robust

[1.4.14] - 2021-03-28

Fixes

  • gateway: outbound handle no-entry call reply correctly

  • gateway: outbound correlates multiple branched trids correctly

  • gateway: inbound respect service route name

[1.4.12] - 2021-03-05

Fixes

  • gateway - asynchronous writes: mitigate deadlock, performance improvements

  • gateway: handles bad tcp addresses in a more robust way

  • gateway: honour outbound group order for priority

  • configuration: gateway.connections -> outbound-group per connection

  • cli: call keep logical message to one correlation id

[1.4.9] - 2021-03-04

Fixes

  • gateway: outbound should prioritize replies from other domains

  • cli: call not use pending message and use the ‘flush send’ idiom.

[1.4.8] - 2021-03-03

Fixes

  • gateway: outbound/reverse-inbound might try to receive on wrong socket and get ‘stuck’

[1.4.7] - 2021-03-03

Fixes

  • domain: shutdown/restart makes ‘noise’ when provided services are under load

[1.4.6] - 2021-02-25

Fixes

  • discovery: did not work correctly on service with multiple routes

[1.4.5] - 2021-02-24

Changed

  • updated this changelog: missed it in 1.4.4

[1.4.4] - 2021-02-24

Fixes

  • discovery: did not work correctly on service routes

[1.4.3] - 2021-02-13

Changed

  • cli: updated documentation for –color with option auto

Fixed

  • cli: fixed so colors is false for Directive::plain()

[1.4.2] - 2021-02-13

Fixed

  • service: added timeout contract to cli output

  • queue: improved cli

  • service: assassination target caller instead of callee

[1.4.1] - 2021-02-07

Added

  • queue: concurrent queue-forward that is part of casual-queue

  • service: manager replies with requested queue on service discovery

  • domain runtime configuration core functionality

  • gateway: reverse connection for inbound/outbound

  • gateway: multiplexing (reverse) inbound/outbound

  • gateway: ‘soft’ disconnect from inbound

  • framework: serialize const lvalues

  • gateway: inbound/outbound groups to group connections

  • event: added event that signals when a discoverable is ‘on-line’

  • enable keepalive for tcp connections

  • added a auto to cli –color

  • making filesystem path serializable

  • transaction: resource-property-files are optional

  • possibility to terminate called servers when service timeout occurs

  • configuration: validate not empty values

Changed

  • upgrade to c++17

  • queue: reworked group and forward to be more rigid

  • service: make sure service-manager honour server-alias restrictions

  • remove 600 call trying limit in nginx

Fixed

  • gateway: did not add pending metric to request from service lookup

  • transaction: tx_begin did ‘start’ the transaction even if RM xa_start failed

  • defect in error logging

  • handle null value of queue message payload

  • queue-forward shall not handle new dequeue ‘flows’ in shutdown mode

[1.3.15] - 2020-12-24

Fixed

  • queue: missing error_condition equivalent implementation for queue::code all values for queue::code was logged as error

[1.3.13] - 2020-11-27

Fixed

  • queue: enqueue does not handle ‘shutdown’ correctly

[1.3.7] - 2020-10-14

Fixed

  • service: same instance could be added to a service multiple times

[1.3.6] - 2020-10-09

Fixed

  • gateway: rediscovery failed when there was unconnected outbounds

[1.3.5] - 2020-09-22

Fixed

  • transaction: did not remove ‘consumed’ transaction

[1.3.4] - 2020-09-17

Added

  • cli transaction support

  • handle glob pattern selecting configuration files

  • serialization: enable (de)serializing ‘unnamed’ objects

  • buffer: field-from-string more relaxed when dealing with string values

  • queue: improvement in performance

Changed

  • cli help improvements

Fixed

  • http outbound not marking transaction rollback-only on error reply

  • forward service causing error in metrics

  • handle null buffer over http

  • queue: dequeue with id

  • gateway: signal handling

  • queue: missing composite index on message.gtrid and message.state

  • queue: fix bad performance with enqueue when forwards are active

  • xatmi: did not call tpsrvdone when shutting down server

[1.2.0] - 2020-04-23

Added

  • gateway rediscover functionality

  • group restart in domain

Changed

  • improved ipc message pump semantics

  • cli improvement in aggregate information from managers

  • logging with iso-8601

  • queue: metrics and cli

  • reopen resource if failing

[1.1.0] - 2020-03-08

Added

  • http inbound and outbound handles xatmi codes in header

  • support for returning header parameters in http

  • build executables with resources

  • non blocking service lookup

  • casual queue c-api

  • support for queue retry and delay

Changed

  • logging reworked

  • improved metrics semantics

  • raw memory abstractions

  • improvement in cli

  • new implementation in http inbound

  • reworked user configuration

  • reworked marshal and serialize

  • better route semantics

  • administration api

Fixed

  • signal handling in non-blocking-send

  • multiplexing problem

  • protocol deduction error in http

  • http outbound blocking

  • base64 encoding/decoding in http

  • handling transaction branches

  • handling remote trid correct

  • cobol binding

  • service logging

[1.0.0] - 2018-08-13

Added

  • first released version 6,5 years after first commit.

  • all basic functionality supported


footnote

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.