Regions

Functions

static perr_t pdc_region_close(struct pdc_region_info *op)
static perr_t pdc_transfer_request_close()
perr_t PDC_region_init()

PDC region initialization.

Returns:

Non-negative on success/Negative on failure

perr_t PDC_transfer_request_init()

PDC region transfer instance initialization.

Returns:

Non-negative on success/Negative on failure

perr_t PDC_region_list_null()

Check if region list is empty.

Returns:

SUCCEED if empty/FAIL if not empty

perr_t PDCregion_close(pdcid_t region_id)

Close a region.

Parameters:

region_id – [IN] ID of the object

Returns:

Non-negative on success/Negative on failure

perr_t PDC_region_end()

PDC region finalize.

Returns:

Non-negative on success/Negative on failure

pdcid_t PDCregion_create(psize_t ndims, uint64_t *offset, uint64_t *size)

Create a region.

Parameters:
  • ndims – [IN] Number of dimensions

  • offset – [IN] Offset of each dimension

  • size – [IN] Size of each dimension

Returns:

Object id on success/Zero on failure

perr_t PDCbuf_obj_map(void *buf, pdc_var_type_t local_type, pdcid_t local_reg, pdcid_t remote_obj, pdcid_t remote_reg)

Map an application buffer to an object.

Parameters:
  • buf – [IN] Start point of an application buffer

  • local_type – [IN] Data type of data in memory

  • local_reg – [IN] ID of the source region

  • remote_obj – [IN] ID of the target object

  • remote_reg – [IN] ID of the target region

Returns:

Non-negative on success/Negative on failure

struct pdc_region_info *PDCregion_get_info(pdcid_t reg_id)

Get region information.

Parameters:
  • reg_id – [IN] ID of the region

  • obj_id – [IN] ID of the object

Returns:

Pointer to pdc_region_info struct on success/Null on failure

perr_t PDCbuf_obj_unmap(pdcid_t remote_obj_id, pdcid_t remote_reg_id)

Unmap all regions within the object from a buffer (write unmap)

Parameters:
  • remote_obj_id – [IN] ID of the target object

  • remote_reg_id – [IN] ID of the target region

Returns:

Non-negative on success/Negative on failure

perr_t PDCreg_obtain_lock(pdcid_t obj_id, pdcid_t reg_id, pdc_access_t access_type, pdc_lock_mode_t lock_mode)

Obtain the region lock.

Parameters:
  • obj_id – [IN] ID of the object

  • reg_id – [IN] ID of the region

  • access_type – [IN] Region access type: READ or WRITE

  • lock_mode – [IN] Lock mode of the region: BLOCK or NOBLOCK

Returns:

Non-negative on success/Negative on failure

perr_t PDCreg_release_lock(pdcid_t obj_id, pdcid_t reg_id, pdc_access_t access_type)

Release the region lock.

Parameters:
  • obj_id – [IN] ID of the object

  • reg_id – [IN] ID of the region

  • access_type – [IN] Region access type

Returns:

Non-negative on success/Negative on failure

Typedefs

typedef struct pdc_transfer_request pdc_transfer_request
typedef struct pdc_transfer_request_start_all_pkg pdc_transfer_request_start_all_pkg
typedef struct pdc_transfer_request_wait_all_pkg pdc_transfer_request_wait_all_pkg

Functions

static int sort_by_data_server_start_all(const void *elem1, const void *elem2)
static int sort_by_metadata_server_start_all(const void *elem1, const void *elem2)
static int sort_by_data_server_wait_all(const void *elem1, const void *elem2)
pdcid_t PDCregion_transfer_create(void *buf, pdc_access_t access_type, pdcid_t obj_id, pdcid_t local_reg, pdcid_t remote_reg)
perr_t PDCregion_transfer_close(pdcid_t transfer_request_id)
static perr_t attach_local_transfer_request(struct _pdc_obj_info *p, pdcid_t transfer_request_id)
static perr_t remove_local_transfer_request(struct _pdc_obj_info *p, pdcid_t transfer_request_id)
static perr_t static_region_partition(char *buf, int ndim, uint64_t unit, pdc_access_t access_type, uint64_t *obj_dims, uint64_t *offset, uint64_t *size, int set_output_buf, int *n_data_servers, uint32_t **data_server_ids, uint64_t ***sub_offsets, uint64_t ***output_offsets, uint64_t ***output_sizes, char ***output_buf)
static perr_t pack_region_buffer(char *buf, uint64_t *obj_dims, size_t total_data_size, int local_ndim, uint64_t *local_offset, uint64_t *local_size, size_t unit, pdc_access_t access_type, char **new_buf)
static perr_t set_obj_server_bufs(pdc_transfer_request *transfer_request)
static perr_t pack_region_metadata_query(pdc_transfer_request_start_all_pkg **transfer_request, int size, char **buf_ptr, uint64_t *total_buf_size_ptr)
static perr_t unpack_region_metadata_query(char *buf, pdc_transfer_request_start_all_pkg **transfer_request_input, pdc_transfer_request_start_all_pkg **transfer_request_head_ptr, pdc_transfer_request_start_all_pkg **transfer_request_end_ptr, int *size_ptr)
static perr_t register_metadata(pdc_transfer_request_start_all_pkg **transfer_request_input, int input_size, uint8_t is_write, pdc_transfer_request_start_all_pkg ***transfer_request_output_ptr, int *output_size_ptr)
static int prepare_start_all_requests(pdcid_t *transfer_request_id, int size, pdc_transfer_request_start_all_pkg ***write_transfer_request_ptr, pdc_transfer_request_start_all_pkg ***read_transfer_request_ptr, int *write_size_ptr, int *read_size_ptr, pdcid_t **posix_transfer_request_id_ptr, int *posix_size_ptr)

This function prepares lists of read and write requests separately for start_all function.

The lists are sorted in terms of data_server_id. We pack data from user buffer to contiguous buffers. Static partitioning requires having at most n_data_servers number of contiguous regions.

static int finish_start_all_requests(pdc_transfer_request_start_all_pkg **write_transfer_request, pdc_transfer_request_start_all_pkg **read_transfer_request, int write_size, int read_size)
static perr_t PDC_Client_pack_all_requests(int n_objs, pdc_transfer_request_start_all_pkg **transfer_requests, pdc_access_t access_type, char **bulk_buf_ptr, size_t *total_buf_size_ptr, char **read_bulk_buf)
static perr_t PDC_Client_start_all_requests(pdc_transfer_request_start_all_pkg **transfer_requests, int size)
perr_t PDCregion_transfer_start_all(pdcid_t *transfer_request_id, int size)
static int sorted_array_unions(const int **array, const int *input_size, int n_arrays, int **out_array, int *out_size)

Input: Sorted arrays Output: A single array that is sorted, and the union of sorted arrays.

perr_t PDCregion_transfer_start(pdcid_t transfer_request_id)

Start a region transfer from local region to remote region for an object on buf.

Parameters:
  • buf – [IN] Start point of an application buffer

  • obj_id – [IN] ID of the target object

  • data_type – [IN] Data type of data in memory

  • local_reg – [IN] ID of the source region

  • remote_reg – [IN] ID of the target region

Returns:

Non-negative on success/Negative on failure

static perr_t release_region_buffer(char *buf, uint64_t *obj_dims, int local_ndim, uint64_t *local_offset, uint64_t *local_size, size_t unit, pdc_access_t access_type, int bulk_buf_size, char *new_buf, char **bulk_buf, int **bulk_buf_ref, char **read_bulk_buf)
perr_t PDCregion_transfer_status(pdcid_t transfer_request_id, pdc_transfer_status_t *completed)
perr_t PDCregion_transfer_wait_all(pdcid_t *transfer_request_id, int size)
perr_t PDCregion_transfer_wait(pdcid_t transfer_request_id)
struct pdc_transfer_request

Public Members

pdcid_t obj_id
uint32_t data_server_id
uint32_t metadata_server_id
uint64_t *metadata_id
pdc_access_t access_type
pdc_var_type_t mem_type
size_t unit
char *buf
char **read_bulk_buf
char *new_buf
char **bulk_buf
int **bulk_buf_ref
pdc_region_partition_t region_partition
pdc_consistency_t consistency
int n_obj_servers
uint32_t *obj_servers
uint64_t **output_offsets
uint64_t **sub_offsets
uint64_t **output_sizes
char **output_buf
int local_region_ndim
uint64_t *local_region_offset
uint64_t *local_region_size
int remote_region_ndim
uint64_t *remote_region_offset
uint64_t *remote_region_size
uint64_t total_data_size
int obj_ndim
uint64_t *obj_dims
struct _pdc_obj_info *obj_pointer
struct pdc_transfer_request_start_all_pkg

Public Members

uint32_t data_server_id
pdc_transfer_request *transfer_request
uint64_t *remote_offset
uint64_t *remote_size
int index
char *buf
struct pdc_transfer_request_start_all_pkg *next
struct pdc_transfer_request_wait_all_pkg

Public Members

uint64_t metadata_id
uint32_t data_server_id
int index
pdc_transfer_request *transfer_request
struct pdc_transfer_request_wait_all_pkg *next