digraph { subgraph { rank=same; ordering=in; wcfs [label="wcfs"] invProto [label="open/invalidation\nprotocol", style=filled fillcolor=grey95] client [label="client"] wcfs -> invProto; invProto -> client [dir=back]; // XXX = invProto <- client } // wcfs -> wcfs_simple; // wcfs -> Sinvtree; // wcfs -> δR; wcfs -> liveCacheControl; wcfs -> autoexit [color=grey]; wcfs -> wcfsInvProcess; wcfs -> wcfsRead; wcfs -> wcfsGC [color=grey]; wcfsInvProcess -> ZODB_go_inv; wcfsInvProcess -> zconnCacheGet; wcfsInvProcess -> zobj2file; wcfsInvProcess -> δFtail; wcfsInvProcess -> fuseRetrieveCache; wcfsInvProcess -> _wcfs_zhead; ZODB_go_inv -> fs1_go_inv; ZODB_go_inv -> zeo_go_inv; ZODB_go_inv -> neo_go_inv; ZODB_go_inv -> zcache_go_inv [style=dashed, color=grey]; // wcfs works without raw cache now wcfsRead -> blktabGet; wcfsRead -> δFtail; wcfsRead -> mappingRegister; wcfsRead -> headWatch; zobj2file -> zblk2file; zobj2file -> zbtree2file; zbtree2file -> δBTree [color=grey]; // wcfs_simple -> Btree_read; // wcfs_simple -> ZBlk_read; // wcfs_simple -> autoexit; client -> wcfsRead; client -> mappingRegister; client -> clientInvHandle; // client -> δR; client -> nowcfs; // client -> zodburl; // client -> wcfs_spawn; clientInvHandle -> headWatch; headWatch -> fileSock; _wcfs_zhead -> fileSock; // Btree_read -> ZODB_read; // ZBlk_read -> ZODB_read; // ZODB_read -> ogorek_persref; // wcfs_simple [label="wcfs no\ninvalidations", style=filled fillcolor=grey95] // wcfs_spawn [label="spawn wcfs", style=filled fillcolor=lightyellow] nowcfs [label="!wcfs mode", style=filled fillcolor=grey95] wcfsInvProcess [label="process\nZODB invalidations", style=filled fillcolor=grey95] zconnCacheGet [label="zonn.\n.Cache.Get", style=filled fillcolor=lightyellow] zobj2file [label="Z* → file/[]#blk", style=filled fillcolor=grey95] zblk2file [label="ZBlk*\n↓\nfile/[]#blk", style=filled fillcolor=lightyellow] zbtree2file [label="BTree/Bucket\n↓\nfile/[]#blk"] δBTree [label="δ(BTree)"] fuseRetrieveCache [label="FUSE:\nretrieve cache", style=filled fillcolor=lightyellow] _wcfs_zhead [label=".wcfs/\nzhead", style=filled fillcolor=lightyellow] wcfsRead [label="read(#blk)"] blktabGet [label="blktab.Get(#blk):\nmanually + → ⌈rev(#blk)⌉", style=filled fillcolor=grey95] δFtail [style=filled fillcolor=lightyellow] mappingRegister [label="mmappings:\nregister/maint"] clientInvHandle [label="process\n#blk invalidations"] headWatch [label="#blk ← head/watch"] fileSock [label="FileSock", style=filled fillcolor=lightyellow] ZODB_go_inv [label="ZODB/go\ninvalidations", style=filled fillcolor=grey95] fs1_go_inv [label="fs1/go\ninvalidations", style=filled fillcolor=lightyellow] zeo_go_inv [label="zeo/go\ninvalidations"] neo_go_inv [label="neo/go\ninvalidations"] zcache_go_inv [label="ZCache/go\n←watchq", color=grey, fontcolor=grey] // Btree_read [label="BTree read", style=filled fillcolor=lightyellow] // ZBlk_read [label="ZBigFile / ZBlk* read", style=filled fillcolor=lightyellow] // ZODB_read [label="ZODB deserialize object", style=filled fillcolor=lightyellow] // ogorek_persref [label="ogórek:\npersistent references", style=filled fillcolor=lightyellow]; // Sinvtree [label="server: inv. tree"] // δR [label="δR encoding"] // zodburl [label="zstor -> zurl", style=filled fillcolor=grey95] wcfsGC [label="GC\n@rev/"] liveCacheControl [label="ZODB/go\nLiveCache fix", style=filled fillcolor=grey95] autoexit [label="autoexit\nif !activity"] }