pmdk icon indicating copy to clipboard operation
pmdk copied to clipboard

librpmem: cannot create remote pool with populated attributes struct

Open kkajrewicz opened this issue 6 years ago • 1 comments

Remote pool set:

PMEMPOOLSET
20M /tmp/rep

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;
        memset(&attr, 1, sizeof(attr));
        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 0x7f26ee6cb000, pool_size 10485760, nlanes 0x7ffe2d8568ec, create_attr 0x7ffe2d856880
<librpmem>: <3> [rpmem.c:356 rpmem_log_args] req create, target 192.168.0.182, pool_set_name pool.set, pool_addr 0x7f26ee6cb000, 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: 0x7f26ee6cb000
<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 0x7f26ee6cb000, pool_size 10485760, nlanes 0x7ffe2d8568ec
<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 0x7ffe2d85675c
<librpmem>: <3> [rpmem.c:98 env_get_bool] name RPMEM_ENABLE_VERBS, valp 0x7ffe2d856758
<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 0x18ee980, join 0
test: test.c:15: main: Assertion `rpp' failed
(...)

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

PMEMPOOLSET
20M /tmp/rep
OPTION SINGLEHDR

Found on: 1.4-rc4-424-g42a1427

kkajrewicz avatar May 25 '18 14:05 kkajrewicz

Setting attr.incompat_features = 1; is recognized as forcing SINGLEHDR on created replica. This is why rpmem_create fails if remote poolset does not have SINGLEHDR.

It is the same issue as #4173.

janekmi avatar Aug 01 '18 10:08 janekmi

librpmem will be removed in release 1.13.0 (https://github.com/pmem/pmdk/pull/5495). This issue won't be fixed. For further reading, please take a look at our blog post with more details.

lukaszstolarczuk avatar Mar 13 '23 11:03 lukaszstolarczuk