<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, May 8, 2014 at 4:45 AM, Ira Cooper <span dir="ltr">&lt;<a href="mailto:ira@redhat.com" target="_blank">ira@redhat.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Also inline.<br>
<div class=""><br>
----- Original Message -----<br>
<br>
&gt; The scalability factor I mentioned simply had to do with the core<br>
&gt; infrastructure (depending on very basic mechanisms like the epoll wait<br>
&gt; thread, the entire end-to-end flow of a single fop like say, a lookup()<br>
&gt; here). Even though this was contained to an extent by the introduction<br>
&gt; of the io-threads xlator in snapd, it is still a complex path that is<br>
&gt; not exactly about high performance design. That wasn&#39;t the goal to begin<br>
&gt; with.<br>
<br>
</div>Yes, if you get rid of the daemon it doesn&#39;t have those issues ;).<br>
<div class=""><br>
&gt; I am not sure what the linear range versus a non-linear one has to do<br>
&gt; with the design? Maybe you are seeing something that I miss. A random<br>
&gt; gfid is generated in the snapview-server xlator on lookups. The<br>
&gt; snapview-client is a kind of a basic redirector that detects when a<br>
&gt; reference is made to a &quot;virtual&quot; inode (based on stored context) and<br>
&gt; simply redirects to the snapd daemon. It stores the info returned from<br>
&gt; snapview-server, capturing the essential inode info in the inode context<br>
&gt; (note this is the client side inode we are talking abt).<br>
<br>
</div>That last note, is merely a warning against changing the properties of the UUID generator, please ignore it.<br>
<div class=""><br>
&gt; In the daemon there is another level of translation which needs to<br>
&gt; associate this gfid with an inode in the context of the protocol-server<br>
&gt; xlator. The next step of the translation is that this inode needs to be<br>
&gt; translated to the actual gfid on disk - that is the only on-disk gfid<br>
&gt; which exists in one of the snapshotted gluster volumes. To that extent<br>
&gt; the snapview-s xlator needs to know which is the glfs_t structure to<br>
&gt; access so it can get to the right gfapi graph. Once it knows that, it<br>
&gt; can access any object in that gfapi graph using the glfs_object (which<br>
&gt; has the real inode info from the gfapi world and the actual on-disk gfid).<br>
<br>
</div>No daemon!  SCRAP IT!  Throw it in the bin, and don&#39;t let it climb back out.<br>
<br>
What you are proposing: random gfid -&gt; real gfid ; as the mapping the daemon must maintain.<br>
<br>
What I am proposing: real gfid + offset -&gt; real gfid ; offset is a per snapshot value, local to the client.<br>
<br>
Because the lookup table is now trivial, a single integer per snapshot.  You don&#39;t need all that complex infrastructure.<br></blockquote><div><br></div><div>The purpose for the existence of the daemon is two:</div><div>
<br></div><div>- client cannot perform privileged ops to glusterd regarding listing of snaps etc.</div><div><br></div><div>- limit the total number of connections coming to bricks. If each client has a new set of connections to each of the snpashot bricks, the total number of connections in the system will become a function of the total number of clients * total number of snapshots.</div>
<div><br></div><div>gfid management is something completely orthogonal, we can use the current random gfid or a more deterministic one (going to require a LOT more changes to make gfids deterministic, and what about already assigned ones, etc.) whether the .snap view is generated on client side or server side.</div>
</div></div></div>