pmdk
pmdk copied to clipboard
librpmem: cannot create remote pool with populated attributes struct
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
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.
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.