@@ -4703,12 +4703,12 @@ HG_TEST_RPC_CB(query_kvtag, handle)
47034703 FUNC_LEAVE (ret_value );
47044704}
47054705
4706+
47064707/*
47074708 * Data server related
47084709 */
47094710
47104711static hg_return_t
4711-
47124712update_storage_meta_bulk_cb (const struct hg_cb_info * hg_cb_info )
47134713{
47144714 hg_return_t ret_value = HG_SUCCESS ;
@@ -6534,6 +6534,86 @@ HG_TEST_RPC_CB(dart_perform_one_server, handle)
65346534 FUNC_LEAVE (ret );
65356535}
65366536
6537+ static hg_return_t
6538+ process_generic_c2s_bulk_transfer_cb (const struct hg_cb_info * hg_cb_info )
6539+ {
6540+ hg_return_t ret_value = HG_SUCCESS ;
6541+ struct bulk_args_t * bulk_args = (struct bulk_args_t * )hg_cb_info -> arg ;
6542+ hg_bulk_t local_bulk_handle = hg_cb_info -> info .bulk .local_handle ;
6543+ void * buf ;
6544+ generic_bulk_c2s_transfer_out_t out ;
6545+
6546+ FUNC_ENTER (NULL );
6547+
6548+ ret_value = HG_Bulk_access (local_bulk_handle , 0 , bulk_args -> nbytes , HG_BULK_READWRITE , 1 , & buf , NULL , NULL );
6549+ if (ret_value != HG_SUCCESS )
6550+ PGOTO_ERROR (ret_value , "Could not access bulk data @ %s:%d" , __func__ , __LINE__ );
6551+
6552+ printf ("==PDC_SERVER: process generic bulk data, size %lu\n" , bulk_args -> nbytes );
6553+ fprintf (stderr , "first 3 values: %d %d %d\n" , ((int * )buf )[0 ], ((int * )buf )[1 ], ((int * )buf )[2 ]);
6554+ fprintf (stderr , "last values: %d %d %d\n" , ((int * )buf )[bulk_args -> nbytes /4 - 3 ],
6555+ ((int * )buf )[bulk_args -> nbytes /4 - 2 ], ((int * )buf )[bulk_args -> nbytes /4 - 1 ]);
6556+
6557+ out .ret = 1 ;
6558+ HG_Respond (bulk_args -> handle , NULL , NULL , & out );
6559+
6560+ done :
6561+ fflush (stdout );
6562+ HG_Bulk_free (local_bulk_handle );
6563+ HG_Destroy (bulk_args -> handle );
6564+ free (bulk_args );
6565+
6566+ FUNC_LEAVE (ret_value );
6567+ }
6568+
6569+ /* static hg_return_t */
6570+ /* generic_bulk_c2s_transfer_cb(hg_handle_t handle) */
6571+ HG_TEST_RPC_CB (generic_bulk_c2s_transfer , handle )
6572+ {
6573+ hg_return_t ret_value = HG_SUCCESS ;
6574+ hg_bulk_t origin_bulk_handle , local_bulk_handle ;
6575+ const struct hg_info * hg_info = NULL ;
6576+ struct bulk_args_t * bulk_args = NULL ;
6577+ generic_bulk_c2s_transfer_in_t in ;
6578+ generic_bulk_c2s_transfer_out_t out ;
6579+ void * buf ;
6580+
6581+ FUNC_ENTER (NULL );
6582+
6583+ /* Get input parameters and data */
6584+ ret_value = HG_Get_input (handle , & in );
6585+ if (ret_value != HG_SUCCESS )
6586+ PGOTO_ERROR (ret_value , "Could not get input @ %s:%d" , __func__ , __LINE__ );
6587+
6588+ bulk_args = (struct bulk_args_t * )malloc (sizeof (struct bulk_args_t ));
6589+ bulk_args -> handle = handle ;
6590+ origin_bulk_handle = in .local_bulk_handle ;
6591+ bulk_args -> nbytes = HG_Bulk_get_size (origin_bulk_handle );
6592+
6593+ buf = malloc (bulk_args -> nbytes );
6594+
6595+ fprintf (stderr , "==PDC_SERVER: %s received nbytes %lu\n" , __func__ , bulk_args -> nbytes );
6596+
6597+ hg_info = HG_Get_info (handle );
6598+ HG_Bulk_create (hg_info -> hg_class , 1 , & buf , & bulk_args -> nbytes , HG_BULK_WRITE_ONLY , & local_bulk_handle );
6599+
6600+ // Data should be processed in process_generic_c2s_bulk_transfer_cb, after sending a reply to the client
6601+ // HG_Bulk_transfer is non-blocking
6602+ ret_value = HG_Bulk_transfer (hg_info -> context , process_generic_c2s_bulk_transfer_cb , bulk_args ,
6603+ HG_BULK_PULL , hg_info -> addr , origin_bulk_handle , 0 ,
6604+ local_bulk_handle , 0 , bulk_args -> nbytes , HG_OP_ID_IGNORE );
6605+ if (ret_value != HG_SUCCESS )
6606+ PGOTO_ERROR (ret_value , "Could not read bulk data" );
6607+
6608+ HG_Free_input (handle , & in );
6609+
6610+ done :
6611+ fflush (stdout );
6612+ /* out.ret = ret_value; */
6613+ /* HG_Respond(handle, NULL, NULL, &out); */
6614+ FUNC_LEAVE (ret_value );
6615+ }
6616+
65376617HG_TEST_THREAD_CB (server_lookup_client )
65386618HG_TEST_THREAD_CB (gen_obj_id )
65396619HG_TEST_THREAD_CB (gen_cont_id )
@@ -6594,6 +6674,7 @@ HG_TEST_THREAD_CB(send_client_storage_meta_rpc)
65946674HG_TEST_THREAD_CB (send_shm_bulk_rpc )
65956675HG_TEST_THREAD_CB (send_data_query_rpc )
65966676HG_TEST_THREAD_CB (send_rpc )
6677+ HG_TEST_THREAD_CB (generic_bulk_c2s_transfer )
65976678
65986679HG_TEST_THREAD_CB (send_nhits )
65996680HG_TEST_THREAD_CB (send_bulk_rpc )
@@ -6639,6 +6720,7 @@ PDC_FUNC_DECLARE_REGISTER_IN_OUT(buf_map_server, buf_map_in_t, buf_map_out_t)
66396720PDC_FUNC_DECLARE_REGISTER_IN_OUT (buf_unmap_server , buf_unmap_in_t , buf_unmap_out_t )
66406721PDC_FUNC_DECLARE_REGISTER (buf_unmap )
66416722PDC_FUNC_DECLARE_REGISTER (region_lock )
6723+ PDC_FUNC_DECLARE_REGISTER (generic_bulk_c2s_transfer )
66426724
66436725PDC_FUNC_DECLARE_REGISTER_IN_OUT (region_release , region_lock_in_t , region_lock_out_t )
66446726PDC_FUNC_DECLARE_REGISTER_IN_OUT (transform_region_release , region_transform_and_lock_in_t , region_lock_out_t )
0 commit comments