mirror of
https://github.com/FairRootGroup/FairMQ.git
synced 2025-10-13 16:46:47 +00:00
- Add multipart support to the interface and enable its use out of tasks.
Examples on the use out of tasks are provided in: `example/Tutorial3/digitization/TestDetectorDigiLoader.tpl:76-85`: sending a part. `example/Tutorial3/reconstruction/FairTestDetectorMQRecoTask.tpl:177-182`: receiving a part. - This commit also makes structure within processorTask more consistent with samplerTask. - add macro MQLOG to FairMQLogger.
This commit is contained in:
parent
281fcc459c
commit
8cd120aef4
|
@ -52,8 +52,11 @@ std::ostringstream& FairMQLogger::Log(int type)
|
||||||
case ERROR:
|
case ERROR:
|
||||||
type_str = "\033[01;31mERROR\033[0m";
|
type_str = "\033[01;31mERROR\033[0m";
|
||||||
break;
|
break;
|
||||||
|
case WARN:
|
||||||
|
type_str = "\033[01;33mWARN\033[0m";
|
||||||
|
break;
|
||||||
case STATE:
|
case STATE:
|
||||||
type_str = "\033[01;33mSTATE\033[0m";
|
type_str = "\033[01;35mSTATE\033[0m";
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ class FairMQLogger
|
||||||
DEBUG,
|
DEBUG,
|
||||||
INFO,
|
INFO,
|
||||||
ERROR,
|
ERROR,
|
||||||
|
WARN,
|
||||||
STATE
|
STATE
|
||||||
};
|
};
|
||||||
FairMQLogger();
|
FairMQLogger();
|
||||||
|
@ -46,5 +47,6 @@ typedef unsigned long long timestamp_t;
|
||||||
timestamp_t get_timestamp();
|
timestamp_t get_timestamp();
|
||||||
|
|
||||||
#define LOG(type) FairMQLogger().Log(FairMQLogger::type)
|
#define LOG(type) FairMQLogger().Log(FairMQLogger::type)
|
||||||
|
#define MQLOG(type) FairMQLogger().Log(FairMQLogger::type)
|
||||||
|
|
||||||
#endif /* FAIRMQLOGGER_H_ */
|
#endif /* FAIRMQLOGGER_H_ */
|
||||||
|
|
|
@ -29,14 +29,15 @@ class FairMQSocket
|
||||||
virtual void Bind(const string& address) = 0;
|
virtual void Bind(const string& address) = 0;
|
||||||
virtual void Connect(const string& address) = 0;
|
virtual void Connect(const string& address) = 0;
|
||||||
|
|
||||||
virtual size_t Send(FairMQMessage* msg) = 0;
|
virtual size_t Send(FairMQMessage* msg, const string& flag="") = 0;
|
||||||
virtual size_t Receive(FairMQMessage* msg) = 0;
|
virtual size_t Receive(FairMQMessage* msg, const string& flag="") = 0;
|
||||||
|
|
||||||
virtual void* GetSocket() = 0;
|
virtual void* GetSocket() = 0;
|
||||||
virtual int GetSocket(int nothing) = 0;
|
virtual int GetSocket(int nothing) = 0;
|
||||||
virtual void Close() = 0;
|
virtual void Close() = 0;
|
||||||
|
|
||||||
virtual void SetOption(const string& option, const void* value, size_t valueSize) = 0;
|
virtual void SetOption(const string& option, const void* value, size_t valueSize) = 0;
|
||||||
|
virtual void GetOption(const string& option, void* value, size_t* valueSize) = 0;
|
||||||
|
|
||||||
virtual unsigned long GetBytesTx() = 0;
|
virtual unsigned long GetBytesTx() = 0;
|
||||||
virtual unsigned long GetBytesRx() = 0;
|
virtual unsigned long GetBytesRx() = 0;
|
||||||
|
|
|
@ -176,18 +176,18 @@ namespace FairMQFSM
|
||||||
}
|
}
|
||||||
// Transition table for FairMQFMS
|
// Transition table for FairMQFMS
|
||||||
struct transition_table : mpl::vector<
|
struct transition_table : mpl::vector<
|
||||||
// Start Event Next Action Guard
|
// Start Event Next Action Guard
|
||||||
// +---------+---------+-------+---------+--------+
|
// +------------------+----------+------------------+-------------+---------+
|
||||||
msmf::Row<IDLE_FSM, INIT, INITIALIZING_FSM, InitFct, msmf::none>,
|
msmf::Row<IDLE_FSM, INIT, INITIALIZING_FSM, InitFct, msmf::none>,
|
||||||
msmf::Row<IDLE_FSM, END, msmf::none, TestFct, msmf::none>, // this is an invalid transition...
|
msmf::Row<IDLE_FSM, END, msmf::none, TestFct, msmf::none>, // this is an invalid transition...
|
||||||
msmf::Row<INITIALIZING_FSM, SETOUTPUT, SETTINGOUTPUT_FSM, SetOutputFct, msmf::none>,
|
msmf::Row<INITIALIZING_FSM, SETOUTPUT, SETTINGOUTPUT_FSM, SetOutputFct, msmf::none>,
|
||||||
msmf::Row<SETTINGOUTPUT_FSM, SETINPUT, SETTINGINPUT_FSM, SetInputFct, msmf::none>,
|
msmf::Row<SETTINGOUTPUT_FSM, SETINPUT, SETTINGINPUT_FSM, SetInputFct, msmf::none>,
|
||||||
msmf::Row<SETTINGINPUT_FSM, PAUSE, WAITING_FSM, PauseFct, msmf::none>,
|
msmf::Row<SETTINGINPUT_FSM, PAUSE, WAITING_FSM, PauseFct, msmf::none>,
|
||||||
msmf::Row<SETTINGINPUT_FSM, RUN, RUNNING_FSM, RunFct, msmf::none>,
|
msmf::Row<SETTINGINPUT_FSM, RUN, RUNNING_FSM, RunFct, msmf::none>,
|
||||||
msmf::Row<WAITING_FSM, RUN, RUNNING_FSM, RunFct, msmf::none>,
|
msmf::Row<WAITING_FSM, RUN, RUNNING_FSM, RunFct, msmf::none>,
|
||||||
msmf::Row<WAITING_FSM, STOP, IDLE_FSM, StopFct, msmf::none>,
|
msmf::Row<WAITING_FSM, STOP, IDLE_FSM, StopFct, msmf::none>,
|
||||||
msmf::Row<RUNNING_FSM, PAUSE, WAITING_FSM, PauseFct, msmf::none>,
|
msmf::Row<RUNNING_FSM, PAUSE, WAITING_FSM, PauseFct, msmf::none>,
|
||||||
msmf::Row<RUNNING_FSM, STOP, IDLE_FSM, StopFct, msmf::none> >
|
msmf::Row<RUNNING_FSM, STOP, IDLE_FSM, StopFct, msmf::none> >
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
// Replaces the default no-transition response.
|
// Replaces the default no-transition response.
|
||||||
|
|
|
@ -37,6 +37,12 @@ FairMQMessageNN::FairMQMessageNN(size_t size)
|
||||||
fReceiving = false;
|
fReceiving = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* nanomsg does not offer support for creating a message out of an existing buffer,
|
||||||
|
* therefore the following method is using memcpy. For more efficient handling,
|
||||||
|
* create FairMQMessage object only with size parameter and fill it with data.
|
||||||
|
* possible TODO: make this zero copy (will should then be as efficient as ZeroMQ).
|
||||||
|
*/
|
||||||
FairMQMessageNN::FairMQMessageNN(void* data, size_t size, fairmq_free_fn *ffn, void* hint)
|
FairMQMessageNN::FairMQMessageNN(void* data, size_t size, fairmq_free_fn *ffn, void* hint)
|
||||||
{
|
{
|
||||||
fMessage = nn_allocmsg(size, 0);
|
fMessage = nn_allocmsg(size, 0);
|
||||||
|
|
|
@ -69,7 +69,7 @@ void FairMQSocketNN::Connect(const string& address)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t FairMQSocketNN::Send(FairMQMessage* msg)
|
size_t FairMQSocketNN::Send(FairMQMessage* msg, const string& flag)
|
||||||
{
|
{
|
||||||
void* ptr = msg->GetMessage();
|
void* ptr = msg->GetMessage();
|
||||||
int rc = nn_send(fSocket, &ptr, NN_MSG, 0);
|
int rc = nn_send(fSocket, &ptr, NN_MSG, 0);
|
||||||
|
@ -87,7 +87,7 @@ size_t FairMQSocketNN::Send(FairMQMessage* msg)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t FairMQSocketNN::Receive(FairMQMessage* msg)
|
size_t FairMQSocketNN::Receive(FairMQMessage* msg, const string& flag)
|
||||||
{
|
{
|
||||||
void* ptr = NULL;
|
void* ptr = NULL;
|
||||||
int rc = nn_recv(fSocket, &ptr, NN_MSG, 0);
|
int rc = nn_recv(fSocket, &ptr, NN_MSG, 0);
|
||||||
|
@ -130,6 +130,14 @@ void FairMQSocketNN::SetOption(const string& option, const void* value, size_t v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FairMQSocketNN::GetOption(const string& option, void* value, size_t* valueSize)
|
||||||
|
{
|
||||||
|
int rc = nn_getsockopt(fSocket, NN_SOL_SOCKET, GetConstant(option), value, valueSize);
|
||||||
|
if (rc < 0) {
|
||||||
|
LOG(ERROR) << "failed getting socket option, reason: " << nn_strerror(errno);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
unsigned long FairMQSocketNN::GetBytesTx()
|
unsigned long FairMQSocketNN::GetBytesTx()
|
||||||
{
|
{
|
||||||
return fBytesTx;
|
return fBytesTx;
|
||||||
|
@ -152,6 +160,8 @@ unsigned long FairMQSocketNN::GetMessagesRx()
|
||||||
|
|
||||||
int FairMQSocketNN::GetConstant(const string& constant)
|
int FairMQSocketNN::GetConstant(const string& constant)
|
||||||
{
|
{
|
||||||
|
if (constant == "")
|
||||||
|
return 0;
|
||||||
if (constant == "sub")
|
if (constant == "sub")
|
||||||
return NN_SUB;
|
return NN_SUB;
|
||||||
if (constant == "pub")
|
if (constant == "pub")
|
||||||
|
@ -168,6 +178,14 @@ int FairMQSocketNN::GetConstant(const string& constant)
|
||||||
return NN_SNDBUF;
|
return NN_SNDBUF;
|
||||||
if (constant == "rcv-hwm")
|
if (constant == "rcv-hwm")
|
||||||
return NN_RCVBUF;
|
return NN_RCVBUF;
|
||||||
|
if (constant == "snd-more") {
|
||||||
|
LOG(ERROR) << "Multipart messages functionality currently not supported by nanomsg!";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (constant == "rcv-more") {
|
||||||
|
LOG(ERROR) << "Multipart messages functionality currently not supported by nanomsg!";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,14 +31,15 @@ class FairMQSocketNN : public FairMQSocket
|
||||||
virtual void Bind(const string& address);
|
virtual void Bind(const string& address);
|
||||||
virtual void Connect(const string& address);
|
virtual void Connect(const string& address);
|
||||||
|
|
||||||
virtual size_t Send(FairMQMessage* msg);
|
virtual size_t Send(FairMQMessage* msg, const string& flag="");
|
||||||
virtual size_t Receive(FairMQMessage* msg);
|
virtual size_t Receive(FairMQMessage* msg, const string& flag="");
|
||||||
|
|
||||||
virtual void* GetSocket();
|
virtual void* GetSocket();
|
||||||
virtual int GetSocket(int nothing);
|
virtual int GetSocket(int nothing);
|
||||||
virtual void Close();
|
virtual void Close();
|
||||||
|
|
||||||
virtual void SetOption(const string& option, const void* value, size_t valueSize);
|
virtual void SetOption(const string& option, const void* value, size_t valueSize);
|
||||||
|
virtual void GetOption(const string& option, void* value, size_t* valueSize);
|
||||||
|
|
||||||
unsigned long GetBytesTx();
|
unsigned long GetBytesTx();
|
||||||
unsigned long GetBytesRx();
|
unsigned long GetBytesRx();
|
||||||
|
|
|
@ -82,9 +82,9 @@ void FairMQSocketZMQ::Connect(const string& address)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t FairMQSocketZMQ::Send(FairMQMessage* msg)
|
size_t FairMQSocketZMQ::Send(FairMQMessage* msg, const string& flag)
|
||||||
{
|
{
|
||||||
int nbytes = zmq_msg_send(static_cast<zmq_msg_t*>(msg->GetMessage()), fSocket, 0);
|
int nbytes = zmq_msg_send(static_cast<zmq_msg_t*>(msg->GetMessage()), fSocket, GetConstant(flag));
|
||||||
if (nbytes >= 0)
|
if (nbytes >= 0)
|
||||||
{
|
{
|
||||||
fBytesTx += nbytes;
|
fBytesTx += nbytes;
|
||||||
|
@ -99,9 +99,9 @@ size_t FairMQSocketZMQ::Send(FairMQMessage* msg)
|
||||||
return nbytes;
|
return nbytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t FairMQSocketZMQ::Receive(FairMQMessage* msg)
|
size_t FairMQSocketZMQ::Receive(FairMQMessage* msg, const string& flag)
|
||||||
{
|
{
|
||||||
int nbytes = zmq_msg_recv(static_cast<zmq_msg_t*>(msg->GetMessage()), fSocket, 0);
|
int nbytes = zmq_msg_recv(static_cast<zmq_msg_t*>(msg->GetMessage()), fSocket, GetConstant(flag));
|
||||||
if (nbytes >= 0)
|
if (nbytes >= 0)
|
||||||
{
|
{
|
||||||
fBytesRx += nbytes;
|
fBytesRx += nbytes;
|
||||||
|
@ -152,6 +152,14 @@ void FairMQSocketZMQ::SetOption(const string& option, const void* value, size_t
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void FairMQSocketZMQ::GetOption(const string& option, void* value, size_t* valueSize)
|
||||||
|
{
|
||||||
|
int rc = zmq_getsockopt(fSocket, GetConstant(option), value, valueSize);
|
||||||
|
if (rc < 0) {
|
||||||
|
LOG(ERROR) << "failed getting socket option, reason: " << zmq_strerror(errno);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
unsigned long FairMQSocketZMQ::GetBytesTx()
|
unsigned long FairMQSocketZMQ::GetBytesTx()
|
||||||
{
|
{
|
||||||
return fBytesTx;
|
return fBytesTx;
|
||||||
|
@ -174,6 +182,8 @@ unsigned long FairMQSocketZMQ::GetMessagesRx()
|
||||||
|
|
||||||
int FairMQSocketZMQ::GetConstant(const string& constant)
|
int FairMQSocketZMQ::GetConstant(const string& constant)
|
||||||
{
|
{
|
||||||
|
if (constant == "")
|
||||||
|
return 0;
|
||||||
if (constant == "sub")
|
if (constant == "sub")
|
||||||
return ZMQ_SUB;
|
return ZMQ_SUB;
|
||||||
if (constant == "pub")
|
if (constant == "pub")
|
||||||
|
@ -190,6 +200,10 @@ int FairMQSocketZMQ::GetConstant(const string& constant)
|
||||||
return ZMQ_SNDHWM;
|
return ZMQ_SNDHWM;
|
||||||
if (constant == "rcv-hwm")
|
if (constant == "rcv-hwm")
|
||||||
return ZMQ_RCVHWM;
|
return ZMQ_RCVHWM;
|
||||||
|
if (constant == "snd-more")
|
||||||
|
return ZMQ_SNDMORE;
|
||||||
|
if (constant == "rcv-more")
|
||||||
|
return ZMQ_RCVMORE;
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,14 +32,15 @@ class FairMQSocketZMQ : public FairMQSocket
|
||||||
virtual void Bind(const string& address);
|
virtual void Bind(const string& address);
|
||||||
virtual void Connect(const string& address);
|
virtual void Connect(const string& address);
|
||||||
|
|
||||||
virtual size_t Send(FairMQMessage* msg);
|
virtual size_t Send(FairMQMessage* msg, const string& flag="");
|
||||||
virtual size_t Receive(FairMQMessage* msg);
|
virtual size_t Receive(FairMQMessage* msg, const string& flag="");
|
||||||
|
|
||||||
virtual void* GetSocket();
|
virtual void* GetSocket();
|
||||||
virtual int GetSocket(int nothing);
|
virtual int GetSocket(int nothing);
|
||||||
virtual void Close();
|
virtual void Close();
|
||||||
|
|
||||||
virtual void SetOption(const string& option, const void* value, size_t valueSize);
|
virtual void SetOption(const string& option, const void* value, size_t valueSize);
|
||||||
|
virtual void GetOption(const string& option, void* value, size_t* valueSize);
|
||||||
|
|
||||||
virtual unsigned long GetBytesTx();
|
virtual unsigned long GetBytesTx();
|
||||||
virtual unsigned long GetBytesRx();
|
virtual unsigned long GetBytesRx();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user