research/remote_log/remote_log_spec.md

133 lines
2.3 KiB
Markdown
Raw Normal View History

2019-09-06 09:54:39 +00:00
# Remote log specification
<!-- Live version atm: https://notes.status.im/HPLXoeM3Sn6e8sG8TQ2Clw# -->
2019-09-04 12:45:11 +00:00
> Version: 0.1 (Draft)
>
> Authors: Oskar Thorén oskar@status.im, Dean Eigenmann dean@status.im
## Table of Contents
2019-09-06 09:54:39 +00:00
TBD.
2019-09-04 12:45:11 +00:00
## Abstract
2019-09-21 06:13:39 +00:00
A remote log is a replication of a local log. This means a node can read data
from a node that is offline.
2019-09-06 09:54:39 +00:00
2019-09-04 12:45:11 +00:00
## Definitions
2019-09-21 07:17:16 +00:00
| Term | Definition |
| ----------- | -------------------------------------------------------------------------------------- |
| CAS | Content-addressed storage. Stores data that can be addressed by its hash. |
| Name system | Name system. Associates mutable data to a name. |
| Remote log | Replication of a local log at a different location. |
2019-09-06 09:54:39 +00:00
2019-09-04 12:45:11 +00:00
## Roles
1. Node
2. Name system (NS)
3. Content-addressed storage (CAS)
2019-09-06 09:54:39 +00:00
## Wire Protocol
### Payloads
#### CAS service
```protobuf
package vac.cas;
service CAS {
rpc Add(Content) returns (Address) {}
rpc Get(Address) returns (Content) {}
}
message Address {
bytes id = 1;
}
message Content {
bytes data = 1;
}
```
##### NS service
```protobuf
service NS {
rpc Update(NameUpdate) returns (Response) {}
rpc Fetch(Query) returns (Content) {}
}
message NameUpdate {
string name = 1;
bytes content = 2;
}
message Query {
string name = 1;
}
message Content {
bytes data = 1;
}
// XXX: Anything? Ok/Error, enum?
// XXX: Also bad naming
message Response {
bytes data = 1;
}
```
<!-- // TODO: NameInit? -->
2019-09-21 07:17:16 +00:00
<!-- TODO: Consider extending pair with (optional) data -->
2019-09-06 09:54:39 +00:00
#### Remote
```protobuf
message RemoteLog {
Body body = 1;
bytes tail = 2;
message Body {
repeated Pair pair = 1;
}
message Pair {
bytes remoteHash = 1;
bytes localHash = 2;
}
}
```
2019-09-04 12:45:11 +00:00
## Flow
2019-09-06 09:54:39 +00:00
<!-- This section is only here for research right now, might move or be unnecessary -->
<!-- Wil likely be replaced with similar flow to one in MVDS.spec -->
```mermaid
sequenceDiagram
Alice->>CAS: Add content
CAS->>Alice: Address
Alice->>NS: Update NameUpdate
NS->>Alice: Response
Bob->>NS: Fetch
NS->>Bob: Content
Bob->>CAS: Fetch Query
CAS->>Bob: Content
```
<!--
2019-09-04 12:45:11 +00:00
## Footnotes
2019-09-06 09:54:39 +00:00
TBD.
2019-09-04 12:45:11 +00:00
## Acknowledgements
2019-09-06 09:54:39 +00:00
TBD.