hyperdrive
hyperdrive copied to clipboard
Clear is not clearing
;(async function() {
const Corestore = require('corestore');
const Hyperdrive = require('hyperdrive');
const folder = 'animals';
const store = new Corestore(`./db/${folder}`);
await store.ready();
const drive = new Hyperdrive(store);
await drive.ready();
await drive.put(`/dogs/husky`, Buffer.from(JSON.stringify({ _id: 'husky', job: 'sled dog' })));
await drive.put(`/dogs/husky`, Buffer.from(JSON.stringify({ _id: 'husky', job: 'sled dog', origin: 'siberia' })));
await drive.put(`/dogs/husky`, Buffer.from(JSON.stringify({ _id: 'husky', job: 'sled dog', origin: 'siberia', size: 'medium' })));
console.log(JSON.parse((await drive.get(`/dogs/husky`)).toString()));
const trim = drive.db.core.length; // keep tiny on startup
console.log(1, trim);
const view = drive.db.createReadStream();
const blobs = await drive.getBlobs();
for await (const entry of view) {
console.log(entry);
const key = entry.key.replace('files\x00', '');
const value = await blobs.get(entry.value.blob);
console.log(key, value.toString());
await drive.put(key, value);
}
await drive.db.core.clear(1, trim);
console.log(JSON.parse((await drive.get(`/dogs/husky`)).toString()));
console.log((await drive.db.core.get(0, {wait: false})).toString()); // hyperbee
console.log((await drive.db.core.get(1, {wait: false})).toString()); // files/dogs/husky|{"exec... // I expected null
console.log((await drive.db.core.get(2, {wait: false})).toString()); // files/dogs/husky}{"exec... // I expected null
console.log((await drive.db.core.get(3, {wait: false})).toString()); // files/dogs/husky}{"exec... // I expected null
console.log((await drive.db.core.get(4, {wait: false})).toString()); // files/dogs/husky~{"exec...
})();
For example this works well on a hyperbee
;(async function() {
const Hyperbee = require('hyperbee');
const Hypercore = require('hypercore');
const fs = require('fs').promises;
await fs.rm('./db', { recursive: true });
let Toyota = {
make: "Toyota",
model: "Camry",
owner: "John Doe"
};
let Honda = {
make: "Honda",
model: "Civic",
owner: "Mark smith"
};
const core = new Hypercore('./db');
const car = new Hyperbee(core);
await car.ready();
await car.put('Toyota', JSON.stringify(Toyota));
console.log((await car.core.get(0)).toString()); // dont remove this
console.log(JSON.parse((await car.get('Toyota')).value.toString()));
await car.put('Honda', JSON.stringify(Honda));
Honda.owner = 'benz';
await car.put('Honda', JSON.stringify(Honda));
const trim = car.core.length;
console.log(trim); // 4
const view = car.createReadStream();
for await (const entry of view) {
await car.put(entry.key.toString(), entry.value.toString());
}
await car.core.clear(1, trim);
console.log(JSON.parse((await car.get('Toyota')).value.toString()));
console.log(JSON.parse((await car.get('Honda')).value.toString()));
console.log(car.core.length); // 6
console.log('#0', await car.core.get(0, { wait: false })); // hyperbee
console.log('#1', await car.core.get(1, { wait: false })); // null
console.log('#2', await car.core.get(2, { wait: false })); // null
console.log('#3', await car.core.get(3, { wait: false })); // null
console.log('#4', await car.core.get(4, { wait: false })); // Toyota buffer
console.log('#5', await car.core.get(5, { wait: false })); // Honda buffer
await car.close();
})();
Use drive.clear(filename) to clear content on the drive
I am going through similar situation in which drive.clear(filePath) doesn't actually clear the data. The disk space also is not reduced. any idea @benzmuircroft ? did you manage to clear data contents from disk using this method?