1
0
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:
Dave Wysochanski 2009-07-28 13:17:04 +00:00
parent 88e3ced7df
commit 9ac1af7160
6 changed files with 41 additions and 2 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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

View File

@ -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.
*

View File

@ -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)
{

View File

@ -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)