17190c0076
* state: port KV and Tombstone tables to new pattern * go fmt'ed * handle wildcards for tombstones * Fix graveyard ent vs oss * fix oss compilation error * add partition to tombstones and kv state store indexes * refactor to use `indexWithEnterpriseIndexable` * partition kvs indexID table * add `partitionedIndexEntryName` in oss for test purpose * Apply suggestions from code review Co-authored-by: Chris S. Kim <ckim@hashicorp.com> Co-authored-by: R.B. Boyer <4903+rboyer@users.noreply.github.com> * add `singleValueID` implementation assertions * remove entmeta reference from oss Co-authored-by: R.B. Boyer <4903+rboyer@users.noreply.github.com> Co-authored-by: Daniel Nephin <dnephin@hashicorp.com> Co-authored-by: Chris S. Kim <ckim@hashicorp.com> Co-authored-by: R.B. Boyer <4903+rboyer@users.noreply.github.com>
46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
//go:build !consulent
|
|
// +build !consulent
|
|
|
|
package state
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/consul/agent/structs"
|
|
)
|
|
|
|
func (g *Graveyard) insertTombstoneWithTxn(tx WriteTxn, _ string, stone *Tombstone, updateMax bool) error {
|
|
if err := tx.Insert("tombstones", stone); err != nil {
|
|
return err
|
|
}
|
|
|
|
if updateMax {
|
|
if err := indexUpdateMaxTxn(tx, stone.Index, "tombstones"); err != nil {
|
|
return fmt.Errorf("failed updating tombstone index: %v", err)
|
|
}
|
|
} else {
|
|
if err := tx.Insert(tableIndex, &IndexEntry{"tombstones", stone.Index}); err != nil {
|
|
return fmt.Errorf("failed updating tombstone index: %s", err)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// GetMaxIndexTxn returns the highest index tombstone whose key matches the
|
|
// given context, using a prefix match.
|
|
func (g *Graveyard) GetMaxIndexTxn(tx ReadTxn, prefix string, _ *structs.EnterpriseMeta) (uint64, error) {
|
|
var lindex uint64
|
|
q := Query{Value: prefix}
|
|
stones, err := tx.Get(tableTombstones, indexID+"_prefix", q)
|
|
if err != nil {
|
|
return 0, fmt.Errorf("failed querying tombstones: %s", err)
|
|
}
|
|
for stone := stones.Next(); stone != nil; stone = stones.Next() {
|
|
s := stone.(*Tombstone)
|
|
if s.Index > lindex {
|
|
lindex = s.Index
|
|
}
|
|
}
|
|
return lindex, nil
|
|
}
|