pmdk icon indicating copy to clipboard operation
pmdk copied to clipboard

librpmem: cannot create remote pool with SINGLEHDR option enabled

Open kkajrewicz opened this issue 6 years ago • 1 comments

remote pool.set:

PMEMPOOLSET
20M /tmp/rep
OPTION SINGLEHDR

Test:

#include <librpmem.h>
#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main() {
        unsigned lanes = 1;
        void *pool = (void *)aligned_alloc(4096, 20 * 1024 * 1024);
        struct rpmem_pool_attr attr = {"<RPMEM>", /* pool signature */
                                     1, /* format major version number */
                                     1, /* mask: compatible "may" features */
                                     2, /* mask: "must support" features */
                                     3, /* mask: force RO if unsupported */
                                     "POOLSET_UUID012", /* pool uuid */
                                     "UUID0123456789A", /* first part uuid */
                                     "NEXT_UUID012345", /* next pool uuid */
                                     "PREV_UUID012345", /* prev pool uuid */
                                     "USER_FLAGS\0\0\0\0\0"}; /* user flags */

        RPMEMpool *rpp = rpmem_create("192.168.0.182", "pool.set", pool, 10 * 1024 * 1024, &lanes, &attr);
        assert(rpp);
        rpmem_close(rpp);
        return 0;
}

Expected result:

  • rpp != NULL Actual result:
  • rpp == NULL

Logs:

(...)
<librpmem>: <3> [rpmem.c:449 rpmem_create] target 192.168.0.182, pool_set_name pool.set, pool_addr 0x7fda0ccfd000, pool_size 10485760, nlanes 0x7fff9812032c, create_attr 0x7fff981202c0
<librpmem>: <3> [rpmem.c:356 rpmem_log_args] req create, target 192.168.0.182, pool_set_name pool.set, pool_addr 0x7fda0ccfd000, pool_size 10485760, nlanes 1
<librpmem>: <3> [rpmem.c:358 rpmem_log_args] create request:
<librpmem>: <3> [rpmem.c:359 rpmem_log_args]    target: 192.168.0.182
<librpmem>: <3> [rpmem.c:360 rpmem_log_args]    pool set: pool.set
<librpmem>: <4> [rpmem.c:361 rpmem_log_args]    pool addr: 0x7fda0ccfd000
<librpmem>: <4> [rpmem.c:362 rpmem_log_args]    pool size: 10485760
<librpmem>: <3> [rpmem.c:363 rpmem_log_args]    nlanes: 1
<librpmem>: <3> [rpmem.c:389 rpmem_check_args] pool_addr 0x7fda0ccfd000, pool_size 10485760, nlanes 0x7fff9812032c
<librpmem>: <3> [rpmem.c:190 rpmem_common_init] target 192.168.0.182
<librpmem>: <3> [rpmem.c:127 rpmem_get_provider] node 192.168.0.182
<librpmem>: <3> [rpmem.c:98 env_get_bool] name RPMEM_ENABLE_SOCKETS, valp 0x7fff9812019c
<librpmem>: <3> [rpmem.c:98 env_get_bool] name RPMEM_ENABLE_VERBS, valp 0x7fff98120198
<librpmem>: <3> [rpmem.c:213 rpmem_common_init] provider: verbs
<librpmem>: <4> [rpmem.c:227 rpmem_common_init] establishing out-of-band connection
<librpmem>: <4> [rpmem_cmd.c:147 rpmem_cmd_log] executing command 'ssh -T -oBatchMode=yes 192.168.0.182 LD_LIBRARY_PATH=/tmp/remote/dir0/nondebug /tmp/remote/dir0/rpmemd'
<librpmem>: <4> [rpmem_ssh.c:319 rpmem_ssh_open] received status: 0
<librpmem>: <3> [rpmem.c:235 rpmem_common_init] out-of-band connection established
<librpmem>: <4> [rpmem_obc.c:497 rpmem_obc_create] sending create request message
<librpmem>: <3> [rpmem_obc.c:505 rpmem_obc_create] create request message sent
<librpmem>: <4> [rpmem_obc.c:506 rpmem_obc_create] receiving create request response
<librpmem>: <3> [rpmem_obc.c:515 rpmem_obc_create] create request response received
<librpmem>: <1> [rpmem_obc.c:253 rpmem_obc_check_hdr_resp] Invalid pool set configuration
<librpmem>: <1> [rpmem.c:475 rpmem_create] create request failed: Invalid argument
<librpmem>: <3> [rpmem.c:255 rpmem_common_fini] rpp 0x2390980, join 0
test: test.c:24: main: Assertion `rpp' failed
(...)

Test succeeds if single header option is not specified in pool set file:

PMEMPOOLSET
20M /tmp/rep

Found on: 1.4-rc4-424-g42a1427

kkajrewicz avatar May 25 '18 14:05 kkajrewicz

For some reason librpmem.h did have no RPMEM_POOL_FEAT_SINGLEHDR which is required to create remote replica on poolset with SINGLEHDR option.

attr.incompat_features |= RPMEM_POOL_FEAT_SINGLEHDR;

janekmi avatar Jun 27 '18 12:06 janekmi

Librpmem library has been removed from PMDK repository. At this point we are not going to fix this issue. If you are interested in remote persistent memory support please look at the new librpma.

wlemkows avatar Jan 10 '23 08:01 wlemkows