Commit 8f266cac authored by Steven Allen's avatar Steven Allen

feat: switch to raw multihashes for blocks

Part of: https://github.com/ipfs/go-ipfs/issues/6815
parent 5f9214c8
...@@ -59,7 +59,7 @@ func (b *arccache) hasCached(k cid.Cid) (has bool, size int, ok bool) { ...@@ -59,7 +59,7 @@ func (b *arccache) hasCached(k cid.Cid) (has bool, size int, ok bool) {
return false, -1, false return false, -1, false
} }
h, ok := b.arc.Get(k.KeyString()) h, ok := b.arc.Get(string(k.Hash()))
if ok { if ok {
b.hits.Inc() b.hits.Inc()
switch h := h.(type) { switch h := h.(type) {
...@@ -160,11 +160,11 @@ func (b *arccache) HashOnRead(enabled bool) { ...@@ -160,11 +160,11 @@ func (b *arccache) HashOnRead(enabled bool) {
} }
func (b *arccache) cacheHave(c cid.Cid, have bool) { func (b *arccache) cacheHave(c cid.Cid, have bool) {
b.arc.Add(c.KeyString(), cacheHave(have)) b.arc.Add(string(c.Hash()), cacheHave(have))
} }
func (b *arccache) cacheSize(c cid.Cid, blockSize int) { func (b *arccache) cacheSize(c cid.Cid, blockSize int) {
b.arc.Add(c.KeyString(), cacheSize(blockSize)) b.arc.Add(string(c.Hash()), cacheSize(blockSize))
} }
func (b *arccache) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) { func (b *arccache) AllKeysChan(ctx context.Context) (<-chan cid.Cid, error) {
......
...@@ -53,6 +53,24 @@ func TestPutThenGetBlock(t *testing.T) { ...@@ -53,6 +53,24 @@ func TestPutThenGetBlock(t *testing.T) {
} }
} }
func TestCidv0v1(t *testing.T) {
bs := NewBlockstore(ds_sync.MutexWrap(ds.NewMapDatastore()))
block := blocks.NewBlock([]byte("some data"))
err := bs.Put(block)
if err != nil {
t.Fatal(err)
}
blockFromBlockstore, err := bs.Get(cid.NewCidV1(cid.DagProtobuf, block.Cid().Hash()))
if err != nil {
t.Fatal(err)
}
if !bytes.Equal(block.RawData(), blockFromBlockstore.RawData()) {
t.Fail()
}
}
func TestPutThenGetSizeBlock(t *testing.T) { func TestPutThenGetSizeBlock(t *testing.T) {
bs := NewBlockstore(ds_sync.MutexWrap(ds.NewMapDatastore())) bs := NewBlockstore(ds_sync.MutexWrap(ds.NewMapDatastore()))
block := blocks.NewBlock([]byte("some data")) block := blocks.NewBlock([]byte("some data"))
...@@ -218,18 +236,19 @@ func TestAllKeysRespectsContext(t *testing.T) { ...@@ -218,18 +236,19 @@ func TestAllKeysRespectsContext(t *testing.T) {
} }
func expectMatches(t *testing.T, expect, actual []cid.Cid) { func expectMatches(t *testing.T, expect, actual []cid.Cid) {
t.Helper()
if len(expect) != len(actual) { if len(expect) != len(actual) {
t.Errorf("expect and actual differ: %d != %d", len(expect), len(actual)) t.Errorf("expect and actual differ: %d != %d", len(expect), len(actual))
} }
actualSet := make(map[string]bool, len(actual))
for _, k := range actual {
actualSet[string(k.Hash())] = true
}
for _, ek := range expect { for _, ek := range expect {
found := false if !actualSet[string(ek.Hash())] {
for _, ak := range actual {
if ek.Equals(ak) {
found = true
}
}
if !found {
t.Error("expected key not found: ", ek) t.Error("expected key not found: ", ek)
} }
} }
......
...@@ -103,7 +103,7 @@ func (b *bloomcache) build(ctx context.Context) error { ...@@ -103,7 +103,7 @@ func (b *bloomcache) build(ctx context.Context) error {
atomic.StoreInt32(&b.active, 1) atomic.StoreInt32(&b.active, 1)
return nil return nil
} }
b.bloom.AddTS(key.Bytes()) // Use binary key, the more compact the better b.bloom.AddTS(key.Hash()) // Use binary key, the more compact the better
case <-ctx.Done(): case <-ctx.Done():
b.buildErr = ctx.Err() b.buildErr = ctx.Err()
return b.buildErr return b.buildErr
...@@ -130,7 +130,7 @@ func (b *bloomcache) hasCached(k cid.Cid) (has bool, ok bool) { ...@@ -130,7 +130,7 @@ func (b *bloomcache) hasCached(k cid.Cid) (has bool, ok bool) {
return false, false return false, false
} }
if b.BloomActive() { if b.BloomActive() {
blr := b.bloom.HasTS(k.Bytes()) blr := b.bloom.HasTS(k.Hash())
if !blr { // not contained in bloom is only conclusive answer bloom gives if !blr { // not contained in bloom is only conclusive answer bloom gives
b.hits.Inc() b.hits.Inc()
return false, true return false, true
...@@ -163,7 +163,7 @@ func (b *bloomcache) Put(bl blocks.Block) error { ...@@ -163,7 +163,7 @@ func (b *bloomcache) Put(bl blocks.Block) error {
// See comment in PutMany // See comment in PutMany
err := b.blockstore.Put(bl) err := b.blockstore.Put(bl)
if err == nil { if err == nil {
b.bloom.AddTS(bl.Cid().Bytes()) b.bloom.AddTS(bl.Cid().Hash())
} }
return err return err
} }
...@@ -178,7 +178,7 @@ func (b *bloomcache) PutMany(bs []blocks.Block) error { ...@@ -178,7 +178,7 @@ func (b *bloomcache) PutMany(bs []blocks.Block) error {
return err return err
} }
for _, bl := range bs { for _, bl := range bs {
b.bloom.AddTS(bl.Cid().Bytes()) b.bloom.AddTS(bl.Cid().Hash())
} }
return nil return nil
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment