I know that etcd uses the Raft protocol to achieve consensus among multiple nodes. Raft is usually presented as storing data as key-value pairs in the replicated log; does etcd store its key-value data directly in that Raft log, or is there some sort of abstraction/indirection between the Raft log and etcd's data store?