[Gluster-devel] [Gluster-users] User-serviceable snapshots design

Ira Cooper ira at redhat.com
Thu May 8 11:45:19 UTC 2014


Also inline.

----- Original Message -----

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

Yes, if you get rid of the daemon it doesn't have those issues ;).

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

That last note, is merely a warning against changing the properties of the UUID generator, please ignore it.

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

No daemon!  SCRAP IT!  Throw it in the bin, and don't let it climb back out.

What you are proposing: random gfid -> real gfid ; as the mapping the daemon must maintain.

What I am proposing: real gfid + offset -> real gfid ; offset is a per snapshot value, local to the client.

Because the lookup table is now trivial, a single integer per snapshot.  You don't need all that complex infrastructure.

Thanks,

-Ira



More information about the Gluster-devel mailing list