Jonathan Briggs writes: > On Tue, 2005-05-31 at 15:01 -0600, Jonathan Briggs wrote: > > I should create an example. > > > > Wherever I used True Name previously, use OID instead. True Name was > > simply another term for a unique object identifier. > > > > Three files with OIDs of 1001, 1002, and 1003. > > Object 1001: > > name: /tmp/A/file1 > > name: /tmp/A/B/file1 > > name: /tmp/A/B/C/file1 > > > > Object 1002: > > name: /tmp/A/file2 > > > > Object 1003: > > name: /tmp/A/B/file3 > > > > Three query objects (directories) with OIDs of 1, 2, and 3. > > Object 1: > > name: /tmp/A > > name: /tmp/A/B/C/A > > query: name begins with /tmp/A/ > > query result cache: B->2, file1->1001, file2->1002 > > > > Object 2: > > name: /tmp/A/B > > query: name begins with /tmp/A/B/ > > query result cache: C->3, file1->1001, file3->1003 > > > > Object 3: > > name: /tmp/A/B/C > > query: name begins with /tmp/A/B/C/ > > query result cache: A->1, file1->1001 > > > > Now there is a A -> B -> C -> A directory loop. But removing > > name: /tmp/A/B/C/A from Object 1 fixes the loop. Deleting Object 1 also > > fixes the loop. Deleting any of Object 1, 2 or 3 does not affect any > > other object, because in this scheme, directory objects do not need to > > actually exist: they are just queries that return objects with certain > > names.
One problem with the above is that directory structure is inconsistent with lists of names associated with objects. For example, file1 is a child of /tmp/A/B/C/A, but Object 1001 doesn't list /tmp/A/B/C/A/file1 among its names. > > I forgot to address Nikita's point about reclaiming lost cycles. In > this case, let me create Object 4 for /tmp > Object 4: > name: /tmp > query: name begins with /tmp/ > query result cache: A->1 > > Now, if we delete Object 4, are Objects 1,2,3 lost? I would say not > because they still have names. When the shell calls chdir("/tmp") a new > query object (directory) must be created dynamically, and Objects > 1001,1002,1003 still have their names that start with /tmp and so they > immediately appear again. Their names still start with /, so the top > level query will still find them and /tmp as well. Object 4 is "/tmp". Once it was removed what does it _mean_ for, say, Object 1003 to have a name "/tmp/A/B/file3"? What is "/tmp" bit there? Just a string? If so, and your directories are but queries, what does it mean for directory to be removed? How mv /tmp/A /tmp/A1 is implemented? By scanning whole file system and updating leaf name-lists? It seems that what you are proposing is a radical departure from file system namespace as we know it. :-) In your scheme all structural information is encoded in leaves _only_, and directories just do some kind of pattern matching. This is closer to a relational database than to the current file-systems where directories are the only source of the structural inform