This section describes what the code does now, as written in the design documents of the server and the client.
The pieces
One name leads to the servers. The sync tool is yours; SpliceFS does not copy data between servers.
The servers are called nodes. Each one runs the server program splicefsd and holds the files as plain files in a folder. You keep those folders equal with any sync tool you like, because SpliceFS does not copy data between servers today. One host name, the cluster host, points at one, several or all of the servers. The client program splicefs is told only that name.
Connecting
Only the cluster host is asked for the list. After that the client uses each server's own address.
The client logs in at the cluster host over HTTPS and asks it for the list of servers. Every server publishes its own direct address, and any server can answer with the whole list. The small files that hold users and server addresses travel between servers with the same sync tool. After that the client talks to each server directly. It asks the cluster host for the list again every minute, so servers can join and leave.
Reading a file
Three servers send different blocks at the same time. The client puts them in order and keeps them in its cache.
The client reads a file in blocks, 5 MiB each by default. It asks several servers for different blocks at the same time and puts them together in order, so the speeds add up. Blocks that were read are kept in a cache on local disk, and a second read comes from the cache. Small files and small isolated reads are read straight from the servers and are not cached.
When a server fails
A block that node-2 did not deliver is asked from another server. The reader does not notice.
If a server is slow or does not answer, the client asks another server for that block and uses the first complete answer. The read goes on and the mount stays up. A server whose copy of a file has changed is dropped for that file. If no server can deliver a block within a time limit, the read fails with an I/O error and does not hang.
What it does not do today
Linux and FreeBSD mount with FUSE. macOS mounts through a small local NFS server that is part of the client.
It is read-only. Nothing can be written through the mount.
It does not copy data between servers. Your sync tool does that.
A removed or disabled user keeps access until the token expires, 30 minutes by default.
A token from one server is rejected by another until the sync tool has delivered the first server's key file.
A client that is restarted while no server can be reached cannot list folders, although cached file contents are still on its disk.
macOS limits: a read that waits longer than about 9 seconds fails, requests are served one at a time per connection so speed stays below Linux, and an outage can make a new name look missing for up to 30 seconds.
Plan, not built. One change has one outcome: every server that holds the file commits it, or none does.
Clients will write through the mount. A change to a file is a transaction: it happens completely or not at all, on every server that holds the file.
Cohorts
Plan, not built. Six servers in two cohorts of three. In cohort 1 one member is lost and the file is still complete; blocks 2 and 5 (thick outline) come from the other members.
A cohort is a group of servers that hold data together, the way the disks of a RAID set do. The data survives the loss of a member. Reads are spread over the members.
Locks and full POSIX behavior
Plan, not built. Client 1 holds the lock on a file. Client 2, at another place, waits.
A lock that a program takes on a file through one client is honored by every other client, wherever it is. The goal is full POSIX behavior, so ordinary programs work on a SpliceFS mount without changes.
Near and far, and where data lives
Plan, not built. All three clients are treated the same way. One folder is held at locations A and B only, another is held everywhere.
SpliceFS aims to treat a client on the local network, a client over a VPN and a client over the public internet the same way. Geographic tenancy lets a rule on one file, one directory or a whole cluster say at which locations that data is held.
The plan by version
Plan, not built. The project is in 0.x now. 1.x and 2.x come later.
0.x is the core of the SpliceFS protocol, and access controls. 1.x is enterprise tooling and visibility. 2.x: only time will tell.