check if roaring data present with RoaringHasData

This commit is contained in:
Jason E. Aten 2020-10-29 01:47:26 +00:00
parent 639e9b3bf0
commit 3baa8ea0f6

View file

@ -303,6 +303,10 @@ func newShardSet() *shardSet {
func (per *DBPerShard) HasData(which int) (hasData bool, err error) {
// has to aggregate across all available DBShard for each index and shard.
if per.types[which] == roaringTxn {
return per.RoaringHasData()
}
for _, v := range per.Flatmap {
hasData, err = v.W[which].HasData()
if err != nil {
@ -315,6 +319,21 @@ func (per *DBPerShard) HasData(which int) (hasData bool, err error) {
return
}
func (per *DBPerShard) RoaringHasData() (bool, error) {
idxs := per.holder.Indexes()
const requireData = true
for _, idx := range idxs {
shards, err := per.TypedDBPerShardGetShardsForIndex(roaringTxn, idx, "", requireData)
if err != nil {
return false, err
}
if len(shards) > 0 {
return true, nil
}
}
return false, nil
}
func (per *DBPerShard) ListOpenString() (r string) {
for _, v := range per.Flatmap {
r += v.HolderPath + " -> " + v.W[per.useOpenList].OpenListString() + "\n"