-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlease_config.go
More file actions
87 lines (76 loc) · 3.57 KB
/
lease_config.go
File metadata and controls
87 lines (76 loc) · 3.57 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
85
86
87
/*
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 (
// errLeaseConfigInvalidOwnership is used when LeaseConfig contains an
// ownership policy that cannot back a lease-aware registry.
errLeaseConfigInvalidOwnership = "bufferpool.LeaseConfig: invalid ownership policy"
)
// LeaseConfig configures a LeaseRegistry.
//
// LeaseConfig is intentionally separate from PoolConfig. Pool owns retained
// storage and capacity-based admission. LeaseRegistry owns checked-out identity,
// in-use accounting, and release validation. PoolPartition/PoolGroup wiring
// derives both configs from broader runtime policy without making Pool itself a
// controller.
type LeaseConfig struct {
// Ownership defines lease validation and checked-out accounting behavior.
//
// A zero OwnershipPolicy normalizes to StrictOwnershipPolicy because a
// LeaseRegistry exists specifically to provide ownership-aware behavior.
Ownership OwnershipPolicy
}
// DefaultLeaseConfig returns the default strict lease registry configuration.
//
// The default is intentionally stricter than Pool's bare []byte ownership
// policy. A LeaseRegistry exists only when callers want ownership-aware
// acquisition and release, so the default registry config validates lease token
// identity, detects double release, and tracks checked-out memory.
func DefaultLeaseConfig() LeaseConfig {
return LeaseConfig{Ownership: StrictOwnershipPolicy()}
}
// LeaseConfigFromOwnershipPolicy creates a LeaseConfig from ownership policy.
//
// This helper keeps call sites readable when PoolPartition or tests derive
// lease-registry behavior from a broader Policy value. The returned config still
// goes through Normalize and Validate during registry construction.
func LeaseConfigFromOwnershipPolicy(policy OwnershipPolicy) LeaseConfig {
return LeaseConfig{Ownership: policy}
}
// Normalize returns a LeaseConfig with ownership defaults completed.
//
// Normalization is value-based and does not mutate the receiver. A zero
// ownership policy becomes strict ownership because a registry without
// ownership behavior would duplicate Pool's bare data-plane API without adding
// safety.
func (c LeaseConfig) Normalize() LeaseConfig {
c.Ownership = c.Ownership.NormalizeForLeaseRegistry()
return c
}
// Validate validates a normalized LeaseConfig.
//
// Validation is registry-specific. Standalone Pool rejects strict/accounting
// ownership because bare Put cannot enforce it; LeaseRegistry requires those
// modes because it owns lease records and can make the guarantees real.
func (c LeaseConfig) Validate() error {
if err := c.Ownership.ValidateForLeaseRegistry(); err != nil {
return wrapError(ErrInvalidOptions, err, errLeaseConfigInvalidOwnership)
}
return nil
}
// IsZero reports whether c contains no explicit values.
//
// A zero config is accepted by NewLeaseRegistry after normalization. The helper
// is useful for tests and config composition code that needs to distinguish
// caller-provided ownership settings from default strict behavior.
func (c LeaseConfig) IsZero() bool { return c.Ownership.IsZero() }