| Q: Why should lvmetad cache foreign VGs? |
| A: It's the most useful behavior in the "steady state". |
| |
| How to arrive at that conclusion. |
| Four code configurations to consider, each in two different circumstances. |
| |
| configurations: |
| |
| 1. lvm not using lvmetad |
| 2. lvm using lvmetad and lvmlockd |
| 3. lvm using lvmetad, and lvmetad does not cache foreign VGs |
| (Not currently implemented.) |
| 4. lvm using lvmetad, and lvmetad caches foreign VGs |
| |
| circumstances: |
| |
| A. steady state: PVs are not added or removed to/from foreign VGs |
| B. transient state: PVs are added or removed to/from foreign VGs |
| |
| combinations: |
| |
| 1.A. A PV is correctly shown in the foreign VG. |
| 1.B. A PV is correctly shown in the foreign VG. |
| |
| The most accurate representation, at the cost of always scanning disks. |
| |
| |
| 2.A. A PV is correctly shown in the foreign VG. |
| 2.B. A PV is correctly shown in the foreign VG. |
| |
| The most accurate representation, at the cost of using lvmlockd. |
| |
| |
| 3.A. A PV in a foreign VG is shown as unused. |
| 3.B. A PV in a foreign VG is shown as unused. |
| |
| If lvmetad ignores foreign VGs and does not cache them, the PVs in the |
| foreign VGs appear to be unused. This largely defeats the purpose of |
| system_id, which is meant to treat VGs/PVs as foreign instead of free |
| (albeit imperfectly, see below.) |
| |
| |
| 4.A. A PV is correctly shown in the foreign VG. |
| 4.B. A PV is not correctly shown in the foreign VG. |
| |
| This avoids the cost of always scanning disks, and avoids the cost of |
| using lvmlockd. The steady state 4.A. is an improvement over the steady |
| state 3.A. When the steady state is the common case, this is a big |
| advantage. When the steady state is *not* the common case, the foreign VG |
| concept is not as useful (if shared devices are this dynamic, lvmlockd |
| should be considered.) |
| |
| The limitations related to the transient state 4.B. are explained in |
| lvmsystemid(7), along with how to handle it. The specific inaccuracies |
| possible in 4.B. are: |
| |
| . PV is shown as belonging to a foreign VG, but is actually unused. |
| . PV is shown as unused, but actually belongs to a foreign VG. |
| |
| To resolve the inaccuracies in the transient state (4.B.), and return the |
| system to an accurate steady state (4.A.), the disks need to be scanned, |
| which updates lvmetad. The scanning/updating is a manual step, i.e. |
| running 'pvscan --cache', which by definition scans disks and updates |
| lvmetad. |
| |
| -- |
| |
| The --foreign command line option for report/display commands |
| (vgs/lvs/pvs/vgdisplay/lvdisplay/pvdisplay) is not directly related to |
| whether or not lvmetad caches foreign VGs. |
| |
| By default, foreign VGs are silently ignored and not printed by these |
| commands. However, when the --foreign option is used, these commands do |
| produce output about foreign VGs. |
| |
| (When --foreign is not used, and the command specifically requests a |
| foreign VG by name, an error is produced about not accessing foreign VGs, |
| and the foreign VG is not displayed.) |
| |
| The decision to report/display foreign VGs or not is independent of |
| whether lvmetad is caching those VGs. When lvmetad is caching the foreign |
| VG, a report/display command run with --foreign will scan disks to read |
| the foreign VG and give the most up to date version of it (the copy of the |
| foreign VG in lvmetad may be out of date due to changes to the VG by the |
| foreign host.) |
| |