]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: nfs migration: avoid port conflicts 44482/head
authorSebastian Wagner <sewagner@redhat.com>
Thu, 6 Jan 2022 11:35:38 +0000 (12:35 +0100)
committerSebastian Wagner <sewagner@redhat.com>
Thu, 6 Jan 2022 11:35:38 +0000 (12:35 +0100)
The nfs upgrade renames the nfs spec from `nfs.ganesha-{service_id}`
to `nfs.{service_id}`. Previously we used the orphan-daemon check
to remove the old `nfs.ganesha-{service_id}` daemons. This does not work
as sometimes serve() tries to deploy the new daemons before cleaning up the
old daemons. This results in a port conflict breaking the upgrade.

Fixes: https://tracker.ceph.com/issues/53424
Signed-off-by: Sebastian Wagner <sewagner@redhat.com>
src/pybind/mgr/cephadm/migrations.py

index 95ec5d28770eca20f4e303051ba2c753330a184e..672a895bc14c8009239e7f69b4c3fa8cd425dcb2 100644 (file)
@@ -237,6 +237,12 @@ class Migrations:
             self.mgr.spec_store.rm(f'nfs.ganesha-{service_id}')
             spec.service_id = service_id
             self.mgr.spec_store.save(spec, True)
+
+            # We have to remove the old daemons here as well, otherwise we'll end up with a port conflict.
+            daemons = [d.name()
+                       for d in self.mgr.cache.get_daemons_by_service(f'nfs.ganesha-{service_id}')]
+            self.mgr.log.info(f'Removing old nfs.ganesha-{service_id} daemons {daemons}')
+            self.mgr.remove_daemons(daemons)
         else:
             # redeploy all ganesha daemons to ensures that the daemon
             # cephx are correct AND container configs are set up properly