Updated Catch2 to version 2.13.10 (from 2.13.09).
Added a benchmark test (49_05) for Asynch ZMQ requesr-reply. Also fixed an error in testcase 49_04, which didn't use asynch communication everywhere (used synch instead).
Fixed and finished test 49_04 (working)
Added a test (TEST_CASE_49_04) for asynch communication using the ZmqTxRx-class. Also fixed some bugs in ZmqTxRx.
Added a benchmark test for synchronous Req-Rep communication over ZMQ. Also made some minor clean-up after running code checker.
Ini-file reader/writer for PSM settings
Added a fully functional, synchronous socket, Request-Reply cycle to test 49_02.
Synchronous Req-Reply transmission works accoring to test case 49_02 (not yet finished).
Cleaned up the Zmq socket classes. There is no only one ZmqSocketT<> template that can handle both the requiring side as well as the providing side of a bridge.
A commit in preparation for a restructuring and cleanup of the ZMQ-code. All tests are working.
Divided ZmqRequirerT<>'s synch and asynch processing of ZMQ requests / ZMQ replys into separate methods and state machines in order to clean up the code. Done the same in the ZMQ requirer scheduling task. The provider side needs the same treatment .
Relocated sequence number generation for SigOps to ZmqRequirerT<>. Tweaked Test_27 to make it more robust against clock sqew. Minor renaming and clean-up.
Added a template that generates an integer type that isone size larger than the input type (GetNextWiderIntegerT<>). Also added a test (43_03) to test that correct the correct, wider type is generated. The template can automatically match signed/unsigend of input types when generating the wider output type.
Moved setName()/getName() from BrdigeT<> to BridgeDeclarationT<> and fixed all occurances using BridgeT<>. All tests executes OK.
Added plog-master package for the event that this will be the one to integrated in the PSM - handlign log.
A better log solution for the PSM
A better log solution for the PSM
Added some more support classes to PsmUtils. scheduler and requiring side of ZMQ bridge is getting closer.
Code clean-up. Also added a PSM-specific exception, PsmCriticalXXXX generates a hard Abort meaning that e.g. illegal state table transitions can't be tested. SIGABRT is messy to catch and validate. Catch2 supports exception much better for testing purposes.
Now there is a working Serializable-wrapper for SigOps so that they can be first be enqueued in the outgoing requirer queue of a distributed bridge, end then be serialzied in batches just before transfer over a network to the providing side. Also added new test cases for this as well as updated all other testcases (where applicable).
Added two new tests for serialization on a grander scale, verifying correct serialzied size, as well as a benchmark for serialization. Some minor clean-up as well based on CppChecker.
Have a testable working version of the SigOp serializable wrapper (SerializableSigOpT<>). This is needed so that SigOps send over a distribuetd bridge can be queued up in a generic queueu (using virtual base pointers) and yet be serialized by the scheduler without it knowing the exact types of the SigOp. Added test_46_05 to test this SigOp serializable wrapper.
Added a serialization wrapper template SerializableSigOpT<>. This, and its base class, provides a generic interface to the scheduler for distributed bridges so that it can serialize SigOps without knowing their explicit type. SerializableSigOpT<> and its base class (SerializableSigOpBaseT<>) uses a regular virtual base construct, with virtual methods, to handle the separation between scheduling a generic SigOp and its associated type-specific serialization/deserialization. This virtula base-...
CInserted a new template class between Processable and SignalSignatureT/OperationSignatureT. This helps separate signals and operations better and enables some additional code clean up.
Corrected an error in the serialization protocol of the ZmqSigOpSerDes class. It turned out that a 1-byte unsigned integer wasn't possible to separate from a boolean type by the SigOp variable header. The specific problem was that the least significant bit of the variable header coded for 3 different things :-/
Separated serializion buffers and deserialization buffers into 2 separate class types. Fixed a race condition in the LockableOperationT<> template. Rewritten FixedQueueT<> template in order to clean up and understand the problem/solution better. Made it into a cached Lamport SPSC FIFO. Fixed tests to work with updated code.
Created a specific class for serialization/Deserialization buffers. Moved the serialization buffer outside the serializer. This prevents a copy when creating a batch of serialzie SigOps.
Cleanup & made iSsignal/isOperation methods static.
Fixed yet another bug in the LockableOperation. Some naming clean up and added the Catch 2 package to the repo so that the development environment can be recreated independent on what version is available at the official Catch repo.
Fixed the locking mechanism in the LockableOperationT template.
Started to drawn a BridgePoint-model of the distributed ZeroMQ bridge.
Moved the SigOpBatchSize parameter of the default scheduler to be a runtime settinf as opposed to a comptime setting. This makes more sense. As a results, chnaged the name of DefaultSchedulerT to DefaultScheduler (no T) since it's not a template anylonger. Also fixed test 35 that executed unecessary slow which had a bad impact on Valgrind profiling execution time.
Some code cleanup of the requirer and provider templates.
Zmq requirer & provider can now send a signal (request) and deserialize received SigOp header at the provider side. Fixed som newly found bugs.
Started fixing test 50 as well as the ZmqRequirerT<> ZmqProviderT<> templates.
Clean-up after static code analysis using CppCheck.
Fixed so that Test 49 works. Now, all tests up to and including 49 seems OK. Also some minor code clean-up.
NON-working interims.
Updated all tests for integer & boolean serialization to be compatible with the new message format.
Separated serialization tests for unsigend (TEST_46_01) and signed ints (TEST_46_02).
Corrected text 46 so that is also now checking for number of serialized variables. All tests 1-46 works.
Updated test 46 to be compatible with the new ZMQ message header format, also depicting number of variables. All tests up to 46 work.
Updated test case 45 to use 1-based SigOp IDs
Changed valid SigOp type IDs to be in the numericla region [1-255] (previously [0-255]). SigOp ID 0 (zero) will instead be used for Bridge control and status commands. Updated tests to reflect this change.
Tests 1 - 44 successfully compile and run.
Found a more optimal solution for setting and reading the SigOp type id using a ProcessableBase pointer.
Fixed the SigOp type ID solution, which didn't work using base class pointers. So, instead of an efficient compile time solution, the current is using pure virtual base method for the ProcessableBase class, having associated overhead.
Interims commit. Compiles and runs tests 43_01 & 43_02 only.
NON-WORKING interims commit. In the middle of cleaning up the distributed ZMQ-bridge.
Separated the state enums for the requiring side and providing side of a distributed bridge into separate enums.
Fixed a bug in test 43 owing to changed name for sigio tuple method names
Bumbed C++ from C++11 to C++14 in order to get access to template variables. Also got binary litterals and a number of other useful additions. This means that the next release of XTU will be version 4.0 since backward compatibility hereby is broken.
Cleaned up the requiring side of the bridge
Changed provider and requirer socket classes to be templates instead. This on order to more tightly connect socket types and their respective bridge.
NON-WORKING interims committ. Restructuring the ZQM provider and requirer sockets into separate classes in order to make the ZMQ provider and ZMQ requirer cleaner classes.
Relocated scheduling of received ZMQ signals
NON-Workin, intermis commit.
Started to convert test 50 to the new bridge code structure. Test 50 compiles and runs so far.
Merging branch restructuring_bridges into trunk
All tests up to TEST 49 run without errors.
Cleaned up the dynamic queue pusg-code and separated the queue size incremeant to its own methid. It seems as if it works.
NON-WORKING. Added locking and non-locking methods for the DynamicQueueT<> since there was race conditions between reading bridge properties (size, empty, etc) and pushing/poping items on the queue.
NON WORKING - Identified race condition for when resizing dynamic queue and also asking for properites (Empty(), Count(), etc.) at the same time.
Tests 1-41_XX works. Added two more subtest (41_03 & 41_04 for fixed size queues.
Added a non-threadsafe dynamic queue. Separated Test 41 into subtest for testing each kind of queue in its own test.
Made BridgeQueueBaseT interface more generic
Tests 1-49 works.
Tests 1-44 + 49 works
Tests 1 - 44 work.
Fixed a bug in the increment of head/tail indexes in DynamicQueueT<>.
Tests 1-41 works. Test 42 generates a segfault in the scheduler. It pops a NULL from the SigOp queue of either the ping bridge or the pong bridge.
Tests 1-40 works.
Tests 1-25 works.
Tests 1-20 works.
Tests 1-15 works. Corrected some minor bugs.
Tests 1-12 copiles and executes correctly.
Tests 1-4 runs to completion.
Compiles. A bunch of minor clean ups. There are still errors since only one test is compiled at this point.
The code compiles but there are errors that haven't yet revealed themselves.
Does not compile. Replaced bridge classes with new template parameters where the derived bridge type and the bridge base type (the bridge contrant) is used as template parameters.
Restructuring the bridge frame work in order to be able to implement distributed bridges in a decent way. Non-distributed bridegs has worked because they haven't had the need to separate provider and requirer in separate memory pools (i.e. processes)
The QueuedBridgeT use case is ambigious
Interims. Working.
Finished rstructuring the ZmqMessage classes. All tests compile and execute as expected.
NOT WORKING but everything except test 51 compiles. Still working on restructuring the ZMQ message classes.
NON WORKING interims commit. This is needed because a pending correction/test of the ZmqMessageT<> template which really(probably) isn't a template at all. The possible change affects too much to do it without a roll back point.
Fixed a bug in test 51. The exec context wasn't initiated so no signals couls be sent.
Renamed module DistributedZmqMessageT to ZmqMessageT
Fixed a missed address operator (&) in the requiring side of distributed bridge. Test 49 and 50 returns OK.
Fixed incorrect way of setting up and shuting down a Zmq socket. Didn't clean up all the way.
Successfully changed push() and pop of Processables in brige queues to use constant Processables. All tests but Test49 work.
Worked on the distributed bridge's scheduler component. Need to commit owing to test of the fundamental bridge queue interface.
Rolled back templatization of DistrZmwMessageT's initMessage(). That didn't work for deserialization since the type of a received signal is not known at compile time.
Cleaned up the interface of the initMessage() method in template DistributedZmqMessageT. All tests compiles and runs to completion.
Modelled the request processor, i.e. the Processable that handles the requiring side's scheduling of outgoing ZMQ requests and incommin ZMQ replies. Also started to implement the request processor.
Added methods to access request queue on the requiring side
Minor clean-up