erpc-io / eRPC

Efficient RPCs for datacenter networks
https://erpc.io/
Other
835 stars 137 forks source link

Can we re-create the same RPC object with the same Remote id? #41

Closed dgiantsidi closed 4 years ago

dgiantsidi commented 4 years ago

Hi everyone,

When using eRPC + dpdk:

Let's assume a session between two machines (following the hello world example).

If this session is lost or the client-server gets disconnected, it is possible to re-create it using the same Remote ID?

It seems that it is possible to re-create it and re-connect to the server-machine but when an enqueue_operation() is executed, a seg-fault occurs.

Based on gdb-analysis the error lies ''somewhere'' in dpdk code.

0 0x00000000006eb3a4 in common_ring_mc_dequeue ()

1 0x0000000000811d65 in i40e_recv_scattered_pkts ()

2 0x0000000000a2c674 in rte_eth_rx_burst (nb_pkts=32, rx_pkts=0x7fffffffafb0, queue_id=0, port_id=0) at /home/eRPC/dpdk/x86_64-native-linuxapp-gcc/include/rte_ethdev.h:4097

3 erpc::DpdkTransport::rx_burst (this=0xf2c870) at /home/eRPC/src/transport_impl/dpdk/dpdk_transport_datapath.cc:103

Is such an action normally supported by eRPC?

-- Thanks, Dimitra

anujkaliaiitd commented 4 years ago

Unfortunately, support for session disconnection due to server failure or network issues is incomplete. There's quite a bit of code for it (e.g., the handle_reset functions, and server_failure_test.cc), but it doesn't work yet. I'm not sure when I'll get to complete it.

This used to work a long time ago when I relied on an external library called enet for session management. I moved away from enet because I couldn't' configure it to reduce its high CPU use. Funnily, in this case, the price of "saving" CPU cycles turned out to be losing (though not fundamentally) an important feature.

dgiantsidi commented 4 years ago

Okay, I see!

Thanks a lot for your reply!

--Dimitra