2 Commits

Author SHA1 Message Date
Râu Cao
c21512fa0b Add error handling and retries for loading/pinning 2022-11-02 12:58:07 +01:00
Râu Cao
4888d1be78 Don't automatically watch for events 2022-11-02 12:57:53 +01:00
2 changed files with 24 additions and 8 deletions

View File

@@ -12,7 +12,7 @@ const argv = require('yargs')
host: 'localhost', host: 'localhost',
port: '5001', port: '5001',
protocol: 'http', protocol: 'http',
watch: true, watch: false,
progress: false, progress: false,
bootstrapNode: `${defaultPeers[0].Addrs[0]}/ipfs/${defaultPeers[0].ID}` bootstrapNode: `${defaultPeers[0].Addrs[0]}/ipfs/${defaultPeers[0].ID}`
}) })

View File

@@ -32,7 +32,7 @@ class IpfsPinner {
for (const contract of contracts) { for (const contract of contracts) {
debug(`Pinning data from ${contract.constructor.name}...`); debug(`Pinning data from ${contract.constructor.name}...`);
const itemCount = await contract.count; const itemCount = await contract.count;
debug('Item count:', itemCount); debug(`${contract.constructor.name} item count:`, itemCount);
let bar; let bar;
if (this.progressBars) { if (this.progressBars) {
@@ -68,21 +68,37 @@ class IpfsPinner {
} }
async _pinAllFromContract (contract, itemCount, progressBar) { async _pinAllFromContract (contract, itemCount, progressBar) {
const ipfsApi = this.ipfsApi;
const progressBars = this.progressBars;
const ids = [...Array(itemCount).keys()].map(i => i+1); const ids = [...Array(itemCount).keys()].map(i => i+1);
const cids = []; const cids = [];
const batchSize = 20; const batchSize = 20;
let position = 0; let position = 0;
while (position < itemCount) { async function loadAndPin(id) {
const batchIds = ids.slice(position, position + batchSize); let cid;
await Promise.all(batchIds.map(async id => {
try {
const data = await contract.getData(id); const data = await contract.getData(id);
debug(`Loaded ${contract.constructor.name} #${id}`); debug(`Loaded ${contract.constructor.name} #${id}`);
const cid = await this.ipfsApi.pin(data); cid = await ipfsApi.pin(data);
debug(`Pinned ${contract.constructor.name} #${id} at ${cid}`); debug(`Pinned ${contract.constructor.name} #${id} at ${cid}`);
} catch(e) {
debug(`Error while trying to load an pin ${contract.constructor.name} #${id}:`)
debug(e);
debug(`\nTrying again...`);
loadAndPin(id);
} finally {
cids.push(cid); cids.push(cid);
if (this.progressBars) { progressBar.increment(); } if (progressBars) { progressBar.increment(); }
})); }
}
while (position < itemCount) {
const batchIds = ids.slice(position, position + batchSize);
await Promise.all(batchIds.map(async id => loadAndPin(id)));
position += batchSize; position += batchSize;
} }