// GetBlock retrieves a particular block from the service, // Getting it from the datastore using the key (hash). func (s *BlockService) GetBlock(ctx context.Context, k u.Key) (*blocks.Block, error) { log.Debugf("BlockService GetBlock: '%s'", k) datai, err := s.Datastore.Get(k.DsKey()) if err == nil { log.Debug("Blockservice: Got data in datastore.") bdata, ok := datai.([]byte) if !ok { return nil, fmt.Errorf("data associated with %s is not a []byte", k) } return &blocks.Block{ Multihash: mh.Multihash(k), Data: bdata, }, nil } else if err == ds.ErrNotFound && s.Remote != nil { log.Debug("Blockservice: Searching bitswap.") blk, err := s.Remote.Block(ctx, k) if err != nil { return nil, err } return blk, nil } else { log.Debug("Blockservice GetBlock: Not found.") return nil, ErrNotFound } }
func (bs *blockstore) Get(k u.Key) (*blocks.Block, error) { maybeData, err := bs.datastore.Get(k.DsKey()) if err != nil { return nil, err } bdata, ok := maybeData.([]byte) if !ok { return nil, ValueTypeMismatch } return blocks.NewBlockWithHash(bdata, mh.Multihash(k)) }
func TestKey(t *testing.T) { h1, err := mh.Sum([]byte("beep boop"), mh.SHA2_256, -1) if err != nil { t.Error(err) } k1 := Key(h1) h2 := mh.Multihash(k1) k2 := Key(h2) if !bytes.Equal(h1, h2) { t.Error("Multihashes not equal.") } if k1 != k2 { t.Error("Keys not equal.") } }