Hi Alberto,
Can you please share the diffs you made to the test? That will help.
I tried with the following changes and it worked fine
diff --git a/library/cpp/test/sandesh_message_test.cc
b/library/cpp/test/sandesh_message_test.cc
index f27a0c1..4aab1b6 100644
--- a/library/cpp/test/sandesh_message_test.cc
+++ b/library/cpp/test/sandesh_message_test.cc
@@ -475,12 +475,13 @@ protected:
TEST_F(SandeshUVEAlarmTest, UVEAlarm) {
server_->Initialize(0);
thread_->Start();
- int port = server_->GetPort();
+ //int port = server_->GetPort();
+ int port = 8086;
ASSERT_LT(0, port);
Sandesh::InitGenerator("SandeshUVEAlarmTest-Client", "localhost", "Test",
"0", evm_.get(), 0, NULL);
- Sandesh::ConnectToCollector("127.0.0.1", port);
+ Sandesh::ConnectToCollector("10.84.13.23", port);
TASK_UTIL_EXPECT_TRUE(Sandesh::client()->state() ==
SandeshClientSM::ESTABLISHED);
// add uve
ubuntu-build04@test$
Logs from the test below:
ubuntu-build04@github-icehouse$
./build/debug/tools/sandesh/library/cpp/test/sandesh_message_test
--gtest_filter=*Alarm*
Note: Google Test filter = *Alarm*
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from SandeshUVEAlarmTest
[ RUN ] SandeshUVEAlarmTest.UVEAlarm
2015-04-14 Tue 17:26:49:453.703 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: Server 0.0.0.0:50474 Initialization complete
2015-04-14 Tue 17:26:49:453.920 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SANDESH: ROLE : Generator
2015-04-14 Tue 17:26:49:453.951 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SANDESH: MODULE : SandeshUVEAlarmTest-Client
2015-04-14 Tue 17:26:49:453.972 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SANDESH: SOURCE : localhost
2015-04-14 Tue 17:26:49:453.991 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SANDESH: NODE TYPE : Test
2015-04-14 Tue 17:26:49:454.010 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SANDESH: INSTANCE ID : 0
2015-04-14 Tue 17:26:49:454.029 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SANDESH: HTTP SERVER PORT : 0
2015-04-14 Tue 17:26:49:454.185 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: HTTP Introspect Init
2015-04-14 Tue 17:26:49:454.327 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: TCP [SYS_DEBUG]: TcpServerMessageLog: Server 0.0.0.0:60366
Initialization complete controller/src/io/tcp_server.cc 102
2015-04-14 Tue 17:26:49:454.388 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: Sandesh Http Server Port 60366
2015-04-14 Tue 17:26:49:454.449 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SANDESH: NOT Writing http_port 60366TO :
/tmp/SandeshUVEAlarmTest-Client.3152.http_port
2015-04-14 Tue 17:26:49:454.482 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SANDESH: COLLECTOR : 10.84.13.23
2015-04-14 Tue 17:26:49:454.502 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SANDESH: COLLECTOR PORT : 8086
2015-04-14 Tue 17:26:49:454.531 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SANDESH: CONNECT TO COLLECTOR: 1
2015-04-14 Tue 17:26:49:454.665 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: Idle
2015-04-14 Tue 17:26:49:454.940 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SANDESH: No Client: 1429057609454838 SandeshModuleClientTrace: data=
[ name = localhost:Test:SandeshUVEAlarmTest-Client:0 client_info= [ status =
Idle successful_connections = 0 pid = 5403 http_port = 60366 start_time =
1429057609454700 collector_name = primary = 0.0.0.0:0 secondary = 0.0.0.0:0
rx_socket_stats= [ bytes = 0 calls = 0 average_bytes = 0 blocked_duration =
blocked_count = 0 average_blocked_duration = errors = 0 ] tx_socket_stats= [
bytes = 0 calls = 0 average_bytes = 0 blocked_duration = 00:00:00 blocked_count
= 0 average_blocked_duration = errors = 0 ] ] ]
2015-04-14 Tue 17:26:49:455.030 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: primary 10.84.13.23:8086
2015-04-14 Tue 17:26:49:455.063 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: secondary 0.0.0.0:0
2015-04-14 Tue 17:26:49:471.317 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Processing scm::EvStart in state Idle
2015-04-14 Tue 17:26:49:474.202 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Disconnect
2015-04-14 Tue 17:26:49:474.582 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Processing scm::EvDiscUpdate in state Disconnect
2015-04-14 Tue 17:26:49:475.213 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Connect : Start Connect timer 10.84.13.23:8086
2015-04-14 Tue 17:26:49:475.485 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Processing scm::EvSandeshSend in state Connect
2015-04-14 Tue 17:26:49:475.568 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Wrong state: Connect for event: EvSandeshSend
2015-04-14 Tue 17:26:49:475.638 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Processing scm::EvSandeshSend in state Connect
2015-04-14 Tue 17:26:49:475.650 PDT ubuntu-build04 [Thread 140071574546176,
Pid 5403]: SANDESH: Send FAILED: 1429057609475598 TCP [SYS_DEBUG]:
TcpSessionMessageLog: Session 10.84.5.39:38468::10.84.13.23:8086(-1) < Active
session connection complete controller/src/io/tcp_session.cc 228
2015-04-14 Tue 17:26:49:475.711 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Wrong state: Connect for event: EvSandeshSend
2015-04-14 Tue 17:26:49:475.832 PDT ubuntu-build04 [Thread 140071574546176,
Pid 5403]: 10.84.5.39:38468::10.84.13.23:8086(-1) OnSessionEvent TCP Connected
2015-04-14 Tue 17:26:49:475.901 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Processing scm::EvSandeshSend in state Connect
2015-04-14 Tue 17:26:49:475.949 PDT ubuntu-build04 [Thread 140071574546176,
Pid 5403]: 10.84.5.39:38468::10.84.13.23:8086(-1):EvTcpConnected
2015-04-14 Tue 17:26:49:476.022 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Wrong state: Connect for event: EvSandeshSend
2015-04-14 Tue 17:26:49:476.152 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Processing scm::EvTcpConnected in state Connect
2015-04-14 Tue 17:26:49:476.207 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Connect : EvTcpConnected : Cancelling Connect timer
2015-04-14 Tue 17:26:49:476.286 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: ClientInit
2015-04-14 Tue 17:26:49:476.369 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Sending Ctrl Message for localhost:SandeshUVEAlarmTest-Client:0:Test
count 1
2015-04-14 Tue 17:26:49:476.617 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Processing scm::EvSandeshSend in state ClientInit
2015-04-14 Tue 17:26:49:476.691 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: ClientInit : EvSandeshSend : SandeshModuleClientTrace
2015-04-14 Tue 17:26:49:476.734 PDT ubuntu-build04 [Thread 140071566153472,
Pid 5403]: Received UVE message in wrong state : SandeshModuleClientTrace
2015-04-14 Tue 17:26:49:483.062 PDT ubuntu-build04 [Thread 140071461193472,
Pid 5403]: OnMessage control in state: ClientInit
2015-04-14 Tue 17:26:49:483.271 PDT ubuntu-build04 [Thread 140071461193472,
Pid 5403]: Processing scm::EvSandeshMessageRecv in state ClientInit
2015-04-14 Tue 17:26:49:483.572 PDT ubuntu-build04 [Thread 140071461193472,
Pid 5403]: ClientInit : EvSandeshMessageRecv
2015-04-14 Tue 17:26:49:483.881 PDT ubuntu-build04 [Thread 140071461193472,
Pid 5403]: Received Ctrl Message with size 0
2015-04-14 Tue 17:26:49:484.023 PDT ubuntu-build04 [Thread 140071461193472,
Pid 5403]: SyncUVE Syncing val name =
localhost:Test:SandeshUVEAlarmTest-Client:0 client_info= [ status = ClientInit
successful_connections = 1 pid = 5403 http_port = 60366 start_time =
1429057609454700 collector_name = primary = 10.84.13.23:8086 secondary =
0.0.0.0:0 rx_socket_stats= [ bytes = 0 calls = 0 average_bytes = 0
blocked_duration = blocked_count = 0 average_blocked_duration = errors = 0 ]
tx_socket_stats= [ bytes = 0 calls = 0 average_bytes = 0 blocked_duration =
00:00:00 blocked_count = 0 average_blocked_duration = errors = 0 ] ] seq 5
2015-04-14 Tue 17:26:49:484.111 PDT ubuntu-build04 [Thread 140071461193472,
Pid 5403]: SyncAllMaps for ModuleClientState without seqno , total = 1
2015-04-14 Tue 17:26:49:484.156 PDT ubuntu-build04 [Thread 140071461193472,
Pid 5403]: SyncAllMaps for SandeshAlarmData without seqno , total = 0
2015-04-14 Tue 17:26:49:484.191 PDT ubuntu-build04 [Thread 140071461193472,
Pid 5403]: SyncAllMaps for SandeshUVEData without seqno , total = 0
2015-04-14 Tue 17:26:49:484.290 PDT ubuntu-build04 [Thread 140071461193472,
Pid 5403]: Established
2015-04-14 Tue 17:26:49:484.754 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SyncUVE Syncing val name =
localhost:Test:SandeshUVEAlarmTest-Client:0 client_info= [ status =
Established successful_connections = 1 pid = 5403 http_port = 60366 start_time
= 1429057609454700 collector_name = a6s23 primary = 10.84.13.23:8086 secondary
= 0.0.0.0:0 rx_socket_stats= [ bytes = 977 calls = 1 average_bytes = 977
blocked_duration = blocked_count = 0 average_blocked_duration = errors = 0 ]
tx_socket_stats= [ bytes = 1476 calls = 1 average_bytes = 1476
blocked_duration = 00:00:00 blocked_count = 0 average_blocked_duration =
errors = 0 ] ] seq 6
2015-04-14 Tue 17:26:49:484.974 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SyncAllMaps for ModuleClientState without seqno , total = 1
2015-04-14 Tue 17:26:49:485.089 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SyncUVE Syncing val name = alarm1 description = alarm1 generated
acknowledged = 1 seq 2
2015-04-14 Tue 17:26:49:485.202 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SyncUVE Syncing val name = alarm2 seq 5
2015-04-14 Tue 17:26:49:485.302 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SyncAllMaps for SandeshAlarmData without seqno , total = 2
2015-04-14 Tue 17:26:49:485.368 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SyncUVE Syncing val name = uve1 x = 55 seq 2
2015-04-14 Tue 17:26:49:485.433 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SyncUVE Syncing val name = uve2 seq 5
2015-04-14 Tue 17:26:49:485.496 PDT ubuntu-build04 [Thread 140071693285312,
Pid 5403]: SyncAllMaps for SandeshUVEData without seqno , total = 2
As you can see the state did become Established.
Thanks
Megh
On Apr 14, 2015, at 8:50 AM, <[email protected]> <[email protected]> wrote:
> Hi,
>
> I have established 2 loops after connectToCollector. One that waits the sm to
> change to state 2 (Connected) and one that waits for state 4 (Established).
> Just after connectToCollector the status is 0. Then, eventually, it changes
> to 1 (Disconnected). Then to 2 and stays there.
>
> An extract of log:
> ...
> ]: Processing scm::EvStart in state Idle
> 2015-04-14 Tue 17:42:50:824.700 CEST Mahalanobis [Thread 140712661264128,
> Pid 29117]: Disconnect
> Current STATUS: 0
> Current STATUS: 1
> ...
> Current STATUS: 1
> Handshake done (State 2)
> 2015-04-14 Tue 17:42:50:825.216 CEST Mahalanobis [Thread 140712661264128,
> Pid 29117]: Connect : Start Connect timer 192.168.100.10:8086
> 2015-04-14 Tue 17:42:50:825.346 CEST Mahalanobis [Thread 140712661264128,
> Pid 29117]: Processing scm::EvSandeshSend in state Connect
> 2015-04-14 Tue 17:42:50:825.367 CEST Mahalanobis [Thread 140712661264128,
> Pid 29117]: Wrong state: Connect for event: EvSandeshSend
> 2015-04-14 Tue 17:42:50:825.391 CEST Mahalanobis [Thread 140712661264128,
> Pid 29117]: Processing scm::EvSandeshSend in state Connect
> 2015-04-14 Tue 17:42:50:825.408 CEST Mahalanobis [Thread 140712661264128,
> Pid 29117]: Wrong state: Connect for event: EvSandeshSend
> 2015-04-14 Tue 17:42:50:825.430 CEST Mahalanobis [Thread 140712661264128,
> Pid 29117]: Processing scm::EvSandeshSend in state Connect
> 2015-04-14 Tue 17:42:50:825.448 CEST Mahalanobis [Thread 140712661264128,
> Pid 29117]: Wrong state: Connect for event: EvSandeshSend
> ...
> Waiting to the connection to be ESTABLISHED. Current status: 2
> Waiting to the connection to be ESTABLISHED. Current status: 2
> ... (and keeps looping)
>
> It seems to be sending message in the connect to collector part. It doesn't
> reach the sendUVE because I set a loop that waits for state to be ESTABLISHED.
>
> Any guess? There may be something that I'm not doing good. "Wrong state:
> Connect for event: EvSandeshSend" is quite suspicious.
>
> Best regards,
> Alberto.
>
> Quoting Megh Bhatt <[email protected]>:
>
>> Hi Alberto,
>> Please see inline ...
>>
>> On Apr 13, 2015, at 2:03 PM, <[email protected]> <[email protected]>
>> wrote:
>>
>>> Hi Megh,
>>>
>>> Thank you for the reply. I already went thru client_sm module but didn't
>>> get any clue about when does the state change, thanks.
>>>
>>> You are correct, TASK_UTIL_EXPECT_TRUE is just a conditional print. I tried
>>> to make a loop with that condition (negated) but it seems to stay forever
>>> there, so there must be something failing.
>> [Megh]: Are you saying even having loop with usleep() the condition is not
>> met?
>>>
>>> I explored the traffic using tshark and I found that there was a handshake
>>> on the ConnectToCollector, but at SandeshUVETest::Send(uve_data1) there is
>>> no message because client state machine is not in the correct state.
>>>
>>> Any clue about this?
>> [Megh]: The data will be dropped till the state moves to ESTABLISHED.
>>
>> Thanks
>>
>> Megh
>>
>>>
>>> Thank you once more for your support,
>>> Alberto.
>>>
>>> Quoting Megh Bhatt <[email protected]>:
>>>
>>>> Hi Alberto,
>>>> Sorry for the delay. Please see inline ...
>>>>
>>>> On Apr 13, 2015, at 3:14 AM, <[email protected]> <[email protected]>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I got the following code modifying the test suite available in the
>>>>> Sandesh C++ library folder:
>>>>>
>>>>> int port = 8086;
>>>>> ASSERT_LT(0, port);
>>>>> std::cout << "Initializing Generator" << std::endl;
>>>>> Sandesh::InitGenerator("SandeshUVEAlarmTest-Client", "192.168.100.1",
>>>>> "Test", "0", evm_.get(), 0, NULL);
>>>>> std::cout << "Connecting to collector" << std::endl;
>>>>> Sandesh::ConnectToCollector("192.168.100.10", port);
>>>>> std::cout << "Handshake done" << std::endl;
>>>>> TASK_UTIL_EXPECT_TRUE(Sandesh::client()->state() ==
>>>>> SandeshClientSM::ESTABLISHED);
>>>> [Megh]: This should make sure that the client status is ESTABLISHED before
>>>> sending the message below.
>>>>> std::cout << "Connection to collector should be established" <<
>>>>> std::endl;
>>>>> // add uve
>>>>> // case 0
>>>>> SandeshUVEData uve_data1;
>>>>> uve_data1.set_name("uve1");
>>>>> SandeshUVETest::Send(uve_data1);
>>>>>
>>>>> Here I disabled the sever initialization step as I want to use a real
>>>>> collector node (192.168.100.10). The execution is sent from IP
>>>>> 192.168.100.1.
>>>>>
>>>>> However, when evaluating the client status it's not
>>>>> SandeshClientSM::ESTABLISHED, it's in fact status 2, which is CONNECT. So
>>>>> it seems to be a step missing.
>>>>>
>>>>> On the connector log I get the following output for the execution:
>>>>> 2015-04-13 Mon 10:05:02:264.921 UTC contrail [Thread 140679780972416,
>>>>> Pid 1975]: Session 192.168.100.10:8086::192.168.100.1:54945(15)< Accepted
>>>>> session from 192.168.100.1:54945
>>>>>
>>>>> 2015-04-13 Mon 10:05:21:736.472 UTC contrail [Thread 140679780972416,
>>>>> Pid 1975]: Session 192.168.100.10:8086::192.168.100.1:54945(15)< Read
>>>>> failed due to error 2 : End of file
>>>>>
>>>>> On the application I get the following:
>>>>> 2015-04-13 Mon 12:11:17:354.925 CEST Mahalanobis [Thread
>>>>> 140662758741952, Pid 5233]: primary 192.168.100.10:8086
>>>>> 2015-04-13 Mon 12:11:17:354.945 CEST Mahalanobis [Thread
>>>>> 140662758741952, Pid 5233]: secondary 0.0.0.0:0
>>>>> Handshake done
>>>>> 2015-04-13 Mon 12:11:17:355.309 CEST Mahalanobis [Thread
>>>>> 140662631671552, Pid 5233]: Processing scm::EvStart in state Idle
>>>>> 2015-04-13 Mon 12:11:17:355.415 CEST Mahalanobis [Thread
>>>>> 140662631671552, Pid 5233]: Disconnect
>>>>> 2015-04-13 Mon 12:11:17:355.566 CEST Mahalanobis [Thread
>>>>> 140662631671552, Pid 5233]: Processing scm::EvDiscUpdate in state
>>>>> Disconnect
>>>>> 2015-04-13 Mon 12:11:17:355.850 CEST Mahalanobis [Thread
>>>>> 140662631671552, Pid 5233]: Connect : Start Connect timer
>>>>> 192.168.100.10:8086
>>>> [Megh]: From the logs it does not seem that the state machine has moved to
>>>> ESTABLISHED. Your code should have failed when checking for the state
>>>> above.
>>>>> 2015-04-13 Mon 12:11:17:355.984 CEST Mahalanobis [Thread
>>>>> 140662631671552, Pid 5233]: Processing scm::EvSandeshSend in state Connect
>>>>> 2015-04-13 Mon 12:11:17:356.012 CEST Mahalanobis [Thread
>>>>> 140662631671552, Pid 5233]: Wrong state: Connect for event: EvSandeshSend
>>>>> 2015-04-13 Mon 12:11:17:356.043 CEST Mahalanobis [Thread
>>>>> 140662631671552, Pid 5233]: Processing scm::EvSandeshSend in state Connect
>>>>> 2015-04-13 Mon 12:11:17:356.065 CEST Mahalanobis [Thread
>>>>> 140662631671552, Pid 5233]: Wrong state: Connect for event: EvSandeshSend
>>>>> 2015-04-13 Mon 12:11:17:356.093 CEST Mahalanobis [Thread
>>>>> 140662631671552, Pid 5233]: Processing scm::EvSandeshSend in state Connect
>>>>> 2015-04-13 Mon 12:11:17:356.116 CEST Mahalanobis [Thread
>>>>> 140662631671552, Pid 5233]: Wrong state: Connect for event: EvSandeshSend
>>>>>
>>>>>
>>>>>
>>>>> So, it seems to connects correctly but fails sending the UVE.
>>>>>
>>>>>
>>>>>
>>>>> Could anyone help me with this? Pointers to documentation would be really
>>>>> valuable.
>>>> My guess is that the TASK_UTIL_EXPECT_TRUE code is not waiting enough. Can
>>>> you please check?
>>>>
>>>> The client state machine after connecting to the collector, sends a
>>>> control message to move to ClientInit state, and after that on receipt of
>>>> the reply from the collector moves to established. You can look at the
>>>> code in sandesh_client_sm.cc for details.
>>>> https://github.com/Juniper/contrail-sandesh/blob/master/library/cpp/sandesh_client_sm.cc
>>>>
>>>> Thanks
>>>>
>>>> Megh
>>>>>
>>>>> Best regards,
>>>>> Alberto.
>>>>>
>>>>> Quoting [email protected]:
>>>>>
>>>>>> Hi Megh,
>>>>>>
>>>>>> Thanks for your help. With that I think I got the compilation at hand.
>>>>>>
>>>>>> Now I'm trying to do a small application to send one message and die.
>>>>>>
>>>>>> I defined the following toy sandesh for testing:
>>>>>> struct UveVirtualNetworkAgent {
>>>>>> 1: string name(key="ObjectVNTable")
>>>>>> 2: optional i32 cpu
>>>>>> }
>>>>>>
>>>>>> uve sandesh UveVirtualNetworkAgentTrace {
>>>>>> 1: UveVirtualNetworkAgent data;
>>>>>> }
>>>>>>
>>>>>> Then I did the following code:
>>>>>> int main() {
>>>>>> Sandesh::InitGenerator()
>>>>>>
>>>>>> UveVirtualNetworkAgent a;
>>>>>> a.set_name("TestUnit");
>>>>>> a.set_cpu(100);
>>>>>> UveVirtualNetworkAgentTrace::Send(a);
>>>>>> }
>>>>>>
>>>>>> However I don't know which of the 2 InitGenerator functions from the
>>>>>> Sandesh module should I use and what is the meaning of each parameter.
>>>>>>
>>>>>> static bool InitGenerator(const std::string &module,
>>>>>> const std::string &source,
>>>>>> const std::string &node_type,
>>>>>> const std::string &instance_id,
>>>>>> EventManager *evm,
>>>>>> unsigned short http_port,
>>>>>> CollectorSubFn csf,
>>>>>> const std::vector<std::string> &collectors,
>>>>>> SandeshContext *client_context = NULL);
>>>>>>
>>>>>> static void InitGenerator(const std::string &module,
>>>>>> const std::string &source,
>>>>>> const std::string &node_type,
>>>>>> const std::string &instance_id,
>>>>>> EventManager *evm,
>>>>>> unsigned short http_port,
>>>>>> SandeshContext *client_context = NULL);
>>>>>>
>>>>>> Is there any source where it explains this part? I haven't found it yet.
>>>>>>
>>>>>> And one more question: Does setting name(key="ObjectVNTable") to
>>>>>> "TestUnit" create a new table in the database that I could query using
>>>>>> de API of the analytics module?
>>>>>>
>>>>>> Thank you for the support.
>>>>>>
>>>>>> Best regards,
>>>>>> Alberto.
>>>>>>
>>>>>> Quoting Megh Bhatt <[email protected]>:
>>>>>>
>>>>>>> Hi Alberto,
>>>>>>> Please see inline ....
>>>>>>>
>>>>>>> On Apr 8, 2015, at 1:54 AM,
>>>>>>> [email protected]<mailto:[email protected]> wrote:
>>>>>>>
>>>>>>> Dear all,
>>>>>>>
>>>>>>> I'm trying to create a new message to send with Sandesh protocol,
>>>>>>> however I don't know how to compile the generated code.
>>>>>>>
>>>>>>> Just a high level overview which you might already know. The sandesh
>>>>>>> compiler/code generator will be present in build/bin/sandesh after you
>>>>>>> execute scons at the top level. The source code for same is at This is
>>>>>>> used to generate the python/C++ code based on the .sandesh file. The
>>>>>>> generated code - .py files for python and .cpp files for C++ need to be
>>>>>>> used with the pysandesh package for python and libsandesh for C++ in
>>>>>>> client applications to send Sandesh messages to the contrail collector.
>>>>>>>
>>>>>>> Are you using C++ or python?
>>>>>>>
>>>>>>> We intend to use this messaging for testing purposes (at the moment) by
>>>>>>> means of an extra application which will send Sandesh messages each
>>>>>>> second.
>>>>>>>
>>>>>>>
>>>>>>> I have found the following explaination for the compilation with Scons:
>>>>>>> --------
>>>>>>> To use Sandesh, the following needs to be added to the module
>>>>>>> SConscript:
>>>>>>> /
>>>>>>> # Generate the source files
>>>>>>> SandeshGenFiles = env.SandeshGenCpp('VNS.sandesh')
>>>>>>> SandeshGenFiles += env.SandeshGenCpp('VNSwitch.sandesh')
>>>>>>>
>>>>>>> # The above returns VNS_types.h, VNS_types.cpp, VNS_constants.h
>>>>>>> # VNS_constants.cpp, VNSwitch_types.h, VNSwitch_types.cpp,
>>>>>>> # VNSwitch_constants.h, VNSwitch_constants.cpp
>>>>>>>
>>>>>>> # To include the header files above from your module's sources
>>>>>>> env.Append(CPPPATH = env['TOP'])
>>>>>>>
>>>>>>> # Extract the .cpp files to be used as sources
>>>>>>> SandeshGenSrcs = env.ExtractCpp(SandeshGenFiles)
>>>>>>>
>>>>>>> Add SandeshGenSrcs to the module source files
>>>>>>>
>>>>>>> Add libsandesh, and libbase to the module libraries.
>>>>>>> --------
>>>>>>>
>>>>>>> However I don't really get what's going on (I'm new to Scons).
>>>>>>>
>>>>>>> The SandeshGenCpp function/ scons builder is defined in
>>>>>>> tools/build/rules.py - https://github.com/Juniper/contrail-build
>>>>>>>
>>>>>>> Below is a relevant snippet ...
>>>>>>>
>>>>>>>
>>>>>>> # SandeshGenCpp Methods
>>>>>>> def SandeshCppBuilder(target, source, env):
>>>>>>> opath = target[0].dir.path
>>>>>>> sname = os.path.join(opath, os.path.splitext(source[0].name)[0])
>>>>>>>
>>>>>>> code = subprocess.call(env['SANDESH'] + ' --gen cpp --gen html -I
>>>>>>> controller/src/ -I tools -out '
>>>>>>> + opath + " " + source[0].path, shell=True)
>>>>>>> if code != 0:
>>>>>>> raise SCons.Errors.StopError(SandeshCodeGeneratorError,
>>>>>>> 'SandeshCpp code generation failed')
>>>>>>> tname = sname + "_html_template.cpp"
>>>>>>> hname = os.path.basename(sname + ".xml")
>>>>>>> cname = sname + "_html.cpp"
>>>>>>> if not env.Detect('xxd'):
>>>>>>> raise SCons.Errors.StopError(SandeshCodeGeneratorError,
>>>>>>> 'xxd not detected on system')
>>>>>>> os.system("echo \"namespace {\"" + " >> " + cname)
>>>>>>> os.system("(cd " + opath + " ; xxd -i " + hname + " >> " +
>>>>>>> os.path.basename(cname) + " )")
>>>>>>> os.system("echo \"}\"" + " >> " + cname)
>>>>>>> os.system("cat " + tname + " >> " + cname)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> As you can see, it runs build/bin/sandesh --gen cpp --gen html <other
>>>>>>> options> <.sandesh file> to produce the .cpp, .h files which then need
>>>>>>> to be compiled in the client application.
>>>>>>>
>>>>>>>
>>>>>>> I tried to copy the SConscript of the control module and adapt it but
>>>>>>> without results.
>>>>>>>
>>>>>>> Can anyone help me?
>>>>>>>
>>>>>>> Hope the above helps and please let me know if any more information is
>>>>>>> needed.
>>>>>>>
>>>>>>> Thanks
>>>>>>>
>>>>>>> Megh
>>>>>>>
>>>>>>>
>>>>>>> Best Regards,
>>>>>>> Alberto.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Dev mailing list
>>>>>>> [email protected]<mailto:[email protected]>
>>>>>>> http://lists.opencontrail.org/mailman/listinfo/dev_lists.opencontrail.org
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>
_______________________________________________
Dev mailing list
[email protected]
http://lists.opencontrail.org/mailman/listinfo/dev_lists.opencontrail.org