From 76753e64f99a3481a8f7e7e483343e26316b54ec Mon Sep 17 00:00:00 2001 From: Mike Christie Date: Tue, 28 Jan 2020 16:31:55 -0600 Subject: [PATCH] iscsi: Fix crashes during rolling update During a rolling update we will run the ceph iscsigw tasks that start the daemons then run the configure_iscsi.yml tasks which can create iscsi objects like targets, disks, clients, etc. The problem is that once the daemons are started they will accept confifguration requests, or may want to update the system themself. Those operations can then conflict with the configure_iscsi.yml tasks that setup objects and we can end up in crashes due to the kernel being in a unsupported state. This could also happen during creation, but is less likely due to no objects being setup yet, so there are no watchers or users accessing the gws yet. The fix in this patch works for both update and initial setup. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1795806 Signed-off-by: Mike Christie (cherry picked from commit 77f3b5d51b84a6338847c5f6a93f22a3a6a683d2) --- roles/ceph-iscsi-gw/tasks/main.yml | 4 ++++ .../tasks/non-container/postrequisites.yml | 9 +++++++++ .../tasks/non-container/prerequisites.yml | 12 ++++++------ 3 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 roles/ceph-iscsi-gw/tasks/non-container/postrequisites.yml diff --git a/roles/ceph-iscsi-gw/tasks/main.yml b/roles/ceph-iscsi-gw/tasks/main.yml index 05732a0da..0366ce294 100644 --- a/roles/ceph-iscsi-gw/tasks/main.yml +++ b/roles/ceph-iscsi-gw/tasks/main.yml @@ -19,6 +19,10 @@ - not containerized_deployment | bool - not use_new_ceph_iscsi | bool +- name: include non-container/postrequisites.yml + include_tasks: non-container/postrequisites.yml + when: not containerized_deployment | bool + - name: include containerized.yml include_tasks: containerized.yml when: containerized_deployment | bool diff --git a/roles/ceph-iscsi-gw/tasks/non-container/postrequisites.yml b/roles/ceph-iscsi-gw/tasks/non-container/postrequisites.yml new file mode 100644 index 000000000..786cf8cd1 --- /dev/null +++ b/roles/ceph-iscsi-gw/tasks/non-container/postrequisites.yml @@ -0,0 +1,9 @@ +- name: start rbd-target-api and rbd-target-gw + service: + name: "{{ item }}" + state: started + enabled: yes + masked: no + with_items: + - rbd-target-api + - rbd-target-gw diff --git a/roles/ceph-iscsi-gw/tasks/non-container/prerequisites.yml b/roles/ceph-iscsi-gw/tasks/non-container/prerequisites.yml index c1a287069..4267c9d9c 100644 --- a/roles/ceph-iscsi-gw/tasks/non-container/prerequisites.yml +++ b/roles/ceph-iscsi-gw/tasks/non-container/prerequisites.yml @@ -73,13 +73,13 @@ - target.stat.exists - not target.stat.islnk -- name: start tcmu-runner, rbd-target-api and rbd-target-gw +# Only start tcmu-runner, so configure_iscsi.yml can create disks. +# We must start rbd-target-gw/api after configure_iscsi.yml to avoid +# races where they are both trying to setup the same object during +# a rolling update. +- name: start tcmu-runner service: - name: "{{ item }}" + name: tcmu-runner state: started enabled: yes masked: no - with_items: - - tcmu-runner - - rbd-target-gw - - rbd-target-api