[Gluster-devel] lookup caching
Olivier Le Cam
Olivier.LeCam at crdp.ac-versailles.fr
Mon Apr 12 09:26:01 UTC 2010
Hello there,
Raghavendra G wrote:
> I can see three protocol calls:
> - client_open() (to both servers)
> - client_stat() (to one server only: load balancing?)
> - client_flush() (to both servers)
>
>
> io-cache indeed sends open and flush to server. This is needed for
> correct working of io-cache. As you've told below, since you are
> overriding lookup call, stat is sent to server (stat and lookup are two
> different calls).
OK. So no easy workaround can get rid of that. Right?
> since lookup is being unwound if the stat is cached for an inode, you've
> to also implement calls like unlink, rmdir (which deletes
> files/directories) and flush the cache corresponding to the inode.
> Otherwise lookup will be succeeding even for unlinked files, but the
> actual operations (like open/chmod/chown etc) will fail.
I have added this yesterday afternoon, as well as some LOCK/UNLOCK in
order to prevent concurrency problems. :)
> You should also handle calls which can change the stat of a file or
> directory (like write/chmod/chown). As a simple implementation you can
> just flush the cache.
I did override setattr and fsetattr (for flushing the cache). Is it
wrong? Do I have to override write/chmod/chown either?
> if (cache->next) {
> do {
> cache = cache->next;
> if (cache->ino == ino) {
>
>
> instead of just returning, you can choose to update the cached stat with
> the one passed as argument to this procedure.
>
>
> return 0; /* already in */
> }
> } while(cache->next);
> }
Thanks for suggestion.
Best regards,
--
Olivier
More information about the Gluster-devel
mailing list