code: func (kv *boltKV) enumerate(prefix string) (kvdb.KVPairs, error) {
  	if kv.db == nil {
  		return nil, kvdb.ErrNotFound
  	}
  
  	// XXX FIXME some bug above this cases the prefix to be pre-loaded.
  	prefix = strings.TrimPrefix(prefix, kv.domain)
  	prefix = kv.domain + prefix
  
  	var kvps = make(kvdb.KVPairs, 0, 100)
  
  	kv.db.View(func(tx *bolt.Tx) error {
  		bucket := tx.Bucket(pxBucket)
  		if bucket == nil {
  			logrus.Warnf("Requested bucket not found in internal KVDB: %v",
  				pxBucket,
  			)
  			return kvdb.ErrNotFound
  		}
  
  		c := bucket.Cursor()
  		for k, v := c.First(); k != nil; k, v = c.Next() {
  			if strings.HasPrefix(string(k), prefix) && !strings.Contains(string(k), "/_") {
  				var kvp *kvdb.KVPair
  				if err := json.Unmarshal(v, &kvp); err != nil {
  					logrus.Warnf("Enumerated prefix could not be parsed from KVDB: %v, %v (%v)",
  						prefix,
  						v,
  						err,
  					)
  					logrus.Fatalf("Could not enumerate internal KVDB: %v: %v",
  						v,
  						err,
  					)
  					return err
  				}
  				kv.normalize(kvp)
  				kvps = append(kvps, kvp)
  			}
  		}
  		return nil
  	})
  
  	return kvps, nil
  }
docs: // enumerate returns a list of values and creates a copy if specified