Plasma GitLab Archive
Projects Blog Knowledge


/* $Id: pfs_nn_inodecache.x 235 2010-06-20 22:23:05Z gerd $  -*- c -*- */


Quickly determine inode modifications.

The inodecache is a helper service running on the namenodes. Only the inodecache of the coordinator must be used. One can get a list of available inodecache ports from the function find_inodecaches in Pfs_nn_coord.

The inodecache can quickly determine whether an inodeinfo is still up to date, or whether the sequence number of the inodeinfo is still up to date. This is faster than a regular get_inodeinfo in Pfs_nn_fsys because this can happen outside a transaction, and because often no database query is required.

The inodecache keeps the information about an inode only for a short time. During that period, it arranges with the coordinator that the cache is actively notified when the inode is modified (or more exactly, when a modification is committed). Note that there is still a small delay between this notification and the real check, so whatever the inodecache reports, this may already be outdated. Nevertheless, this information is meaningful when used in the right way:

Assume you want to read the blocks of a file. You have an old inodeinfo struct at hand, and an old blocklist. So how to read blocks while ensuring they are recent? The way to do this is to first trust your old information and to read the block, and then to call the inodecache to check whether your information was correct. If not, you have to update your information with the more expensive get_inodeinfo and get_blocks calls, and to start over. However, if the inodecache says the information was correct, you know you did the right thing. The point here is that the inodecache can only validate actions that already happened, but it cannot give guarantees for the future.

#include "pfs_types.x"

program Inode_cache {
    version V1 {


	void null(void) = 0;


	bool is_up_to_date(hyper, inodeinfo) = 1;
is_up_to_date(inode,ii): Checks whether ii is the current version of the inode metadata for inode. Returns true if this was the case at the moment the RPC was sent by the caller.

Returns false if the inode is not known, if an error occurs, or if it cannot be quickly determined that the inode is actually up to date. So false does not necessarily imply that ii is out of date. In this case, the client should use alternate means of checking this.


	bool is_up_to_date_seqno(hyper, hyper) = 2;
is_up_to_date(inode,seqno): Same check but only for the sequence number of the inode

    } = 1;
} = 0x8000e004;


This web site is published by Informatikbüro Gerd Stolpmann
Powered by Caml