Re: User-serviceable snapshots design

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

 



Inline.


On 05/07/2014 10:59 PM, Ira Cooper wrote:
Anand, I also have a concern regarding the user-serviceable snapshot feature.

You rightfully call out the lack of scaling caused by maintaining the gfid -> gfid mapping tables, and correctly point out that this will limit the use cases this feature will be applicable to, on the client side.

If in fact gluster generates its gfids randomly, and has always done so, I propose that we can change the algorithm used to determine the mapping, to eliminate the lack of scaling of our solution.

We can create a fixed constant per-snapshot.  (Can be in just the client's memory, or stored on disk, that is an implementation detail here.)  We will call this constant "n".

I propose we just add the constant to the gfid determine the new gfid.  It turns out that this new gfid has the same chance of collision as any random gfid.  (It will take a moment for you to convince yourself of this, but the argument is fairly intuitive.)  If we do this, I'd suggest we do it on the first 32 bits of the gfid, because we can use simple unsigned math, and let it just overflow.  (If we get up to 2^32 snapshots, we can revisit this aspect of the design, but we'll have other issues at that number.)

By using addition this way, we also allow for subtraction to be used for a later purpose.

Note: This design relies on our random gfid generator not turning out a linear range of numbers.  If it has in the past, or will in the future, clearly this design has flaws.  But, I know of no such plans.  As long as the randomness is sufficient, there should be no issue.  (IE: It doesn't turn out linear results.)

I don't claim to understand your question completely but have a feeling you are going off the track here. So bear with me, as my explanation could be off the mark as well.

The scalability factor I mentioned simply had to do with the core infrastructure (depending on very basic mechanisms like the epoll wait thread, the entire end-to-end flow of a single fop like say, a lookup() here). Even though this was contained to an extent by the introduction of the io-threads xlator in snapd, it is still a complex path that is not exactly about high performance design. That wasn't the goal to begin with.

I am not sure what the linear range versus a non-linear one has to do with the design? Maybe you are seeing something that I miss. A random gfid is generated in the snapview-server xlator on lookups. The snapview-client is a kind of a basic redirector that detects when a reference is made to a "virtual" inode (based on stored context) and simply redirects to the snapd daemon. It stores the info returned from snapview-server, capturing the essential inode info in the inode context (note this is the client side inode we are talking abt).

In the daemon there is another level of translation which needs to associate this gfid with an inode in the context of the protocol-server xlator. The next step of the translation is that this inode needs to be translated to the actual gfid on disk - that is the only on-disk gfid which exists in one of the snapshotted gluster volumes. To that extent the snapview-s xlator needs to know which is the glfs_t structure to access so it can get to the right gfapi graph. Once it knows that, it can access any object in that gfapi graph using the glfs_object (which has the real inode info from the gfapi world and the actual on-disk gfid).


Anand



Thanks,

-Ira / ira@(redhat.com|samba.org)

PS: +1 to Jeff here.  He's spotting major issues, that should be looked at, above the issue above.

----- Original Message -----
Attached is a basic write-up of the user-serviceable snapshot feature
design (Avati's). Please take a look and let us know if you have
questions of any sort...
A few.

The design creates a new type of daemon: snapview-server.

* Where is it started?  One server (selected how) or all?

* How do clients find it?  Are we dynamically changing the client
   side graph to add new protocol/client instances pointing to new
   snapview-servers, or is snapview-client using RPC directly?  Are
   the snapview-server ports managed through the glusterd portmapper
   interface, or patched in some other way?

* Since a snap volume will refer to multiple bricks, we'll need
   more brick daemons as well.  How are *those* managed?

* How does snapview-server manage user credentials for connecting
   to snap bricks?  What if multiple users try to use the same
   snapshot at the same time?  How does any of this interact with
   on-wire or on-disk encryption?

I'm sure I'll come up with more later.  Also, next time it might
be nice to use the upstream feature proposal template *as it was
designed* to make sure that questions like these get addressed
where the whole community can participate in a timely fashion.
_______________________________________________
Gluster-users mailing list
Gluster-users@xxxxxxxxxxx
http://supercolony.gluster.org/mailman/listinfo/gluster-users


_______________________________________________
Gluster-users mailing list
Gluster-users@xxxxxxxxxxx
http://supercolony.gluster.org/mailman/listinfo/gluster-users




[Index of Archives]     [Gluster Development]     [Linux Filesytems Development]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux