root/opal/mca/pmix/pmix4x/pmix/test/test_replace.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. release_cb
  2. get_cb
  3. key_is_replace
  4. test_replace

   1 /*
   2  * Copyright (c) 2017      Mellanox Technologies, Inc.
   3  *                         All rights reserved.
   4  * $COPYRIGHT$
   5  *
   6  * Additional copyrights may follow
   7  *
   8  * $HEADER$
   9  *
  10  */
  11 
  12 #include "test_replace.h"
  13 
  14 static void release_cb(pmix_status_t status, void *cbdata)
  15 {
  16     int *ptr = (int*)cbdata;
  17     *ptr = 0;
  18 }
  19 
  20 static void get_cb(pmix_status_t status, pmix_value_t *kv, void *cbdata)
  21 {
  22     get_cbdata *cb = (get_cbdata*)cbdata;
  23     if (PMIX_SUCCESS == status) {
  24         pmix_value_xfer(cb->kv, kv);
  25     }
  26     cb->in_progress = 0;
  27     cb->status = status;
  28 }
  29 
  30 static int key_is_replace(int key_idx) {
  31     key_replace_t *item;
  32 
  33     PMIX_LIST_FOREACH(item, &key_replace, key_replace_t) {
  34         if (item->key_idx == key_idx)
  35             return 1;
  36     }
  37     return 0;
  38 }
  39 
  40 int test_replace(char *my_nspace, pmix_rank_t my_rank, test_params params) {
  41     int key_idx = 0;
  42     int key_cnt = 0;
  43     char sval[PMIX_MAX_NSLEN];
  44     pmix_proc_t proc;
  45     pmix_status_t rc;
  46     key_replace_t *item;
  47 
  48     PMIX_CONSTRUCT(&key_replace, pmix_list_t);
  49     parse_replace(params.key_replace, 1, &key_cnt);
  50 
  51     for (key_idx = 0; key_idx < key_cnt; key_idx++) {
  52         memset(sval, 0, PMIX_MAX_NSLEN);
  53         sprintf(sval, "test_replace:%s:%d:%d", my_nspace, my_rank, key_idx);
  54 
  55         PUT(string, sval, PMIX_GLOBAL, 0, key_idx, 1);
  56         if (PMIX_SUCCESS != rc) {
  57             TEST_ERROR(("%s:%d: PMIx_Put failed: %d", my_nspace, my_rank, rc));
  58             PMIX_LIST_DESTRUCT(&key_replace);
  59             return rc;
  60         }
  61     }
  62 
  63     PMIX_PROC_CONSTRUCT(&proc);
  64     (void)strncpy(proc.nspace, my_nspace, PMIX_MAX_NSLEN);
  65     proc.rank = PMIX_RANK_WILDCARD;
  66 
  67     /* Submit the data */
  68     if (PMIX_SUCCESS != (rc = PMIx_Commit())) {
  69         TEST_ERROR(("%s:%d: PMIx_Commit failed: %d", my_nspace, my_rank, rc));
  70         PMIX_LIST_DESTRUCT(&key_replace);
  71         PMIX_PROC_DESTRUCT(&proc);
  72         return PMIX_ERROR;
  73     }
  74 
  75     FENCE(1, 1, (&proc), 1);
  76     if (PMIX_SUCCESS != rc) {
  77         TEST_ERROR(("%s:%d: PMIx_Fence failed: %d", my_nspace, my_rank, rc));
  78         PMIX_LIST_DESTRUCT(&key_replace);
  79         PMIX_PROC_DESTRUCT(&proc);
  80         return rc;
  81     }
  82 
  83     PMIX_LIST_FOREACH(item, &key_replace, key_replace_t) {
  84         memset(sval, 0, PMIX_MAX_NSLEN);
  85         sprintf(sval, "test_replace:%s:%d:%d: replaced key", my_nspace, my_rank, item->key_idx);
  86 
  87         PUT(string, sval, PMIX_GLOBAL, 0, item->key_idx, 1);
  88         if (PMIX_SUCCESS != rc) {
  89             TEST_ERROR(("%s:%d: PMIx_Put failed: %d", my_nspace, my_rank, rc));
  90             PMIX_LIST_DESTRUCT(&key_replace);
  91             PMIX_PROC_DESTRUCT(&proc);
  92             return rc;
  93         }
  94     }
  95 
  96 
  97     /* Submit the data */
  98     if (PMIX_SUCCESS != (rc = PMIx_Commit())) {
  99         TEST_ERROR(("%s:%d: PMIx_Commit failed: %d", my_nspace, my_rank, rc));
 100         PMIX_LIST_DESTRUCT(&key_replace);
 101         PMIX_PROC_DESTRUCT(&proc);
 102         return PMIX_ERROR;
 103     }
 104 
 105     FENCE(1, 1, (&proc), 1);
 106     if (PMIX_SUCCESS != rc) {
 107         TEST_ERROR(("%s:%d: PMIx_Fence failed: %d", my_nspace, my_rank, rc));
 108         PMIX_LIST_DESTRUCT(&key_replace);
 109         PMIX_PROC_DESTRUCT(&proc);
 110         return rc;
 111     }
 112 
 113     for (key_idx = 0; key_idx < key_cnt; key_idx++) {
 114         memset(sval, 0, PMIX_MAX_NSLEN);
 115 
 116         if (key_is_replace(key_idx)) {
 117             sprintf(sval, "test_replace:%s:%d:%d: replaced key", my_nspace, my_rank, key_idx);
 118         } else {
 119             sprintf(sval, "test_replace:%s:%d:%d", my_nspace, my_rank, key_idx);
 120         }
 121 
 122 
 123         GET(string, sval, my_nspace, my_rank, 0, key_idx, 1, 1, 0);
 124         if (PMIX_SUCCESS != rc) {
 125             TEST_ERROR(("%s:%d: PMIx_Get of remote key on local proc", my_nspace, my_rank));
 126             PMIX_LIST_DESTRUCT(&key_replace);
 127             PMIX_PROC_DESTRUCT(&proc);
 128             return PMIX_ERROR;
 129         }
 130     }
 131 
 132     PMIX_LIST_DESTRUCT(&key_replace);
 133     PMIX_PROC_DESTRUCT(&proc);
 134     return PMIX_SUCCESS;
 135 }

/* [<][>][^][v][top][bottom][index][help] */