1BFS - ToDo, November 5th, 2008 2----- 3 4BlockAllocator 5 6 - the BlockAllocator is only slightly optimized 7 - the allocation policies will have to stand against some real world tests 8 9 10DataStream 11 12 - Inode::GrowStream(): merging of block_runs doesn't work between range/block boundaries 13 14 15Queries 16 17 - There shouldn't be any cases where you can speed up a query with reordering the query expression - test it 18 - check if the query has to be checked for a live update 19 20 21BPlusTree 22 23 - BPlusTree::Remove() could trigger CachedNode::Free() to go through the free nodes list and free all pages at the end of the data stream 24 - BPlusTree::Remove() could let the tree shrink (simple kind of reorganization) 25 - updating the TreeIterators doesn't work yet for duplicates (which may be a problem if a duplicate node will go away after a remove) 26 - BPlusTree::RemoveDuplicate() could merge the contents of duplicate node with only a few entries to save some space (right now, only empty nodes are freed) 27 28 29Inode 30 31 - exchange Inode::OldLastModified() with Inode::NewLastModified(), and don't change the last_modified field directly in Inode::WriteAt() for consistency in case of a crash 32 - the size is only updated in bfs_close() - but if the system crashes before, the entry in the size index doesn't match the one in the inode anymore - it would be better to let the data.size not reflect the real file size in this case (since the max_xxx_range entries are always correct) 33 - Inode::FillGapWithZeros() currently disabled; apart from being slow, it really shouldn't be executed while a transaction is running, because that stops all other threads from doing anything (which can be a long time for a 100 MB file) 34 35 36Indices 37 38 - consider Index::UpdateLastModified() writing back the updated inode 39 - clearing up Index::Update() and live query update (seems to be a bit confusing right now) 40 - investigate adding an index cache to improve performance 41 42 43Attributes 44 45 - for indices, we could get the old data from there when doing a query update 46 - "pos" is ignored when writing attributes in the small data section (reading works) 47 48 49Future BFS 50 51 - put more than just an inode into a block 52 - make query indices useful for user oriented queries (*[Hh][Oo][Ww]?*) 53 - delayed allocation to be able to make better block allocation decisions 54 - if the system crashes between bfs_unlink() and bfs_remove_vnode(), the inode can be removed from the tree, but its memory is still allocated - this can happen if the inode is still in use by someone (and that's what the "chkbfs" utility is for, mainly). 55 - add delayed index updating (+ delete actions to solve the issue above) 56 - multiple log files, parallel transactions? (note that parallel transactions would require more locking to be done) 57 - variable sized log file 58 - the access to the block bitmap is currently managed using a global lock (doesn't matter as long as transactions are serialized) 59 - Check permissions of the parent directories for query results 60 - ... 61 62 63----- 64Axel Dörfler 65axeld@pinc-software.de 66