Skip to content

Commit

Permalink
feat: blockstore gets blockBlobs instead of blocks (the difference is…
Browse files Browse the repository at this point in the history
… that now it receives the key in which it should store it
  • Loading branch information
daviddias committed Oct 1, 2016
1 parent 311551a commit 154bc60
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 26 deletions.
24 changes: 16 additions & 8 deletions src/stores/blockstore.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,19 @@ exports.setUp = (basePath, BlobStore, locks) => {
const store = new BlobStore(basePath + '/blocks')
const lock = new Lock()

function writeBlock (block, callback) {
if (!block || !block.data) {
// blockBlob is an object with:
// { data: <>, key: <> }
function writeBlock (blockBlob, callback) {
if (!blockBlob || !blockBlob.data) {
return callback(new Error('Invalid block'))
}

const key = multihashToPath(block.key())
const key = multihashToPath(blockBlob.key)

lock(key, (release) => {
pull(
pull.values([
block.data
blockBlob.data
]),
store.write(key, release(released))
)
Expand Down Expand Up @@ -84,18 +86,24 @@ exports.setUp = (basePath, BlobStore, locks) => {
return deferred
},

// returns a pull-stream to write blocks into
/*
* returns a pull-stream to write blockBlob into
* NOTE: blockBlob is a { data: <>, key: <> } and not a
* ipfs-block instance. This is because Block instances support
* several types of hashing and it is up to the BlockService
* to understand the right one to use (given the CID)
*/
// TODO use a more explicit name, given that getStream is just for
// one block, multiple blocks should have different naming
putStream () {
let ended = false
let written = []
let push = null

const sink = pullWrite((blocks, cb) => {
const tasks = blocks.map((block) => {
const sink = pullWrite((blockBlobs, cb) => {
const tasks = blockBlobs.map((blockBlob) => {
return (cb) => {
writeBlock(block, (err, meta) => {
writeBlock(blockBlob, (err, meta) => {
if (err) {
return cb(err)
}
Expand Down
30 changes: 12 additions & 18 deletions test/blockstore-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ module.exports = (repo) => {
describe('blockstore', () => {
const helloKey = 'CIQLS/CIQLSTJHXGJU2PQIUUXFFV62PWV7VREE57RXUU4A52IIR55M4LX432I.data'

const helloIpldKey = 'CIQO2/CIQO2EUTF47PSTAHSL54KUTDS2AAN2DH4URM7H5KRATUGQFCM4OUIQI.data'

const blockCollection = _.range(100).map((i) => new Block(new Buffer(`hello-${i}-${Math.random()}`)))

describe('.putStream', () => {
it('simple', (done) => {
const b = new Block('hello world')
pull(
pull.values([b]),
pull.values([
{ data: b.data, key: b.key() }
]),
repo.blockstore.putStream(),
pull.collect((err, meta) => {
expect(err).to.not.exist
Expand All @@ -43,13 +43,17 @@ module.exports = (repo) => {
}

pull(
pull.values([b]),
pull.values([
{ data: b.data, key: b.key() }
]),
repo.blockstore.putStream(),
pull.collect(finish)
)

pull(
pull.values([b]),
pull.values([
{ data: b.data, key: b.key() }
]),
repo.blockstore.putStream(),
pull.collect(finish)
)
Expand All @@ -59,6 +63,9 @@ module.exports = (repo) => {
parallel(_.range(50).map(() => (cb) => {
pull(
pull.values(blockCollection),
pull.map((b) => {
return { data: b.data, key: b.key() }
}),
repo.blockstore.putStream(),
pull.collect((err, meta) => {
expect(err).to.not.exist
Expand All @@ -69,19 +76,6 @@ module.exports = (repo) => {
}), done)
})

it('custom extension', function (done) {
const b = new Block('hello world 2')
pull(
pull.values([b]),
repo.blockstore.putStream(),
pull.collect((err, meta) => {
expect(err).to.not.exist
expect(meta[0].key).to.be.eql(helloIpldKey)
done()
})
)
})

it('returns an error on invalid block', (done) => {
pull(
pull.values(['hello']),
Expand Down

0 comments on commit 154bc60

Please sign in to comment.