Skip to content

Commit d1db67c

Browse files
Update website read function to fetch data from the datastore in batches (massalabs#85)
1 parent 251666f commit d1db67c

File tree

1 file changed

+22
-10
lines changed

1 file changed

+22
-10
lines changed

pkg/website/read.go

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"github.com/massalabs/station/pkg/node"
99
)
1010

11+
const datastoreBatchSize = 64
12+
1113
// Fetch retrieves the complete data of a website as bytes.
1214
func Fetch(network *config.NetworkInfos, websiteAddress string) ([]byte, error) {
1315
client := node.NewClient(network.NodeURL)
@@ -51,18 +53,28 @@ func fetchAllChunks(client *node.Client, websiteAddress string, chunkNumber int3
5153
keys[i] = convert.I32ToBytes(i)
5254
}
5355

54-
response, err := node.ContractDatastoreEntries(client, websiteAddress, keys)
55-
if err != nil {
56-
return nil, fmt.Errorf("calling get_datastore_entries '%+v': %w", keys, err)
57-
}
56+
var dataStore []byte
5857

59-
if len(response) != int(chunkNumber) {
60-
return nil, fmt.Errorf("expected %d entries, got %d", chunkNumber, len(response))
61-
}
58+
for start := 0; start < int(chunkNumber); start += datastoreBatchSize {
59+
end := start + datastoreBatchSize
60+
if end > int(chunkNumber) {
61+
end = int(chunkNumber)
62+
}
6263

63-
var dataStore []byte
64-
for _, entry := range response {
65-
dataStore = append(dataStore, entry.FinalValue...)
64+
batchKeys := keys[start:end]
65+
66+
response, err := node.ContractDatastoreEntries(client, websiteAddress, batchKeys)
67+
if err != nil {
68+
return nil, fmt.Errorf("calling get_datastore_entries '%+v': %w", batchKeys, err)
69+
}
70+
71+
if len(response) != len(batchKeys) {
72+
return nil, fmt.Errorf("expected %d entries, got %d", len(batchKeys), len(response))
73+
}
74+
75+
for _, entry := range response {
76+
dataStore = append(dataStore, entry.FinalValue...)
77+
}
6678
}
6779

6880
return dataStore, nil

0 commit comments

Comments
 (0)