func (db *LevelDB) metadataExists() (bool, error) { var ctx storage.MetadataContext keyBeg, keyEnd := ctx.KeyRange() dvid.StartCgo() ro := levigo.NewReadOptions() it := db.ldb.NewIterator(ro) defer func() { it.Close() dvid.StopCgo() }() it.Seek(keyBeg) for { if it.Valid() { // Did we pass the final key? if bytes.Compare(it.Key(), keyEnd) > 0 { break } return true, nil } break } if err := it.GetError(); err != nil { return false, err } dvid.Infof("No metadata found for %s...\n", db) return false, nil }
// check if any metadata has been written into this store. func (db *KVAutobus) metadataExists() (bool, error) { var ctx storage.MetadataContext kStart, kEnd := ctx.KeyRange() b64key1 := encodeKey(kStart) b64key2 := encodeKey(kEnd) url := fmt.Sprintf("%s/kvautobus/api/key_range/%s/%s/%s/", db.host, db.collection, b64key1, b64key2) dvid.Infof("metdataExists: doing GET on %s\n", url) timedLog := dvid.NewTimeLog() resp, err := db.client.Get(url) if err != nil { return false, err } defer resp.Body.Close() if resp.StatusCode == http.StatusNotFound { return true, nil // Handle no keys found. } r := msgp.NewReader(bufio.NewReader(resp.Body)) var mks Ks if err := mks.DecodeMsg(r); err != nil { return false, err } timedLog.Infof("PROXY key_range metadata to %s returned %d (%d keys)\n", db.host, resp.StatusCode, len(mks)) if len(mks) == 0 { return false, nil } return true, nil }
func (db *BigTable) metadataExists() (bool, error) { if db == nil { return false, fmt.Errorf("Can't call metadataExists() on nil BigTable") } var ctx storage.MetadataContext unvKeyBeg, unvKeyEnd := ctx.KeyRange() rr := api.NewRange(encodeKey(unvKeyBeg), encodeKey(unvKeyEnd)) var found bool err := tbl.ReadRows(db.ctx, rr, func(r api.Row) bool { found = true return false }) return found, err }