// 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 } }
// getLocal attempts to retrieve the value from the datastore func (dht *IpfsDHT) getLocal(key u.Key) ([]byte, error) { dht.dslock.Lock() defer dht.dslock.Unlock() log.Debug("getLocal %s", key) v, err := dht.datastore.Get(key.DsKey()) if err != nil { return nil, err } log.Debug("found in db") byt, ok := v.([]byte) if !ok { return nil, errors.New("value stored in datastore not []byte") } rec := new(pb.Record) err = proto.Unmarshal(byt, rec) if err != nil { return nil, err } // TODO: 'if paranoid' if u.Debug { err = dht.verifyRecord(rec) if err != nil { log.Errorf("local record verify failed: %s", err) return nil, err } } return rec.GetValue(), nil }
func (d *datastoreBlockSet) AddBlock(k util.Key) { err := d.dstore.Put(k.DsKey(), []byte{}) if err != nil { log.Errorf("blockset put error: %s", err) } d.bset.AddBlock(k) }
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)) }
// putLocal stores the key value pair in the datastore func (dht *IpfsDHT) putLocal(key u.Key, value []byte) error { rec, err := dht.makePutRecord(key, value) if err != nil { return err } data, err := proto.Marshal(rec) if err != nil { return err } return dht.datastore.Put(key.DsKey(), data) }
func (mr *MockRouter) GetValue(ctx context.Context, key u.Key) ([]byte, error) { log.Debugf("GetValue: %s", key) v, err := mr.datastore.Get(key.DsKey()) if err != nil { return nil, err } data, ok := v.([]byte) if !ok { return nil, errors.New("could not cast value from datastore") } return data, nil }
func (d *datastoreBlockSet) RemoveBlock(k util.Key) { d.bset.RemoveBlock(k) if !d.bset.HasKey(k) { d.dstore.Delete(k.DsKey()) } }
func (mr *MockRouter) PutValue(ctx context.Context, key u.Key, val []byte) error { log.Debugf("PutValue: %s", key) return mr.datastore.Put(key.DsKey(), val) }
// DeleteBlock deletes a block in the blockservice from the datastore func (s *BlockService) DeleteBlock(k u.Key) error { return s.Datastore.Delete(k.DsKey()) }