Re: wip-encoding

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 20 Jan 2012, Gregory Farnum wrote:
> On Fri, Jan 20, 2012 at 10:58 AM, Sage Weil <sage@xxxxxxxxxxxx> wrote:
> > The current pattern is
> >
> > void Foo::encode(bufferlist& bl, unsigned features) const
> > {
> >  if (features & NEW_THING) {
> >     // encode normally
> >  } else {
> >     // encode old way (wahtever was in this func)
> >  }
> > }
> >
> > I'm not sure what to add here to make this less painful or error-prone.
> > ceph-dencoder does have options to print the feature set for the version
> > it was compiled for, and to set the bits passed to encoder functions, so
> > that we can test these paths.
> 
> Well, our features tend to all move forward, so perhaps we should have
> a way of specifying different encoders based on the feature bits (or
> struct version) we're targeting, instead of if-elsing through the code
> (nesting with something like this tends to sprawl ever-deeper). I
> think that would make it easier to test inter-version compatibility
> and avoid accidentally breaking interoperation.
> 
> Not having spent a bunch of time thinking about how to do this I don't
> have obviously better ideas off-hand, but I'd really like it if
> somebody could either present a good option or else say why we won't
> get anything much better, instead of just pressing ahead because
> nobody has any better ideas. :( We're going to be stuck with this for
> a while.

Hmm.  I don't like obscuring control flow with macros, and features needs 
to be an argument.  I don't have any real ideas here.

> >> > This requires and initial incompat change to add the length and incompat
> >> > fields, but then we can generally add things without breakage.
> >> Hmm...if we come up with something that talks feature bits we could do
> >> this nicely with a compat bit. :)
> >
> > Hmm, yeah.  If we redo a bunch of encoders at once we can use a
> > single feature bit for all of them.  That's a good idea!
> 
> I'm not sure my thought came across clearly ? we should be able to use
> a compat rather than an incompat flag if we have a good way to target
> multiple versions in our encoder.

You'll need to explain what you mean on Monday.. I'm missing it!

> > I cleaned up the tool usage a bit and it currently looks like
> >
> > $ ./ceph-dencoder -h
> > usage: ceph-dencoder [commands ...]
> >
> >  version          print version string (to stdout)
> >
> >  import <encfile> read encoded data from encfile
> >  export <outfile> write encoded data to outfile
> >
> >  features <num>   set feature bits used for encoding
> >  get_features     print feature bits (int) to stdout
> 
> We will probably be happier in the long run if we can use symbolic
> names for the features. Not sure how difficult that would be, though.

Just a bunch of string parsing and conversion functions.  Meh...
 
> >  list_types       list supported types
> >  type <classname> select type
> >  decode           decode into in-core object
> >  encode           encode in-core object
> >  dump_json        dump in-core object as json (to stdout)
> >
> >  count            print number of generated test objects (to stdout)
> >  select <n>       select generated test object as in-core object
> 
> I'm not sure what "in-core" means here, nor what it means to "select type".

I'll it to 'in-memory'. :)

[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux