-
Notifications
You must be signed in to change notification settings - Fork 16
/
big_segments.go
84 lines (72 loc) · 4.01 KB
/
big_segments.go
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
package subsystems
import (
"io"
"time"
"github.com/launchdarkly/go-sdk-common/v3/ldtime"
"github.com/launchdarkly/go-sdk-common/v3/ldvalue"
)
// BigSegmentsConfiguration encapsulates the SDK's configuration with regard to Big Segments.
//
// "Big Segments" are a specific type of user segments. For more information, read the LaunchDarkly
// documentation about user segments: https://docs.launchdarkly.com/home/users
//
// See ldcomponents.BigSegmentsConfigurationBuilder for more details on these properties.
type BigSegmentsConfiguration interface {
// GetStore returns the data store instance that is used for Big Segments data.
GetStore() BigSegmentStore
// GetContextCacheSize returns the value set by BigSegmentsConfigurationBuilder.CacheSize.
GetContextCacheSize() int
// GetContextCacheTime returns the value set by BigSegmentsConfigurationBuilder.CacheTime.
GetContextCacheTime() time.Duration
// GetStatusPollInterval returns the value set by BigSegmentsConfigurationBuilder.StatusPollInterval.
GetStatusPollInterval() time.Duration
// StaleAfter returns the value set by BigSegmentsConfigurationBuilder.StaleAfter.
GetStaleAfter() time.Duration
}
// BigSegmentStore is an interface for a read-only data store that allows querying of context
// membership in Big Segments.
//
// "Big Segments" are a specific type of user segments. For more information, read the LaunchDarkly
// documentation about user segments: https://docs.launchdarkly.com/home/users
type BigSegmentStore interface {
io.Closer
// GetMetadata returns information about the overall state of the store. This method will be
// called only when the SDK needs the latest state, so it should not be cached.
GetMetadata() (BigSegmentStoreMetadata, error)
// GetMembership queries the store for a snapshot of the current segment state for a specific
// evaluation context. The contextHash is a base64-encoded string produced by hashing the context key
// as defined by the Big Segments specification; the store implementation does not need to know the
// details of how this is done, because it deals only with already-hashed keys, but the string can
// be assumed to only contain characters that are valid in base64.
GetMembership(contextHash string) (BigSegmentMembership, error)
}
// BigSegmentStoreMetadata contains values returned by BigSegmentStore.GetMetadata().
type BigSegmentStoreMetadata struct {
// LastUpToDate is the timestamp of the last update to the BigSegmentStore. It is zero if
// the store has never been updated.
LastUpToDate ldtime.UnixMillisecondTime
}
// BigSegmentMembership is the return type of BigSegmentStore.GetContextMembership(). It is associated
// with a single evaluation context, and provides the ability to check whether that context is included
// in or excluded from any number of Big Segments.
//
// This is an immutable snapshot of the state for this context at the time GetMembership was
// called. Calling GetMembership should not cause the state to be queried again. The object
// should be safe for concurrent access by multiple goroutines.
type BigSegmentMembership interface {
// CheckMembership tests whether the context is explicitly included or explicitly excluded in the
// specified segment, or neither. The segment is identified by a segmentRef which is not the
// same as the segment key-- it includes the key but also versioning information that the SDK
// will provide. The store implementation should not be concerned with the format of this.
//
// If the context is explicitly included (regardless of whether the context is also explicitly
// excluded or not-- that is, inclusion takes priority over exclusion), the method returns an
// OptionalBool with a true value.
//
// If the context is explicitly excluded, and is not explicitly included, the method returns an
// OptionalBool with a false value.
//
// If the context's status in the segment is undefined, the method returns OptionalBool{} with no
// value (so calling IsDefined() on it will return false).
CheckMembership(segmentRef string) ldvalue.OptionalBool
}