NAME
lab 23 - annotating a file system
DESCRIPTION
.I This lab was cut and pasted from my homepage. It is not new. .R
i have tried out some experiments with annotating the filesystem; really, several iterations of the same idea.
my latest attempt is tickfs , which i think comes close to doug mcilroy's idea of a metadata file system.
each file served by tickfs is a binary relation, the key is usually an absolute pathname, and the attribute is defined by the name of the relation. each relation is also bi-temporal. it's a historical record of changes to each key, value pair and it determines whether a key, value pair is true at a given time.
adding metadata is simple
% echo ${quote i . /doc/sh.ms 'the inferno shell' } > /n/tickfs/desc
% echo ${quote i . /doc/sh.ms 'rogger peppe' } > /n/tickfs/author
the dot indicates the current time, but any time represented as seconds since the epoch can be given.
queries are pipelines
% 9ls sh.ms |taq /n/tickfs/author |taq -j /n/tickfs/desc
the query uses the timestamp of the files to return the currently effective values for the attributes 'author' and 'desc'.
it relies on a disciplined user to maintain a single logical namespace and to keep it consistent with the namespace of keys within tickfs. plan9 and inferno make it easy to alter the namespace; but the discipline of arranging a clear, consistent namespace is harder.
an example that includes fossil is to bind a directory from dump over the logical namespace. the currently effective values will likely vary over time, and so obtain different results from tickfs.
% 9ls /doc |taq /n/tickfs/desc
% bind /n/dump/2004/0101/doc /doc
% 9ls /doc |taq /n/tickfs/desc
also, i have tried indexing file contents within tickfs, so combinations of keyword search and named descriptors can be used
% search bug |taq /n/tickfs/author |grep caerwyn |taq /n/tickfs/desc
tickfs runs on inferno, but lookfs , which is an earlier iteration using libstyx, is very similar and should run on plan9.
FILES
The source for this lab is in the archive on my homepage.