[Gluster-devel] location hint table - requirements
Anand V. Avati
avati at zresearch.com
Sat Aug 12 19:15:08 UTC 2006
Here are the formal requirements (expressed as API) from location hint
* Create a new hint table
hint_table_t * create_new_hint_table (int size);
creates a new hint table, initializes and optimizes its operation and
makes it usable from the very next call.
size is the number of hints the table can remember.
* Update hint
update_hint (hint_table_t *table, const char *path, void *value);
makes the hint_table learn about the new knowledge that 'path' is
associated with 'value'.
If all hint slots are storing hints, lookup a hint which was refered
for oldest, and not still being referred.
* Refer hint
void * get_hint (hint_table_t *table, const char *path);
helps the caller by giving a hint, and makes a note that the caller is
using the hint knowledge
* Finish refering hint
void forget_hint (hint_table_t *table, void * hint); 
tell the hint manager that this hint is no more used by you, so that
it aids its decision of reusing this slot for new hint updation
* Invalidate hint
void invalidate_hint (hint_table_t *table, const char *path); 
tell the hint manager that this hint is no more valid (example the
file got deleted).
Another approach is to use update_hint with value as NULL.
can be called simultaneously by different threads on the same hint_table
. For optimization, it can be enforced that every client of the
location hint manager should have a structure/pointer dedicated for the
use of hint manager. This pointer can be used as a back-reference to
the container so that operations like forget_hint can happen without any
kind of searching.
. the hints may already be being referred by another client. The slot
should still be reserved but should not be freshly refereable (by
Anand V. Avati
More information about the Gluster-devel