ceph / ceph/ceph-nvmeof

[1.0.0] No /dev/nvme0n1 and null nvme list on EL9.3 client with --enable-ha and --ana-reporting

Open
#459 5 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
132
Forks
69
Avg merge
1d 7h
Merged PRs (30d)
47

Description

Hello,

In order to evaluate how ceph-nvmeof behaves in a HA setup, I've set up 2 GWs as per below:

ceph-nvmeof.conf of GW #1 test-lis04h02:

```
# This file is generated by cephadm.
[gateway]
name = client.nvmeof.nvmeof_pool01.test-lis04h02.baakhx
group = None
addr = 100.74.191.134
port = 5500
enable_auth = False
state_update_notify = True
state_update_interval_sec = 5
enable_spdk_discovery_controller = true
enable_prometheus_exporter = false

[discovery]
addr = 100.74.191.134
port = 8009

[ceph]
pool = nvmeof_pool01
config_file = /etc/ceph/ceph.conf
id = nvmeof.nvmeof_pool01.test-lis04h02.baakhx

#[mtls]
#server_key = ./server.key
#client_key = ./client.key
#server_cert = ./server.crt
#client_cert = ./client.crt

[spdk]
tgt_path = /usr/local/bin/nvmf_tgt
rpc_socket = /var/tmp/spdk.sock
timeout = 60
log_level = WARN
conn_retries = 10
transports = tcp
transport_tcp_options = {"in_capsule_data_size": 8192, "max_io_qpairs_per_ctrlr": 7}
tgt_cmd_extra_args = --cpumask=0xF

```

ceph-nvmeof.conf of GW #2 test-mom02h02:

```
# This file is generated by cephadm.
[gateway]
name = client.nvmeof.nvmeof_pool01.test-mom02h02.lcdzzc
group = None
addr = 100.74.191.130
port = 5500
enable_auth = False
state_update_notify = True
state_update_interval_sec = 5
enable_spdk_discovery_controller = true
enable_prometheus_exporter = false

[discovery]
addr = 100.74.191.130
port = 8009

[ceph]
pool = nvmeof_pool01
config_file = /etc/ceph/ceph.conf
id = nvmeof.nvmeof_pool01.test-mom02h02.lcdzzc

#[mtls]
#server_key = ./server.key
#client_key = ./client.key
#server_cert = ./server.crt
#client_cert = ./client.crt

[spdk]
tgt_path = /usr/local/bin/nvmf_tgt
rpc_socket = /var/tmp/spdk.sock
timeout = 60
log_level = WARN
conn_retries = 10
transports = tcp
transport_tcp_options = {"in_capsule_data_size": 8192, "max_io_qpairs_per_ctrlr": 7}
tgt_cmd_extra_args = --cpumask=0xF
```

Deleting rados config object:

```
rados -p nvmeof_pool01 rm nvmeof.None.state
```

Started two [1.0.0] containers on nodes test-lis04h02 and test-mom02h02 with below options:

```
/usr/bin/podman run --rm --ipc=host --stop-signal=SIGTERM --authfile=/etc/ceph/podman-auth.json --net=host --init --name ceph-aa558815-042c-4fce-ac37-80c0255bf3c0-nvmeof-nvmeof_pool01-test-lis04h02-baakhx --pids-limit=-1 --ulimit memlock=-1:-1 --ulimit nofile=10240 --cap-add=SYS_ADMIN --cap-add=CAP_SYS_NICE --log-driver journald --conmon-pidfile /run/ceph-aa558815-042c-4fce-ac37-80c0255bf3c0@nvmeof.nvmeof_pool01.test-lis04h02.baakhx.service-pid --cidfile /run/ceph-aa558815-042c-4fce-ac37-80c0255bf3c0@nvmeof.nvmeof_pool01.test-lis04h02.baakhx.service-cid --cgroups=split -e CONTAINER_IMAGE=quay.io/ceph/nvmeof:1.0.0 -e NODE_NAME=test-lis04h02.peta.libe.dc.univ-lorraine.fr -e CEPH_USE_RANDOM_NONCE=1 -v /var/lib/ceph/aa558815-042c-4fce-ac37-80c0255bf3c0/nvmeof.nvmeof_pool01.test-lis04h02.baakhx/config:/etc/ceph/ceph.conf:z -v /var/lib/ceph/aa558815-042c-4fce-ac37-80c0255bf3c0/nvmeof.nvmeof_pool01.test-lis04h02.baakhx/keyring:/etc/ceph/keyring:z -v /var/lib/ceph/aa558815-042c-4fce-ac37-80c0255bf3c0/nvmeof.nvmeof_pool01.test-lis04h02.baakhx/ceph-nvmeof.conf:/src/ceph-nvmeof.conf:z -v /var/lib/ceph/aa558815-042c-4fce-ac37-80c0255bf3c0/nvmeof.nvmeof_pool01.test-lis04h02.baakhx/configfs:/sys/kernel/config -v /dev/hugepages:/dev/hugepages -v /dev/vfio/vfio:/dev/vfio/vfio -v /etc/hosts:/etc/hosts:ro --mount type=bind,source=/lib/modules,destination=/lib/modules,ro=true quay.io/ceph/nvmeof:1.0.0
```

```
/usr/bin/podman run --rm --ipc=host --stop-signal=SIGTERM --authfile=/etc/ceph/podman-auth.json --net=host --init --name ceph-aa558815-042c-4fce-ac37-80c0255bf3c0-nvmeof-nvmeof_pool01-test-mom02h02-lcdzzc --pids-limit=-1 --ulimit memlock=-1:-1 --ulimit nofile=10240 --cap-add=SYS_ADMIN --cap-add=CAP_SYS_NICE --log-driver journald --conmon-pidfile /run/ceph-aa558815-042c-4fce-ac37-80c0255bf3c0@nvmeof.nvmeof_pool01.test-mom02h02.lcdzzc.service-pid --cidfile /run/ceph-aa558815-042c-4fce-ac37-80c0255bf3c0@nvmeof.nvmeof_pool01.test-mom02h02.lcdzzc.service-cid --cgroups=split -e CONTAINER_IMAGE=quay.io/ceph/nvmeof:1.0.0 -e NODE_NAME=test-mom02h02.peta.montet.dc.univ-lorraine.fr -e CEPH_USE_RANDOM_NONCE=1 -v /var/lib/ceph/aa558815-042c-4fce-ac37-80c0255bf3c0/nvmeof.nvmeof_pool01.test-mom02h02.lcdzzc/config:/etc/ceph/ceph.conf:z -v /var/lib/ceph/aa558815-042c-4fce-ac37-80c0255bf3c0/nvmeof.nvmeof_pool01.test-mom02h02.lcdzzc/keyring:/etc/ceph/keyring:z -v /var/lib/ceph/aa558815-042c-4fce-ac37-80c0255bf3c0/nvmeof.nvmeof_pool01.test-mom02h02.lcdzzc/ceph-nvmeof.conf:/src/ceph-nvmeof.conf:z -v /var/lib/ceph/aa558815-042c-4fce-ac37-80c0255bf3c0/nvmeof.nvmeof_pool01.test-mom02h02.lcdzzc/configfs:/sys/kernel/config -v /dev/hugepages:/dev/hugepages -v /dev/vfio/vfio:/dev/vfio/vfio -v /etc/hosts:/etc/hosts:ro --mount type=bind,source=/lib/modules,destination=/lib/modules,ro=true quay.io/ceph/nvmeof:1.0.0
```

And configured the GWs:

```
podman run -it quay.io/ceph/nvmeof-cli:1.0.0 --server-address 100.74.191.134 --server-port 5500 subsystem add --subsystem "nqn.2024-02.io.spdk:peta" --enable-ha --ana-reporting
Adding subsystem nqn.2024-02.io.spdk:peta: Successful

podman run -it quay.io/ceph/nvmeof-cli:1.0.0 --server-address 100.74.191.134 --server-port 5500 namespace add --subsystem "nqn.2024-02.io.spdk:peta" --rbd-pool nvmeof_pool01 --rbd-image image-1 --size 3G --rbd-create-image --nsid 1 --load-balancing-group 1
Adding namespace 1 to nqn.2024-02.io.spdk:peta, load balancing group 1: Successful

podman run -it quay.io/ceph/nvmeof-cli:1.0.0 --server-address 100.74.191.134 --server-port 5500 listener add --subsystem "nqn.2024-02.io.spdk:peta" --gateway-name client.nvmeof.nvmeof_pool01.test-lis04h02.baakhx --traddr 100.74.191.134 --trsvcid 4420
Adding nqn.2024-02.io.spdk:peta listener at 100.74.191.134:4420: Successful

podman run -it quay.io/ceph/nvmeof-cli:1.0.0 --server-address 100.74.191.130 --server-port 5500 listener add --subsystem "nqn.2024-02.io.spdk:peta" --gateway-name client.nvmeof.nvmeof_pool01.test-mom02h02.lcdzzc --traddr 100.74.191.130 --trsvcid 4420
Adding nqn.2024-02.io.spdk:peta listener at 100.74.191.130:4420: Successful

podman run -it quay.io/ceph/nvmeof-cli:1.0.0 --server-address 100.74.191.130 --server-port 5500 host add --subsystem "nqn.2024-02.io.spdk:peta" --host "*"
Allowing open host access to nqn.2024-02.io.spdk:peta: Successful
```

suybsystem and namespace configuration check:

```
$ podman run -it quay.io/ceph/nvmeof-cli:1.0.0 --server-address 100.74.191.130 --server-port 5500 subsystem list
Subsystems:
╒═══════════╤══════════════════════════════════════╤════════════╤════════════════════╤══════════════════════╤══════════════════╤═════════════╕
│ Subtype │ NQN │ HA State │ Serial Number │ Model Number │ Controller IDs │ Namespace │
│ │ │ │ │ │ │ Count │
╞═══════════╪══════════════════════════════════════╪════════════╪════════════════════╪══════════════════════╪══════════════════╪═════════════╡
│ Discovery │ nqn.2014-08.org.nvmexpress.discovery │ disabled │ │ │ 0-0 │ 0 │
├───────────┼──────────────────────────────────────┼────────────┼────────────────────┼──────────────────────┼──────────────────┼─────────────┤
│ NVMe │ nqn.2024-02.io.spdk:peta │ enabled │ SPDK77352934285842 │ SPDK bdev Controller │ 1-65519 │ 1 │
╘═══════════╧══════════════════════════════════════╧════════════╧════════════════════╧══════════════════════╧══════════════════╧═════════════╛

$ podman run -it quay.io/ceph/nvmeof-cli:1.0.0 --server-address 100.74.191.134 --server-port 5500 subsystem list
Subsystems:
╒═══════════╤══════════════════════════════════════╤════════════╤════════════════════╤══════════════════════╤══════════════════╤═════════════╕
│ Subtype │ NQN │ HA State │ Serial Number │ Model Number │ Controller IDs │ Namespace │
│ │ │ │ │ │ │ Count │
╞═══════════╪══════════════════════════════════════╪════════════╪════════════════════╪══════════════════════╪══════════════════╪═════════════╡
│ Discovery │ nqn.2014-08.org.nvmexpress.discovery │ disabled │ │ │ 0-0 │ 0 │
├───────────┼──────────────────────────────────────┼────────────┼────────────────────┼──────────────────────┼──────────────────┼─────────────┤
│ NVMe │ nqn.2024-02.io.spdk:peta │ enabled │ SPDK77352934285842 │ SPDK bdev Controller │ 1-65519 │ 1 │
╘═══════════╧══════════════════════════════════════╧════════════╧════════════════════╧══════════════════════╧══════════════════╧═════════════╛

$ podman run -it quay.io/ceph/nvmeof-cli:1.0.0 --server-address 100.74.191.130 --server-port 5500 namespace list -n "nqn.2024-02.io.spdk:peta"
Namespaces in subsystem nqn.2024-02.io.spdk:peta:
╒════════╤════════════════════════╤═══════════════╤═════════╤═════════╤═════════╤═════════════════════╤═════════════╤═══════════╤═══════════╤════════════╤═════════════╕
│ NSID │ Bdev │ RBD │ RBD │ Image │ Block │ UUID │ Load │ R/W IOs │ R/W MBs │ Read MBs │ Write MBs │
│ │ Name │ Pool │ Image │ Size │ Size │ │ Balancing │ per │ per │ per │ per │
│ │ │ │ │ │ │ │ Group │ second │ second │ second │ second │
╞════════╪════════════════════════╪═══════════════╪═════════╪═════════╪═════════╪═════════════════════╪═════════════╪═══════════╪═══════════╪════════════╪═════════════╡
│ 1 │ bdev_96ae08eb-fa83- │ nvmeof_pool01 │ image-1 │ 3 GiB │ 512 B │ 96ae08eb-fa83-4fd8- │ 1 │ unlimited │ unlimited │ unlimited │ unlimited │
│ │ 4fd8-8f82-2e9fee187e91 │ │ │ │ │ 8f82-2e9fee187e91 │ │ │ │ │ │
╘════════╧════════════════════════╧═══════════════╧═════════╧═════════╧═════════╧═════════════════════╧═════════════╧═══════════╧═══════════╧════════════╧═════════════╛
```

What I observe: /dev/nvme0n1 is not created on test-mom02h01 EL 9.3 client.

```
$ nvme discover -t tcp -a 100.74.191.134 -s 4420

Discovery Log Number of Records 1, Generation counter 2
=====Discovery Log Entry 0======
trtype: tcp
adrfam: ipv4
subtype: nvme subsystem
treq: not required
portid: 0
trsvcid: 4420
subnqn: nqn.2024-02.io.spdk:peta
traddr: 100.74.191.134
eflags: none
sectype: none

$ nvme connect -t tcp -a 100.74.191.134 -n nqn.2024-02.io.spdk:peta

$ nvme list
Node Generic SN Model Namespace Usage Format FW Rev
--------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- --------

$ nvme list -v
Subsystem Subsystem-NQN Controllers
---------------- ------------------------------------------------------------------------------------------------ ----------------
nvme-subsys0 nqn.2024-02.io.spdk:peta nvme0

Device SN MN FR TxPort Address Subsystem Namespaces
-------- -------------------- ---------------------------------------- -------- ------ -------------- ------------ ----------------
nvme0 SPDK77352934285842 SPDK bdev Controller 23.01.1 tcp traddr=100.74.191.134,trsvcid=4420,src_addr=100.74.191.129 nvme-subsys0

Device Generic NSID Usage Format Controllers
------------ ------------ ---------- -------------------------- ---------------- ----------------

$ ls -alh /dev/nvme*
crw------- 1 root root 241, 0 23 févr. 11:03 /dev/nvme0
crw------- 1 root root 10, 123 23 févr. 10:21 /dev/nvme-fabrics

$ fdisk -l /dev/nvme0
fdisk: impossible d'ouvrir /dev/nvme0: Repérage non permis

$ dmesg
[...]
[61797.892756] nvme nvme0: new ctrl: NQN "nqn.2014-08.org.nvmexpress.discovery", addr 100.74.191.134:4420
[61797.895072] nvme nvme0: Removing ctrl: NQN "nqn.2014-08.org.nvmexpress.discovery"
[61802.258173] nvme nvme0: creating 4 I/O queues.
[61802.297181] nvme nvme0: mapped 4/0/0 default/read/poll queues.
[61802.299326] nvme nvme0: new ctrl: NQN "nqn.2024-02.io.spdk:peta", addr 100.74.191.134:4420
```

/dev/nvme0n1 is not created on the client.

What I expect: /dev/nvme0n1 being created and usable on the client.

Note: reproducing these exact commands without using --enable-ha and --ana-reporting options when creating the subsystem results in /dev/nvme0n1 being created on the client as expected.

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the EL9.3 client behavior with the two ceph-nvmeof 1.0.0 gateways using the shown nvme discover, connect, list, and list -v commands, and review the referenced ceph-nvmeof.conf settings. Done means the HA/ANA connection exposes /dev/nvme0n1 and nvme list reports the namespace instead of an empty or null device list.

Written by the indexing model from the issue text.

Assessment

Tech stack
linux, python
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.