-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgroup_runtime.go
More file actions
70 lines (58 loc) · 2.7 KB
/
group_runtime.go
File metadata and controls
70 lines (58 loc) · 2.7 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
/*
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
const (
// errGroupRuntimeSnapshotNil reports an internal nil group publication.
errGroupRuntimeSnapshotNil = "bufferpool.PoolGroup: runtime snapshot must not be nil"
)
// groupRuntimeSnapshot is the immutable group-level runtime policy view.
type groupRuntimeSnapshot struct {
// Generation is the group policy publication generation.
Generation Generation
// Policy is the immutable group policy used by manual coordinator cycles.
Policy PoolGroupPolicy
// Pressure is the current immutable pressure signal propagated by the group.
Pressure PressureSignal
}
// newGroupRuntimeSnapshot returns a normalized immutable group runtime view.
func newGroupRuntimeSnapshot(generation Generation, policy PoolGroupPolicy) *groupRuntimeSnapshot {
return newGroupRuntimeSnapshotWithPressure(generation, policy, normalPressureSignal(generation))
}
// newGroupRuntimeSnapshotWithPressure returns a normalized immutable group
// runtime view with explicit pressure publication state.
func newGroupRuntimeSnapshotWithPressure(generation Generation, policy PoolGroupPolicy, pressure PressureSignal) *groupRuntimeSnapshot {
if pressure.Generation.IsZero() {
pressure.Generation = generation
}
return &groupRuntimeSnapshot{Generation: generation, Policy: policy.Normalize(), Pressure: pressure}
}
// publishRuntimeSnapshot atomically publishes a group policy view.
//
// Group policy publication itself does not execute trim or advance the group
// state generation. Manual TickInto reads this snapshot and performs budget
// publication as an explicit foreground coordinator cycle; SetPressure reads it
// to propagate pressure to partitions.
func (g *PoolGroup) publishRuntimeSnapshot(snapshot *groupRuntimeSnapshot) {
if snapshot == nil {
panic(errGroupRuntimeSnapshotNil)
}
g.runtimeSnapshot.Store(newGroupRuntimeSnapshotWithPressure(snapshot.Generation, snapshot.Policy, snapshot.Pressure))
}
// currentRuntimeSnapshot returns the currently published group policy view.
func (g *PoolGroup) currentRuntimeSnapshot() *groupRuntimeSnapshot {
snapshot := g.runtimeSnapshot.Load()
if snapshot == nil {
panic(errNilPoolGroup)
}
return snapshot
}