-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclass_admission.go
More file actions
84 lines (69 loc) · 2.59 KB
/
class_admission.go
File metadata and controls
84 lines (69 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
Copyright 2026 The ARCORIS Authors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package bufferpool
// classRetainDecision describes the class-local retain eligibility result for a
// returned buffer.
//
// This is the minimal static-core admission layer. It only protects the
// size-class invariant that retained buffers inside a class must be capable of
// serving that class. Additional owner-side checks and public result mapping
// belong outside this helper.
type classRetainDecision uint8
const (
// classRetainAccept means the returned buffer is eligible to be attempted at
// shard storage.
classRetainAccept classRetainDecision = iota
// classRetainRejectNilBuffer means a nil buffer cannot be retained.
classRetainRejectNilBuffer
// classRetainRejectZeroCapacity means a non-nil buffer has no reusable
// backing capacity.
classRetainRejectZeroCapacity
// classRetainRejectCapacityBelowClassSize means the returned buffer cannot
// serve the normalized class capacity.
classRetainRejectCapacityBelowClassSize
)
// AllowsShardRetain reports whether the decision allows shard-level retention
// to be attempted.
func (d classRetainDecision) AllowsShardRetain() bool {
return d == classRetainAccept
}
// String returns the stable diagnostic name of the decision.
func (d classRetainDecision) String() string {
switch d {
case classRetainAccept:
return "accept"
case classRetainRejectNilBuffer:
return "reject_nil_buffer"
case classRetainRejectZeroCapacity:
return "reject_zero_capacity"
case classRetainRejectCapacityBelowClassSize:
return "reject_capacity_below_class_size"
default:
return "unknown"
}
}
// evaluateClassRetain evaluates whether buffer is eligible for retention inside
// class before shard credit or bucket storage is touched.
func evaluateClassRetain(class SizeClass, buffer []byte) classRetainDecision {
if buffer == nil {
return classRetainRejectNilBuffer
}
capacity := cap(buffer)
if capacity == 0 {
return classRetainRejectZeroCapacity
}
if SizeFromInt(capacity) < class.ByteSize() {
return classRetainRejectCapacityBelowClassSize
}
return classRetainAccept
}