From: Mike Snitzer <msnitzer@fedoraproject.org>
To: James Antill <james@fedoraproject.org>
Cc: okozina@fedoraproject.org, yum-devel@lists.baseurl.org,
linux-lvm@redhat.com
Subject: Re: [linux-lvm] [PATCH 4/2] fs snapshot plugin: add LVM tag to allow tools to link pre and post snapshots
Date: Tue, 12 Mar 2013 10:41:30 -0400 [thread overview]
Message-ID: <20130312144129.GA13459@redhat.com> (raw)
In-Reply-To: <1363095972.24725.231.camel@code.and.org>
On Tue, Mar 12 2013 at 9:46am -0400,
James Antill <james@fedoraproject.org> wrote:
> On Mon, 2013-03-11 at 17:25 -0400, Mike Snitzer wrote:
> > Add a "yum_fs_snapshot_<trans_id>_<origin_volume>" LVM tag to LVM-based
> > snapshots (old or thinp). These tags will allow tools (e.g snapper) to
> > link the pre and post snapshot volumes together.
> >
> > yum_fs_snapshot_trans_id() uses the first 16 digits of the hash() of the
> > rpm TransactionSet instance to establish a unique id that is common to
> > both the pretrans_hook() and posttrans_hook() -- this is quite the hack;
> > I'm open to using other (more future-proof) methods.
>
> Esp. as hash(ts.ts) is just the address of the pointer for that object
> in C.
> It depends what you want, I guess.
I couldn't figure out how to store anything in pretrans_hook() and
retrieve it in posttrans_hook(). Use of a global caused the plugin to
fail silently.
All I was going for was a unique number that was the same in both
pretrans_hook() and posttrans_hook().
> My first guess is that you'd want roughly what the rest of yum uses,
> so:
>
> rpmdbv = self.rpmdb.simpleVersion(main_only=True)[0]
> frpmdbv = self.tsInfo.futureRpmDBVersion()
>
> ...except things like yum history also get the real "future" rpmdbv
> after the transaction happens, which this can't (unless we can add the
> tags in post_trans? -- and then there are problems about what happens if
> we don't get there).
>
> This should identify the state of the system, and what will happen well
> enough ... but that means if the user does:
>
> yum blah
> yum history undo last
> yum history undo last
> yum history undo last
>
> ...you'll have multiple snapshots with the same tag (as the system will
> be in the same states from the packaging POV -- is this what you want?).
> The other alternative is to just use a stored time.time(), of the first
> snapshot (or maybe that and the start rpmdbv?).
I like the idea of using the actual future rpmDB version; but as you
note it won't be unique on its own if you undo a transaction. SO this
is the incremental change I came up with. I'll post v2 of the 4/2 patch
with these chnages folded in:
diff --git a/plugins/fs-snapshot/fs-snapshot.py b/plugins/fs-snapshot/fs-snapshot.py
index 22582aa..1625564 100644
--- a/plugins/fs-snapshot/fs-snapshot.py
+++ b/plugins/fs-snapshot/fs-snapshot.py
@@ -43,11 +43,14 @@ lvm_key = "create_lvm_snapshot"
dm_snapshot_merge_checked = 0
dm_snapshot_merge_support = 0
-def yum_fs_snapshot_trans_id(ts):
+def yum_fs_snapshot_trans_id(conduit):
# return pseudo yum transaction id string
# this string is identical for both {pre,post}trans_hook
- yum_ts_hash = "%d" % abs(hash(ts.ts))
- return "yum_fs_snapshot_" + yum_ts_hash[:16]
+ tsInfo = conduit.getTsInfo()
+ # using hash of tsInfo purely to get unique number that isn't tied to rpmDB
+ tsInfo_hash = "%d" % (abs(hash(tsInfo)))
+ frpmdbv = tsInfo.futureRpmDBVersion()
+ return "yum_fs_snapshot_%s_%s" % (tsInfo_hash[:8], frpmdbv)
def _fail(msg):
raise PluginYumExit(msg)
@@ -262,8 +265,6 @@ def _create_lvm_snapshot(conduit, snapshot_tag, volume):
mntpnt = volume["mntpnt"]
kern_inst = True # Default to saying it might be.
ts = conduit._base.rpmdb.readOnlyTS()
- # save pseudo yum transaction id
- yum_trans_id = yum_fs_snapshot_trans_id(ts)
kern_pkgtup = yum.misc.get_running_kernel_pkgtup(ts)
del ts
if kern_pkgtup is not None:
@@ -299,6 +300,7 @@ def _create_lvm_snapshot(conduit, snapshot_tag, volume):
return 1
# Add tag to allow other tools (e.g. snapper) to link pre
# and post snapshot LVs together
+ yum_trans_id = yum_fs_snapshot_trans_id(conduit)
if add_lvm_tag_to_snapshot(conduit, yum_trans_id + "_" + orig_lvname, snap_device):
return 1
return 2
next prev parent reply other threads:[~2013-03-12 14:41 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-10 16:18 [linux-lvm] [PATCH 0/2] yum-utils fs snapshot plugin: fix old LVM snapshots and add thinp support Mike Snitzer
2013-03-10 16:18 ` [linux-lvm] [PATCH 1/2] fs snapshot plugin: fix inspect_volume_lvm to use supported dmsetup splitname options Mike Snitzer
2013-03-10 16:18 ` [linux-lvm] [PATCH 2/2] fs snapshot plugin: add support for snapshotting thinly provisioned LVM volumes Mike Snitzer
2013-03-11 21:25 ` [linux-lvm] [PATCH 3/2] fs snapshot plugin: add ability to create snapshots during post transaction Mike Snitzer
2013-03-11 21:25 ` [linux-lvm] [PATCH 4/2] fs snapshot plugin: add LVM tag to allow tools to link pre and post snapshots Mike Snitzer
2013-03-12 13:46 ` [linux-lvm] [Yum-devel] " James Antill
2013-03-12 14:41 ` Mike Snitzer [this message]
2013-03-12 16:41 ` [linux-lvm] " James Antill
2013-03-12 18:09 ` Mike Snitzer
2013-03-12 19:52 ` [linux-lvm] [Yum-devel] " James Antill
2013-03-12 20:30 ` [linux-lvm] " Mike Snitzer
2013-03-12 15:00 ` [linux-lvm] [PATCH 4/2 v2] " Mike Snitzer
2013-03-12 18:16 ` [linux-lvm] [PATCH 4/2 v3] " Mike Snitzer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130312144129.GA13459@redhat.com \
--to=msnitzer@fedoraproject.org \
--cc=james@fedoraproject.org \
--cc=linux-lvm@redhat.com \
--cc=okozina@fedoraproject.org \
--cc=yum-devel@lists.baseurl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.