Skip to content
This repository was archived by the owner on Dec 29, 2021. It is now read-only.
This repository was archived by the owner on Dec 29, 2021. It is now read-only.

Distributed replication status #81

@martinheidegger

Description

@martinheidegger

From a user-perspective of DAT, one thing problematic at the moment is that replication feels not certain/stable. The green bar shown in DAT-Desktop only signals if its replicated once and how many peers are listening. It doesn't mention what nodes are connected (particularly, a backup-node) or whether all of the peers replicated all data of all versions. Also it doesn't mention if second level or higher peers (nodes only connected to a peer, but not to the original client) have replicated data, which might very well happen if a node is disconnected for a while.

One approach I could think of:

  1. When a client seeds and/or receives a dat the first time they create a new Dat that is used to transmit the distribution status.
  2. The client uses a Message protocol (Dat: A message-based system on top of raw streams #62) to tell the peers the dat-key it uses to store the progress.
  3. One download it stores the bitfield of the downloaded data in the specified dat.
  4. Once another peer tells the client about that other peers progress-DAT, the client notes that peer in its own distribution status.
  5. The client also replicates the other peers status and acts as a seed.
  6. (optional) The client can also add other data (such as labels or identification) in the progress-DAT to identify itself.

The Problem with this approach would be that every client would need to connect/store every other clients data. Which - even assuming sparse downloads - could mean a explosion in dat connections and data downloaded. Also: malicious clients could store malicious data (i.e very big) in the progress-data; Which could probably prevented with a size-limit?!

Now, with that in mind: How would you solve that? Would this make sense at a lower level?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions