]> git.apps.os.sepia.ceph.com Git - ceph-ansible.git/commitdiff
iscsi: Fix crashes during rolling update
authorMike Christie <mchristi@redhat.com>
Tue, 28 Jan 2020 22:31:55 +0000 (16:31 -0600)
committerDimitri Savineau <savineau.dimitri@gmail.com>
Fri, 31 Jan 2020 16:15:36 +0000 (11:15 -0500)
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 <mchristi@redhat.com>
roles/ceph-iscsi-gw/tasks/main.yml
roles/ceph-iscsi-gw/tasks/non-container/postrequisites.yml [new file with mode: 0644]
roles/ceph-iscsi-gw/tasks/non-container/prerequisites.yml

index 05732a0dacd56149ef3e46612e98a3166d5da263..0366ce294c3816169d6c0f7f2c8ae3e761702b03 100644 (file)
     - 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 (file)
index 0000000..786cf8c
--- /dev/null
@@ -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
index 6e72b129805e29ec8ee086c24745e35b1939d402..58cbe190bbcff370cf58dc125896c889ff334d90 100644 (file)
     - 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