shithub: neoventi

ref: d42b5ae9b1b41d92fb88cffa6bdb930c2b476570
dir: /partitioner/design/

View raw version
Needs to:

* Be given a list of disks
	* Raw disks, partitions, files
		* Disks can be partitioned
		* Files and partitions must be used as a full partition each
	* Disks may be empty
		* Can partition, or use whole disk as one region
	* Disks may contain partitions and empty space
		* In which case, may want to use part of the disk
			* Replace existing partitions
			* Use unused space
			* If neither, unusable
		* Or realize it's the wrong disk

* Be given desired constraints
	* How many fossils, in what size range?

* Determine usable regions
	* Size
	* Disk
	* Offset
	* Redundancy
	* Sequential performance
	* Random-access performance

* Determine what to do with each region within constraints
v1:
	* Have bloom filter if there's enough space
	* Allocate five fossils, each 1% of total space
	* Statically size index and arenas as percentages of the total remaining space
	* Create one index section, one arena partition, bloom filter, and fossils
		* Try to give index minimal random read latency, and arena maximum sequential read speed
	* No interactivity

v2: 
	* Give the user the ability to edit the plan before executing it

v3:
	* Talk with /dev/fs, take into account redundancy
	* Create multiple index sections and arena partitions, as needed
	* In order of highest to lowest priority:
		* Try not to use arena disks for anything else
		* Try not to use fossil disks for anything else
		* Try not to use index disks for anything else


* Create the partitions
* Format the partitions
* Generate the venti configuration file