Hi, florin i have study jvpp code and found that maybe jvpp is ok, error occurs in vpp svm_queue
jvpp connect vpp by vl_client_connect_to_vlib function (vpp/src/vlibmemory/memory_client.c) int vl_client_connect_to_vlib (const char *svm_name, const char *client_name, int rx_queue_size) { return connect_to_vlib_internal (svm_name, client_name, rx_queue_size, rx_thread_fn, 0 /* thread fn arg */ , 1 /* do map */ ); } jvpp example is jvpp-registry/jvpp_registry.c: if (vl_client_connect_to_vlib(shm_prefix, name, 32) < 0) i change 32 to 4096, now vpp has run three days and not deadlock so i think that whether rx_queue_size parameter is too small, resulting in function error handling I also compare vpp-2101 with vpp-2206 and found that binary api code( svm_queue in queue.c ) is no change If i send a large message that size over rx_queue_size will cause problem ? Looking forward to your opinion Best regards wanghe Florin Coras <fcoras.li...@gmail.com> 于2022年6月3日周五 23:28写道: > Hi Wanghe, > > The only api bindings supported today are c, python and golang. Maybe > somebody familiar with the jvpp code can help you out but otherwise I’d > recommend to switch if possible. > > Regards, > Florin > > > On Jun 3, 2022, at 7:55 AM, NUAA无痕 <nuaawan...@gmail.com> wrote: > > > > Hi, florin > > > > About this question, i compare c++ code with jvpp code, then i found > that jvpp maybe have a bug and even if update vpp also cannot resolve it > > > > jvpp code according to vpp version 1901, that has jvpp example > > > vpp-1901/extras/japi/java/jvpp-core/io/fd/vpp/jvpp/core/examples/CreateSubInterfaceExample.java > has jvpp example and our code according to it > > > > now vpp version is 2101 > > then when java code connected to vpp and then use "close“ function it > will hint "peer unresponsive, give up" > > this error from src/vlibmemory/memory_client.c vl_client_disconnect > function > > > > why this error is that svm_queue_sub always return -2 until timeout > > > > this is code , the reason is that "vl_input_queue->cursize == 0 " and > vl_input_queue->head == vl_input_queue->tail > > > > int > > vl_client_disconnect (void) > > { > > vl_api_memclnt_delete_reply_t *rp; > > svm_queue_t *vl_input_queue; > > api_main_t *am = vlibapi_get_main (); > > time_t begin; > > > > vl_input_queue = am->vl_input_queue; > > vl_client_send_disconnect (0 /* wait for reply */ ); > > > > /* > > * Have to be careful here, in case the client is disconnecting > > * because e.g. the vlib process died, or is unresponsive. > > */ > > begin = time (0); > > while (1) > > { > > time_t now; > > > > now = time (0); > > > > if (now >= (begin + 2)) > > { > > clib_warning ("peer unresponsive, give up"); > > am->my_client_index = ~0; > > am->my_registration = 0; > > am->shmem_hdr = 0; > > return -1; > > } > > > > /* this error because vl_input_queue->cursize == 0 */ > > if (svm_queue_sub (vl_input_queue, (u8 *) & rp, SVM_Q_NOWAIT, 0) < > 0) > > continue; > > > > VL_MSG_API_UNPOISON (rp); > > > > /* drain the queue */ > > if (ntohs (rp->_vl_msg_id) != VL_API_MEMCLNT_DELETE_REPLY) > > { > > clib_warning ("queue drain: %d", ntohs (rp->_vl_msg_id)); > > vl_msg_api_handler ((void *) rp); > > continue; > > } > > vl_msg_api_handler ((void *) rp); > > break; > > } > > > > vl_api_name_and_crc_free (); > > return 0; > > } > > > > when i use c++ for vpp binary api, vl_input_queue->cursize == 1 and > vl_input_queue->head != vl_input_queue->tail > > > > so c++ use binary api is correct that about svm_queue_* series functions > > > > Although JVpp is no longer supported, but this is important for me! > > > > Can you give a patch for jvpp? Thanks > > > > Best regards > > > > Wanghe > > > > > >
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#21507): https://lists.fd.io/g/vpp-dev/message/21507 Mute This Topic: https://lists.fd.io/mt/91372330/21656 Group Owner: vpp-dev+ow...@lists.fd.io Unsubscribe: https://lists.fd.io/g/vpp-dev/leave/1480452/21656/631435203/xyzzy [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-