mirror of
git://sourceware.org/git/lvm2.git
synced 2025-04-01 18:50:41 +03:00
Add lvm_vg_get_seqno, updating lvm.h and unit test.
Adding the ability to get the seqno is important for an application to determine if something has changed in a VG. Otherwise, the only way to know is to open the VG with write permission and hold the handle.
This commit is contained in:
parent
88e3ced7df
commit
9ac1af7160
@ -705,6 +705,7 @@ uint32_t pv_mda_count(const pv_t *pv);
|
||||
uint64_t lv_size(const lv_t *lv);
|
||||
|
||||
int vg_missing_pv_count(const vg_t *vg);
|
||||
uint32_t vg_seqno(const vg_t *vg);
|
||||
uint32_t vg_status(const vg_t *vg);
|
||||
uint64_t vg_size(const vg_t *vg);
|
||||
uint64_t vg_free(const vg_t *vg);
|
||||
|
@ -3424,6 +3424,11 @@ uint32_t pv_mda_count(const pv_t *pv)
|
||||
return info ? dm_list_size(&info->mdas) : UINT64_C(0);
|
||||
}
|
||||
|
||||
uint32_t vg_seqno(const vg_t *vg)
|
||||
{
|
||||
return vg->seqno;
|
||||
}
|
||||
|
||||
uint32_t vg_status(const vg_t *vg)
|
||||
{
|
||||
return vg->status;
|
||||
|
@ -6,6 +6,7 @@ lvm_config_override
|
||||
lvm_pv_get_name
|
||||
lvm_pv_get_uuid
|
||||
lvm_pv_get_mda_count
|
||||
lvm_vg_get_seqno
|
||||
lvm_vg_get_name
|
||||
lvm_vg_get_uuid
|
||||
lvm_vg_get_size
|
||||
|
26
liblvm/lvm.h
26
liblvm/lvm.h
@ -49,6 +49,17 @@
|
||||
* A volume group handle may be obtained with read or write permission.
|
||||
* Any attempt to change a property of a pv_t, vg_t, or lv_t without
|
||||
* obtaining write permission on the vg_t will fail with EPERM.
|
||||
*
|
||||
* An application first opening a VG read-only, then later wanting to change
|
||||
* a property of an object must first close the VG and re-open with write
|
||||
* permission. Currently liblvm provides no mechanism to determine whether
|
||||
* the VG has changed on-disk in between these operations - this is the
|
||||
* application's responsiblity. One way the application can ensure the VG
|
||||
* has not changed is to save the "vg_seqno" field after opening the VG with
|
||||
* READ permission. If the application later needs to modify the VG, it can
|
||||
* close the VG and re-open with WRITE permission. It should then check
|
||||
* whether the original "vg_seqno" obtained with READ permission matches
|
||||
* the new one obtained with WRITE permission.
|
||||
*/
|
||||
|
||||
/**
|
||||
@ -469,6 +480,21 @@ int lvm_vg_reduce(vg_t *vg, const char *device);
|
||||
*/
|
||||
int lvm_vg_set_extent_size(vg_t *vg, uint32_t new_size);
|
||||
|
||||
/**
|
||||
* Get the current metadata sequence number of a volume group.
|
||||
*
|
||||
* The metadata sequence number is incrented for each metadata change.
|
||||
* Applications may use the sequence number to determine if any LVM objects
|
||||
* have changed from a prior query.
|
||||
*
|
||||
* \param vg
|
||||
* VG handle obtained from lvm_vg_create or lvm_vg_open.
|
||||
*
|
||||
* \return
|
||||
* Metadata sequence number.
|
||||
*/
|
||||
uint64_t lvm_vg_get_seqno(const vg_t *vg);
|
||||
|
||||
/**
|
||||
* Get the current name of a volume group.
|
||||
*
|
||||
|
@ -223,6 +223,11 @@ struct dm_list *lvm_vg_list_lvs(vg_t *vg)
|
||||
return list;
|
||||
}
|
||||
|
||||
uint64_t lvm_vg_get_seqno(const vg_t *vg)
|
||||
{
|
||||
return vg_seqno(vg);
|
||||
}
|
||||
|
||||
/* FIXME: invalid handle? return INTMAX? */
|
||||
uint64_t lvm_vg_get_size(const vg_t *vg)
|
||||
{
|
||||
|
@ -345,10 +345,11 @@ static void _vg_close(char **argv, int argc)
|
||||
|
||||
static void _show_one_vg(vg_t *vg)
|
||||
{
|
||||
printf("%s (%s): size=%"PRIu64", free=%"PRIu64", #pv=%"PRIu64"\n",
|
||||
printf("%s (%s): sz=%"PRIu64", free=%"PRIu64", #pv=%"PRIu64
|
||||
", seq#=%"PRIu64"\n",
|
||||
lvm_vg_get_name(vg), lvm_vg_get_uuid(vg),
|
||||
lvm_vg_get_size(vg), lvm_vg_get_free_size(vg),
|
||||
lvm_vg_get_pv_count(vg));
|
||||
lvm_vg_get_pv_count(vg), lvm_vg_get_seqno(vg));
|
||||
}
|
||||
|
||||
static void _list_open_vgs(void)
|
||||
|
Loading…
x
Reference in New Issue
Block a user