Please sign in to comment.
CA-96541/SCTX-1188: Fix race condition when creating metrics for VLAN…
… PIFs This fixes a race condition between the thread that copies bonds and VLANs from the master when a new slave joins the pool, and the thread that creates/updates the PIF_metrics (the "monitor thread"). Or in fact a race between anything that creates a bond and very soon after that a VLAN on top of it. Since XCP1.6/XS6.1, VLANs no longer have their own PIF_metrics. Rather, they point to the PIF_metrics of the underlying PIF, which can be either a physical PIF (e.g. for eth0), or a bond PIF. Therefore, the carrier of a VLAN PIF is the same as the carrier of the underlying PIF. When a physical PIF or bond PIF is created, it does not immediately have PIF_metrics (PIF.metrics = "OpaqueRef:NULL"). The PIF_metrics object is created and assigned to the PIF by the monitor thread a short while after that. If you create a VLAN before the PIF_metrics have been created, the PIF.metrics field from the underlying PIF will still be copied, which is "OpaqueRef:NULL". This will never get updated, because the monitor thread ignores VLANs. The fix is simply to immediately create an (empty) metrics object when creating a bond. Signed-off-by: Rob Hoes <firstname.lastname@example.org>
- Loading branch information...