cameo issueshttps://code.ill.fr/cameo/cameo/-/issues2022-04-20T13:37:13+02:00https://code.ill.fr/cameo/cameo/-/issues/100Unify behavior of connect2022-04-20T13:37:13+02:00yannick legocUnify behavior of connectJava socket returns a boolean that is false if the endpoint is not accessible.
Check if the C++ connect can do the same thing.Java socket returns a boolean that is false if the endpoint is not accessible.
Check if the C++ connect can do the same thing.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/97Remove server instances from API2020-10-26T21:56:44+01:00yannick legocRemove server instances from APIThe server instances are not easy to manage and in fact not very important.
We can imagine that the server instances are a pool managed implicitly.
This would help to have only one server instance per server and solve the server inst...The server instances are not easy to manage and in fact not very important.
We can imagine that the server instances are a pool managed implicitly.
This would help to have only one server instance per server and solve the server instance problem for connectToRequester().
We could imagine:
```
App app(name, endpoint)
App app(id, endpoint)
app.start()
app.connect()
app.stop();
app.waitFor();
Apps apps(name, endpoint) => the set of App
apps.kill();
apps.waitFor();
for (App app in apps) { use of key values to discriminate }
```
Q: Is it still interesting to be able to wait for a non-terminal state? A state handler would be more convenient.
Q: However, what to do with a server that has no application instances anymore? Wait before terminating it (cf strategy for linked apps)New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/94Rename State UNKNOWN into NIL2022-04-22T09:20:50+02:00yannick legocRename State UNKNOWN into NILNew version of APIshttps://code.ill.fr/cameo/cameo/-/issues/87Review event thread in API2022-01-18T15:46:38+01:00yannick legocReview event thread in APIImplement callback on state?
How to do it properly? record on the server event thread?
Do we block the event thread? simplest way to do it.Implement callback on state?
How to do it properly? record on the server event thread?
Do we block the event thread? simplest way to do it.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/84Use of optional<>2021-12-16T15:52:19+01:00yannick legocUse of optional<>It is possible to use optional<> to simulate null values in C++.
This can help to avoid defining exceptions.
This can be the solution to undefined resources: key, app, exitCode, etc.It is possible to use optional<> to simulate null values in C++.
This can help to avoid defining exceptions.
This can be the solution to undefined resources: key, app, exitCode, etc.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/82Add connect(id)2022-04-20T13:39:33+02:00yannick legocAdd connect(id)New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/81Add options to connect() and start()2023-09-01T16:24:08+02:00yannick legocAdd options to connect() and start()Some options can be interesting:
- STOP : stop the application if executing
- KILL : kill the application if executing
- START : start the application if not executing (for connect)Some options can be interesting:
- STOP : stop the application if executing
- KILL : kill the application if executing
- START : start the application if not executing (for connect)New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/78Remove deprecated ZMQ methods from C++ API2022-01-20T16:45:20+01:00Shervin NourbakhshRemove deprecated ZMQ methods from C++ APIWhen compiling, I got several warnings about deprecated declarations using zmq methods.
```
./cameo/src/impl/SubscriberImpl.cpp:210:36: warning: ‘bool zmq::detail::socket_base::recv(zmq::message_t*, int)’ is deprecated: from 4.3.1, use ...When compiling, I got several warnings about deprecated declarations using zmq methods.
```
./cameo/src/impl/SubscriberImpl.cpp:210:36: warning: ‘bool zmq::detail::socket_base::recv(zmq::message_t*, int)’ is deprecated: from 4.3.1, use recv taking a reference to message_t and recv_flags [-Wdeprecated-declarations]
m_subscriber->recv(message.get());
^
In file included from /opt/panosc/cameo/src/impl/SocketWaitingImpl.h:23,
from /opt/panosc/cameo/src/impl/SubscriberImpl.h:20,
from /opt/panosc/cameo/src/impl/SubscriberImpl.cpp:17:
/usr/include/zmq.hpp:1267:10: note: declared here
bool recv(message_t *msg_, int flags_ = 0)
^~~~
```New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/77Replace Instance.exists() by an exception2022-04-20T13:41:19+02:00yannick legocReplace Instance.exists() by an exceptionIndeed, it is important to unify behaviour between different classes/methods:
* connect(name) throws UndefinedApplicationException.
* start(name) throws UndefinedApplicationException.
Idea: any undefined resource throws an exception (ke...Indeed, it is important to unify behaviour between different classes/methods:
* connect(name) throws UndefinedApplicationException.
* start(name) throws UndefinedApplicationException.
Idea: any undefined resource throws an exception (key, app, etc.)
* start() return a non-null Instance.
* connect() may return a null Instance if nothing executes.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/73API Names refactoring2022-04-19T13:10:14+02:00yannick legocAPI Names refactoring- Class application.Instance will be renamed into App (aka Application process proxy).
- Use of nested classes for Output, Config, Info (in App): possible to bind nested class in Python?
- Add App.getConfig()
- Review the java packages t...- Class application.Instance will be renamed into App (aka Application process proxy).
- Use of nested classes for Output, Config, Info (in App): possible to bind nested class in Python?
- Add App.getConfig()
- Review the java packages to prepare the module definition.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/68Check compatibility2022-05-19T14:59:05+02:00yannick legocCheck compatibilityWhen connecting to a remote cameo server, it is necessary to check the version so that it is compatible with the API version.
The server must verify that the request is acceptable or not (i.e. a request from API v1 is not compatible with...When connecting to a remote cameo server, it is necessary to check the version so that it is compatible with the API version.
The server must verify that the request is acceptable or not (i.e. a request from API v1 is not compatible with v2).New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/62Request::getServer to be reviewed2022-03-01T15:44:23+01:00yannick legocRequest::getServer to be reviewedProvide a way to create the server outside? And do not keep it inside the Request.Provide a way to create the server outside? And do not keep it inside the Request.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/61Review unique_ptr vs shared_ptr2020-10-01T15:00:36+02:00yannick legocReview unique_ptr vs shared_ptrRequest::getServer() should return a shared_ptr because it can be called many times.Request::getServer() should return a shared_ptr because it can be called many times.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/56Refactor OuputStreamSocket2022-04-20T13:42:52+02:00yannick legocRefactor OuputStreamSocketChange namespace/package. Return null instead of end in case of end.Change namespace/package. Return null instead of end in case of end.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/48Add the default constructor to Server class2022-04-20T13:47:11+02:00yannick legocAdd the default constructor to Server classWith Application::getEndpoint() as endpoint.With Application::getEndpoint() as endpoint.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/38Add the method This.init(string, string)2020-11-02T15:19:20+01:00yannick legocAdd the method This.init(string, string)In case of unmanaged application, it is better to have a new method:
* This.init(String applicationName, String endpoint)In case of unmanaged application, it is better to have a new method:
* This.init(String applicationName, String endpoint)New version of APIshttps://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/2Timeouts2022-10-19T14:14:50+02:00yannick legocTimeoutsEvery blocking call must be able to return after a timeout.
For a blocking call like waitFor, periodical tests should be provided.
Zeromq reliability: http://zguide.zeromq.org/php:chapter4
Failure example: remote app starts but a netwo...Every blocking call must be able to return after a timeout.
For a blocking call like waitFor, periodical tests should be provided.
Zeromq reliability: http://zguide.zeromq.org/php:chapter4
Failure example: remote app starts but a network failure happens before the setResult.
The change of state is ok but not the starter which blocks on getResult in the recv call.
Server initialization must throw a ConnectionTimeout or return boolean in case of timeout.New version of APIshttps://code.ill.fr/cameo/cameo/-/issues/1Blocking calls: cancel2023-07-25T08:32:28+02:00yannick legocBlocking calls: cancelThe C++ and Java API provide blocking calls:
* Publisher.waitForSubscribers
* Subscriber.receive
* Requester.request
* Responder.receive
* Instance.waitFor
The current implementation of cancel - e.g. called from a stop handler does not ...The C++ and Java API provide blocking calls:
* Publisher.waitForSubscribers
* Subscriber.receive
* Requester.request
* Responder.receive
* Instance.waitFor
The current implementation of cancel - e.g. called from a stop handler does not work well. It supposes the objects are waiting in a previous call.
An improvement must be done:
* Each object has the state waiting: true/false
* Each object has the state canceled: true/false
The canceled state is terminal: once an object is canceled it cannot revert to uncanceled.
These states must be managed properly by the associated waiting object.
* A common mutex blocks the access of the two states
* waiting false then canceled true: does not send the cancel "signal"
* waiting true then canceled true: sends the cancel "signal"
* canceled true then waiting true: does not send the cancel "signal" but the call returns immediately
We can add the create calls for the different objects except Instance. How to manage?New version of APIs