cameo issueshttps://code.ill.fr/cameo/cameo/-/issues2020-10-01T14:32:33+02:00https://code.ill.fr/cameo/cameo/-/issues/30Android and Java 92020-10-01T14:32:33+02:00yannick legocAndroid and Java 9See what we need to do: keep old version in Android tablet app? or special code.See what we need to do: keep old version in Android tablet app? or special code.https://code.ill.fr/cameo/cameo/-/issues/29States in objects2020-10-01T14:27:54+02:00yannick legocStates in objectsEach connected object must have a clear state.Each connected object must have a clear state.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/28Messages.proto to move into cameo-commons2018-07-13T08:38:50+02:00yannick legocMessages.proto to move into cameo-commonsTo avoid class duplication in Java. Then cameo-commons becomes a Java project that depends cameo-server and cameo-java-api.To avoid class duplication in Java. Then cameo-commons becomes a Java project that depends cameo-server and cameo-java-api.https://code.ill.fr/cameo/cameo/-/issues/27Keep app in the list with state UNKNOWN2020-10-01T14:26:03+02:00yannick legocKeep app in the list with state UNKNOWNWe keep the app with state UNKNOWN if it is still alive but has not a running state.
For instance, when an app is terminating but the process is still alive.We keep the app with state UNKNOWN if it is still alive but has not a running state.
For instance, when an app is terminating but the process is still alive.https://code.ill.fr/cameo/cameo/-/issues/26Define more than one Requester on the same Responder in one instance2017-09-01T10:41:38+02:00yannick legocDefine more than one Requester on the same Responder in one instanceThe Cameo API is limited to the definition of a single Requester for a given Responder.
We can modify the API to enable to have multiple requesters:
RequesterImpl.getRequesterPortName() must have another implementation:
return REQUESTER...The Cameo API is limited to the definition of a single Requester for a given Responder.
We can modify the API to enable to have multiple requesters:
RequesterImpl.getRequesterPortName() must have another implementation:
return REQUESTER_PREFIX + name + "." + responderId + "." + requesterCounter;
With requesterCounter a static integer incremented by concurrent access.
To be implemented in Java and C++.https://code.ill.fr/cameo/cameo/-/issues/25Benchmark Android2020-10-01T14:25:10+02:00yannick legocBenchmark AndroidThe first tests with Cameo (JeroMQ and JZMQ) show bad performance in requester/responder (time mainly lost in the recv method). The benchmark will:
* Compare basic java Socket with JeroMQ, JZMQ sockets
* Test on different message sizesThe first tests with Cameo (JeroMQ and JZMQ) show bad performance in requester/responder (time mainly lost in the recv method). The benchmark will:
* Compare basic java Socket with JeroMQ, JZMQ sockets
* Test on different message sizeshttps://code.ill.fr/cameo/cameo/-/issues/24Check null values passed to send data functions/methods2020-10-01T14:20:25+02:00yannick legocCheck null values passed to send data functions/methodsFor functions: This.setResult, Publisher.send, Requester.send.
The simplest solution is to do nothing if data are null.For functions: This.setResult, Publisher.send, Requester.send.
The simplest solution is to do nothing if data are null.Mischttps://code.ill.fr/cameo/cameo/-/issues/23Documentation2020-10-06T14:53:56+02:00yannick legocDocumentationThe documentation with concepts and commented examples must be written
Explain:
* What is an application
* What is an App = application instance
Draw the general case: multiple App instance -> multiple instance process -> application
*...The documentation with concepts and commented examples must be written
Explain:
* What is an application
* What is an App = application instance
Draw the general case: multiple App instance -> multiple instance process -> application
* Configuration file with options
* Managed and unmanaged applications
* Communication patterns
It will also contain:
* Publisher/Subscriber: dead publisher application. Clarify: Subscriber.hasEnded() returns false
* Study how the project is related to others: for documentation/article
* Asynchronous API, future/promise model, how it is not enough.
* Study Erlang
https://en.wikipedia.org/wiki/Erlang_(programming_language)
* thread safety: clarifyMischttps://code.ill.fr/cameo/cameo/-/issues/22When application stops immediately and starting_time = 02020-10-01T16:19:41+02:00yannick legocWhen application stops immediately and starting_time = 0There is no output and the console blocks in exec mode.There is no output and the console blocks in exec mode.https://code.ill.fr/cameo/cameo/-/issues/21Test outputStreamSocket null2020-10-01T15:12:26+02:00yannick legocTest outputStreamSocket nullCan occur when connecting to application and it dies before.Can occur when connecting to application and it dies before.https://code.ill.fr/cameo/cameo/-/issues/20Request version of the server in API2020-10-01T14:24:02+02:00yannick legocRequest version of the server in APICan be used later to check the compatibility.
Console application must be updated to provide a version command that will return a simple value in case the request does not exist.Can be used later to check the compatibility.
Console application must be updated to provide a version command that will return a simple value in case the request does not exist.https://code.ill.fr/cameo/cameo/-/issues/19Refactor use of ZeroMQ2020-10-01T14:17:32+02:00yannick legocRefactor use of ZeroMQGather code: Socket calls.
Manage exceptions from ZeroMQ (ex: invalid host generates an exception).Gather code: Socket calls.
Manage exceptions from ZeroMQ (ex: invalid host generates an exception).https://code.ill.fr/cameo/cameo/-/issues/18Display stream with multiple=yes2020-10-13T14:42:42+02:00yannick legocDisplay stream with multiple=yesImplement multiple stream for multiple applications:
- The cameo server accepts and starts a stream thread.
- The clients must filter the stream message on the application id.
For instance, the class OutputPrintThread.Implement multiple stream for multiple applications:
- The cameo server accepts and starts a stream thread.
- The clients must filter the stream message on the application id.
For instance, the class OutputPrintThread.Server v1 update (1)https://code.ill.fr/cameo/cameo/-/issues/17Port strategy2020-10-21T10:29:11+02:00yannick legocPort strategyOnly the client API can check for a new available port because a tier program can reserve a port.
Solution:
- Add the server request PORT_UNAVAILABLE: the server stores the list of unavailable ports.
- The request REQUEST_PORT returns a...Only the client API can check for a new available port because a tier program can reserve a port.
Solution:
- Add the server request PORT_UNAVAILABLE: the server stores the list of unavailable ports.
- The request REQUEST_PORT returns a port available (not in the list of unavailable ports).
Use case:
1. The client requests a port.
2. The client tries to open the port. If successful, the procedure is finished.
3. If not successful, the client informs the server that the port is unavailable. Go to 1.Server v1 update (1)https://code.ill.fr/cameo/cameo/-/issues/16Deployment of a new version of a managed application2020-10-01T14:14:32+02:00yannick legocDeployment of a new version of a managed application* Solution
* new set of states for an Application that are independent from the current states: UP_TO_DATE, WAITING_FOR_UPDATE (version is waiting to be installed), UPDATING, ERROR (blocking the application?). We call it the update stat...* Solution
* new set of states for an Application that are independent from the current states: UP_TO_DATE, WAITING_FOR_UPDATE (version is waiting to be installed), UPDATING, ERROR (blocking the application?). We call it the update state.
* push a new version on a Cameo server. It is a request when processed:
* application becomes WAITING_FOR_UPDATE immediately
* the new version data is saved locally and replaces the previous new version if it is not installed yet
* the server installs it when the application is stopped (option: stop the application immediately)
* the application has the state UPDATING (new state in the current list)
* the config file is modified after each installation (to memorize the version number)
* the server shall not be brutally stopped
* enable to stop nicely the server
* default installation: copy file (jar) to install_directory, untar a tar to install_directory
* or an installation script
* command line: cmo app1 update app1.jar 1.2.3
* monitoring notifications:
* the Cameo server publishes a new status when the version is installed
* status VERSION value
* version in the application info
* class This can access versionhttps://code.ill.fr/cameo/cameo/-/issues/15Communication classes refactoring2020-10-01T14:13:30+02:00yannick legocCommunication classes refactoringPublisher and Subscribers can be implemented outside the static Application class (com package).
We have to extract the services from Application (and Impl) required to implement them as external (the idea is to have an example of how to...Publisher and Subscribers can be implemented outside the static Application class (com package).
We have to extract the services from Application (and Impl) required to implement them as external (the idea is to have an example of how to create a communication service).
So that the communication becomes extensible and other communication patterns can be implemented.
This requires to have access to the map of custom data in server.https://code.ill.fr/cameo/cameo/-/issues/14toString format2022-04-22T09:21:36+02:00yannick legoctoString formatThe encoding of toString methods can be improved by using JSON.The encoding of toString methods can be improved by using JSON.JSON and nameshttps://code.ill.fr/cameo/cameo/-/issues/13Fixed publisher port2020-10-01T14:11:08+02:00yannick legocFixed publisher portIt can be interesting to fix the socket port for a publisher so that subscribers are still valid after the termination of the publisher e.g. after unintended crash.
Is it possible? How to ensure the port won't be used by a tier program?
...It can be interesting to fix the socket port for a publisher so that subscribers are still valid after the termination of the publisher e.g. after unintended crash.
Is it possible? How to ensure the port won't be used by a tier program?
We can add a flag:
```xml
<application ...>
<publisher name=""/>
```
Reserves fixed ports in case the application is single instance.https://code.ill.fr/cameo/cameo/-/issues/12Array transfer optimization2018-01-09T10:24:35+01:00yannick legocArray transfer optimizationOptimize by providing array optimization implementation by Xavier Pacalet.Optimize by providing array optimization implementation by Xavier Pacalet.https://code.ill.fr/cameo/cameo/-/issues/11C++11 for the C++ API2020-10-13T14:52:19+02:00yannick legocC++11 for the C++ APIMigrate to C++11
* replace auto_ptr by unique_ptr
* use noncopyable
* C headers to be replaced: stdint.h, etc.Migrate to C++11
* replace auto_ptr by unique_ptr
* use noncopyable
* C headers to be replaced: stdint.h, etc.Python APIyannick legocyannick legoc