1. A distributed storage system comprising: a curator managing striping of data across non-transitory memory by: dividing a file into data stripes and replicating the data stripes into data chunks; allocating storage of the data stripes and data chunks in the non-transitory memory; and memory hosts in communication with the curator, each memory host comprising: a set of remote direct memory accessible regions of the non-transitory memory allocated by the curator, the memory regions storing data chunks of files, each data chunk associated with one or more clients in an access control list, the access control list provides an access permission for each associated client of each associated data chunk; a network interface controller in communication with the memory and servicing remote direct memory access requests; and a computing processor in communication with the memory and the network interface controller, the computing processor executing a host process that registers the set of remote direct memory accessible regions of the memory with the network interface controller; wherein in response to receiving a connection request from a client process of a client in communication with curator and the memory host to access a data chunk, the host process establishes a remote direct memory access capable connection with the client process when the client is associated with the data chunk in the access control list, the host process associating the established connection with a protection domain having associated memory regions; and wherein in response to a notification from the client indicating that the data chunk stored on one of the memory regions is corrupt during the established connection between the client process and the host process, the curator attempting to reconstruct the corrupt data chunk, or if the curator is unable to reconstruct the corrupt data chunk, the curator replacing the corrupt data chunk with a new uninitialized data chunk.