mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Backport: non mutating requests pass through quotaKVServer when NOSPACE
This is a backport of https://github.com/etcd-io/etcd/pull/13435 and is part of the work for 3.4.20 https://github.com/etcd-io/etcd/issues/14232. The original change had a second commit that modifies a changelog file. The 3.4 branch does not include any changelog file, so that part was not cherry-picked. Local Testing: - `make build` - `make test` Both succeed. Signed-off-by: Ramsés Morales <ramses@gmail.com>
This commit is contained in:
parent
7ee7029c08
commit
96f69dee47
@ -135,8 +135,14 @@ func NewBackendQuota(s *EtcdServer, name string) Quota {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *backendQuota) Available(v interface{}) bool {
|
func (b *backendQuota) Available(v interface{}) bool {
|
||||||
|
cost := b.Cost(v)
|
||||||
|
// if there are no mutating requests, it's safe to pass through
|
||||||
|
if cost == 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: maybe optimize backend.Size()
|
// TODO: maybe optimize backend.Size()
|
||||||
return b.s.Backend().Size()+int64(b.Cost(v)) < b.maxBackendBytes
|
return b.s.Backend().Size()+int64(cost) < b.maxBackendBytes
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *backendQuota) Cost(v interface{}) int {
|
func (b *backendQuota) Cost(v interface{}) int {
|
||||||
|
@ -92,6 +92,30 @@ func TestV3StorageQuotaApply(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// txn with non-mutating Ops should go through when NOSPACE alarm is raised
|
||||||
|
_, err = kvc0.Txn(context.TODO(), &pb.TxnRequest{
|
||||||
|
Compare: []*pb.Compare{
|
||||||
|
{
|
||||||
|
Key: key,
|
||||||
|
Result: pb.Compare_EQUAL,
|
||||||
|
Target: pb.Compare_CREATE,
|
||||||
|
TargetUnion: &pb.Compare_CreateRevision{CreateRevision: 0},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Success: []*pb.RequestOp{
|
||||||
|
{
|
||||||
|
Request: &pb.RequestOp_RequestDeleteRange{
|
||||||
|
RequestDeleteRange: &pb.DeleteRangeRequest{
|
||||||
|
Key: key,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.TODO(), RequestWaitTimeout)
|
ctx, cancel := context.WithTimeout(context.TODO(), RequestWaitTimeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user