2025-02-13 16:38:07 +01:00
Flujo de Descarga
2024-10-01 13:46:00 +03:00
2025-02-13 16:38:07 +01:00
Secuencia de interacciones que resultan en la transferencia de bloques de datos a través de la red.
## Almacén Local (Local Store)
Cuando los datos están disponibles en el almacén de bloques local (local blockstore),
2024-10-01 13:46:00 +03:00
```mermaid
sequenceDiagram
actor Alice
participant API
Alice->>API: Download(CID)
API->>+Node/StoreStream: Retrieve(CID)
2025-02-13 16:38:07 +01:00
loop Obtener bloque de manifiesto, luego bloques de datos
2024-10-01 13:46:00 +03:00
Node/StoreStream->>NetworkStore: GetBlock(CID)
NetworkStore->>LocalStore: GetBlock(CID)
LocalStore->>NetworkStore: Block
NetworkStore->>Node/StoreStream: Block
end
2025-02-13 16:38:07 +01:00
Node/StoreStream->>Node/StoreStream: Manejar codificación de borrado (Handle erasure coding)
Node/StoreStream->>-API: Flujo de datos (Data stream)
API->>Alice: Descarga en flujo del bloque (Stream download of block)
2024-10-01 13:46:00 +03:00
```
2025-02-13 16:38:07 +01:00
## Almacén de Red
Cuando los datos no se encuentran en el almacén de bloques local, el motor de intercambio de bloques se utiliza para descubrir la ubicación del bloque dentro de la red. Se establecerá una conexión con el/los nodo(s) que tienen el bloque, y el intercambio puede tener lugar.
2024-10-01 13:46:00 +03:00
```mermaid
sequenceDiagram
box
actor Alice
participant API
participant Node/StoreStream
participant NetworkStore
participant Discovery
participant Engine
end
box
participant OtherNode
end
Alice->>API: Download(CID)
API->>+Node/StoreStream: Retrieve(CID)
2025-02-13 16:38:07 +01:00
Node/StoreStream->>-API: Flujo de datos (Data stream)
API->>Alice: Comienza la descarga en flujo (Download stream begins)
loop Obtener bloque de manifiesto, luego bloques de datos
2024-10-01 13:46:00 +03:00
Node/StoreStream->>NetworkStore: GetBlock(CID)
NetworkStore->>Engine: RequestBlock(CID)
2025-02-13 16:38:07 +01:00
opt CID no conocido
2024-10-01 13:46:00 +03:00
Engine->>Discovery: Discovery Block
2025-02-13 16:38:07 +01:00
Discovery->>Discovery: Localiza pares que proporcionan el bloque (Locates peers who provide block)
Discovery->>Engine: Pares (Peers)
Engine->>Engine: Actualizar administración de pares (Update peers admin)
2024-10-01 13:46:00 +03:00
end
2025-02-13 16:38:07 +01:00
Engine->>Engine: Seleccionar par óptimo (Select optimal peer)
Engine->>OtherNode: Enviar lista WantHave (Send WantHave list)
OtherNode->>Engine: Enviar Presencia de Bloque (Send BlockPresence)
Engine->>Engine: Actualizar administración de pares (Update peers admin)
Engine->>Engine: Decidir comprar bloque (Decide to buy block)
Engine->>OtherNode: Enviar lista WantBlock (Send WantBlock list)
OtherNode->>Engine: Enviar Bloque (Send Block)
2024-10-01 13:46:00 +03:00
Engine->>NetworkStore: Block
2025-02-13 16:38:07 +01:00
NetworkStore->>NetworkStore: Añadir al almacén local (Add to Local store)
NetworkStore->>Node/StoreStream: Resolver Bloque (Resolve Block)
Node/StoreStream->>Node/StoreStream: Manejar codificación de borrado (Handle erasure coding)
Node/StoreStream->>API: Empujar datos al flujo (Push data to stream)
2024-10-01 13:46:00 +03:00
end
2025-02-13 16:38:07 +01:00
API->>Alice: Finaliza la descarga en flujo (Download stream finishes)
2024-10-01 13:46:00 +03:00
```