# A quick overview of the project layout

```
├── block
│   ├── aoe
```

The package for using torus as a block device. A reference example of block device volumes.
`aoe` contains an implementation of an ATA-over-Ethernet server based on a block volume

```
├── blockset
```
Implementations of the Blockset interface.


```
├── cmd
│   ├── torusd
│   ├── torusblk
│   ├── torusctl
│   └── ringtool
```

The `main` functions that each produce a binary. `torusd` is the main server, `torusctl` manipulates and queries multiple servers through etcd, organizes volumes, and manages snapshots.  `torusblk` attaches and mounts block devices, and `ringtool` is an experiment for measuring the rebalance properties of multiple rings.

```
├── contrib
│   └── kubernetes
```

Contributions, currently containing a guide for setting up torus on kubernetes

```
├── distributor
│   ├── protocols
│   │   ├── adp
│   │   ├── grpc
│   ├── rebalance
```

Distributor is the package that implements the storage interface, but takes care of all the network requests and distribution. Therefore, it understands various peer-to-peer protocols, and how to rebalance data between other peers. 

```
├── Documentation
```

You are here!

```
├── gc
```
A separate, small package that can be used in other goroutines to track the liveness of 

```
├── integration
```
Long-running integration tests live here. They spin up a number of virtual nodes, interact with them, and then shut them down.

```
├── internal
│   ├── http
│   └── nbd
```

Packages that are specific to torus. and shouldn't be imported from the outside. `http` defines HTTP routes for torus servers/clients to host, and `nbd` is a hard fork of an NBD library (greatly cleaned up) that may, in the future, be worth splitting into a proper repository.

```
├── metadata
│   ├── etcd
│   └── temp
```

`metadata` holds the implementations of the MDS interface. Currently there's an ephermeral, in-memory temp store (useful for tests) and etcd.

```
├── models
```

Protobufs for serialization and deserialization.

```
├── ring
```

Implementations of the consistent hash ring interface. 

```
├── storage
```
Implementations of underlying storage engines (mmap files, temporary map, potentially bare disks, etc)

