[OpenAFS] Re: Swap RW and RO volumes ?

Andrew Deason adeason@sinenomine.net
Fri, 18 Dec 2009 09:56:58 -0600

On Wed, 16 Dec 2009 14:47:02 -0600
Andrew Deason <adeason@sinenomine.net> wrote:

> > > My question is, if I want to drain a volume of all RW volumes so I
> > > can do kernel updates etc. without a user-visible outage, is there
> > > any way to effectively swap the RW and RO volumes.
> > > Something like:
> > > =A0Lock RW
> > > =A0Release to bring RO in sync
> > > =A0Make RW 'offline'
> > > =A0Promote RO to RW in the VLDB
> > > =A0Demote old RW to RO in the VLDB
> > > =A0Unlock
> You can sorta do part of that with 'vos convertROtoRW', but it's not a
> VLDB-only operation; you gotta change disk metadata, too. Can't
> convert an RW back to an RO, though.

A little explanation, since it was pointed out to me that of course you
can go from RW to RO (it's called "release" :). You can't convert an RW
to an RO directly in-place, but of course you could clone the RW and
then delete the RW. I don't really think this is 'safe' for future
releases, since the initial clone comes from one RW, and a future
restore would come from a different RW. But nothing described so far is
really 'safe', so it warrants mentioning.

So, to do the whole process, I think it could look like this:

addsite a local clone
offline (or just remove) the rw
convertROtoRW on the remote 'backup' server

And do the same thing to do it the other way. Problems being that
convertROtoRW isn't usually run all that often (so it's more likely to
fail that perhaps other options), and that this is slower than something
that would just change the VLDB instead of changing the volids on disk.
This also doesn't account for preventing writes between the 'release'
and 'offline'/'remove' phases above.

Andrew Deason