diff --git a/go.mod b/go.mod index 6ba1ed73d..2c2eac68f 100644 --- a/go.mod +++ b/go.mod @@ -5,11 +5,11 @@ go 1.20 require ( code.gitea.io/sdk/gitea v0.17.1 git.frostfs.info/TrueCloudLab/frostfs-api-go/v2 v2.16.1-0.20240215124401-634e24aba715 - git.frostfs.info/TrueCloudLab/frostfs-contract v0.18.1-0.20240115082915-f2a82aa635aa + git.frostfs.info/TrueCloudLab/frostfs-contract v0.19.0 git.frostfs.info/TrueCloudLab/frostfs-observability v0.0.0-20231101111734-b3ad3335ff65 git.frostfs.info/TrueCloudLab/frostfs-sdk-go v0.0.0-20240301150205-6fe4e2541d0b git.frostfs.info/TrueCloudLab/hrw v1.2.1 - git.frostfs.info/TrueCloudLab/policy-engine v0.0.0-20240304151211-839f22e1a36d + git.frostfs.info/TrueCloudLab/policy-engine v0.0.0-20240307151106-2ec958cbfdfd git.frostfs.info/TrueCloudLab/tzhash v1.8.0 git.frostfs.info/TrueCloudLab/zapjournald v0.0.0-20240124114243-cb2e66427d02 github.com/cheggaaa/pb v1.0.29 diff --git a/go.sum b/go.sum index 24120b20a..d90bf0f6a 100644 Binary files a/go.sum and b/go.sum differ diff --git a/pkg/ape/chainbase/boltdb.go b/pkg/ape/chainbase/boltdb.go index 27bfd8468..5f3c342c1 100644 --- a/pkg/ape/chainbase/boltdb.go +++ b/pkg/ape/chainbase/boltdb.go @@ -100,7 +100,7 @@ func (cs *boltLocalOverrideStorage) Close() error { return err } -func getTargetBucket(tx *bbolt.Tx, name chain.Name, target policyengine.Target) (*bbolt.Bucket, error) { +func getTypeBucket(tx *bbolt.Tx, name chain.Name, target policyengine.Target) (*bbolt.Bucket, error) { cbucket := tx.Bucket(chainBucket) if cbucket == nil { return nil, ErrRootBucketNotFound @@ -110,16 +110,25 @@ func getTargetBucket(tx *bbolt.Tx, name chain.Name, target policyengine.Target) if nbucket == nil { return nil, fmt.Errorf("%w: %w: %s", policyengine.ErrChainNotFound, ErrGlobalNamespaceBucketNotFound, name) } + return nbucket.Bucket([]byte{byte(target.Type)}), nil +} - typeBucket := nbucket.Bucket([]byte{byte(target.Type)}) +func normalizeTargetName(target *policyengine.Target) { + if target.Type == policyengine.Namespace && target.Name == "" { + target.Name = "root" + } +} + +func getTargetBucket(tx *bbolt.Tx, name chain.Name, target policyengine.Target) (*bbolt.Bucket, error) { + typeBucket, err := getTypeBucket(tx, name, target) + if err != nil { + return nil, err + } if typeBucket == nil { return nil, fmt.Errorf("%w: %w: %c", policyengine.ErrChainNotFound, ErrTargetTypeBucketNotFound, target.Type) } - if target.Type == policyengine.Namespace && target.Name == "" { - target.Name = "root" - } - + normalizeTargetName(&target) rbucket := typeBucket.Bucket([]byte(target.Name)) if rbucket == nil { return nil, fmt.Errorf("%w: %w: %s", policyengine.ErrChainNotFound, ErrTargetNameBucketNotFound, target.Name) @@ -151,10 +160,7 @@ func getTargetBucketCreateIfEmpty(tx *bbolt.Tx, name chain.Name, target policyen } } - if target.Type == policyengine.Namespace && target.Name == "" { - target.Name = "root" - } - + normalizeTargetName(&target) rbucket := typeBucket.Bucket([]byte(target.Name)) if rbucket == nil { var err error @@ -220,6 +226,17 @@ func (cs *boltLocalOverrideStorage) RemoveOverride(name chain.Name, target polic }) } +func (cs *boltLocalOverrideStorage) RemoveOverridesByTarget(name chain.Name, target policyengine.Target) error { + return cs.db.Update(func(tx *bbolt.Tx) error { + typeBucket, err := getTypeBucket(tx, name, target) + if err != nil { + return err + } + normalizeTargetName(&target) + return typeBucket.DeleteBucket([]byte(target.Name)) + }) +} + func (cs *boltLocalOverrideStorage) ListOverrides(name chain.Name, target policyengine.Target) ([]*chain.Chain, error) { var serializedChains [][]byte var serializedChain []byte