forked from cadence-workflow/cadence
-
Notifications
You must be signed in to change notification settings - Fork 0
/
cache.go
137 lines (111 loc) · 4.76 KB
/
cache.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Copyright (c) 2017 Uber Technologies, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
package cache
import (
"time"
"github.com/uber/cadence/common"
"github.com/uber/cadence/common/metrics"
)
// A Cache is a generalized interface to a cache. See cache.LRU for a specific
// implementation (bounded cache with LRU eviction)
type Cache interface {
// Get retrieves an element based on a key, returning nil if the element
// does not exist
Get(key interface{}) interface{}
// Put adds an element to the cache, returning the previous element
Put(key interface{}, value interface{}) interface{}
// PutIfNotExist puts a value associated with a given key if it does not exist
PutIfNotExist(key interface{}, value interface{}) (interface{}, error)
// Delete deletes an element in the cache
Delete(key interface{})
// Release decrements the ref count of a pinned element. If the ref count
// drops to 0, the element can be evicted from the cache.
Release(key interface{})
// Iterator returns the iterator of the cache
Iterator() Iterator
// Size returns the number of entries currently stored in the Cache
Size() int
}
// Options control the behavior of the cache
type Options struct {
// TTL controls the time-to-live for a given cache entry. Cache entries that
// are older than the TTL will not be returned.
TTL time.Duration
// InitialCapacity controls the initial capacity of the cache
InitialCapacity int
// Pin prevents in-use objects from getting evicted.
Pin bool
// RemovedFunc is an optional function called when an element
// is scheduled for deletion
RemovedFunc RemovedFunc
// MaxCount controls the max capacity of the cache
// It is required option if MaxSize is not provided
MaxCount int
// GetCacheItemSizeFunc is a function called upon adding the item to update the cache size.
// It returns 0 by default, assuming the cache is just count based
// It is required option if MaxCount is not provided
GetCacheItemSizeFunc GetCacheItemSizeFunc
// MaxSize is an optional and must be set along with GetCacheItemSizeFunc
// to control the max size in bytes of the cache
// It is required option if MaxCount is not provided
MaxSize uint64
}
// SimpleOptions provides options that can be used to configure SimpleCache
type SimpleOptions struct {
// InitialCapacity controls the initial capacity of the cache
InitialCapacity int
// RemovedFunc is an optional function called when an element
// is scheduled for deletion
RemovedFunc RemovedFunc
}
// RemovedFunc is a type for notifying applications when an item is
// scheduled for removal from the Cache. If f is a function with the
// appropriate signature and i is the interface{} scheduled for
// deletion, Cache calls go f(i)
type RemovedFunc func(interface{})
// Iterator represents the interface for cache iterators
type Iterator interface {
// Close closes the iterator
// and releases any allocated resources
Close()
// HasNext return true if there is more items to be returned
HasNext() bool
// Next return the next item
Next() Entry
}
// Entry represents a key-value entry within the map
type Entry interface {
// Key represents the key
Key() interface{}
// Value represents the value
Value() interface{}
// CreateTime represents the time when the entry is created
CreateTime() time.Time
}
// GetCacheItemSizeFunc returns the cache item size in bytes
type GetCacheItemSizeFunc func(interface{}) uint64
// DomainMetricsScopeCache represents a interface for mapping domainID and scopeIdx to metricsScope
type DomainMetricsScopeCache interface {
// Get retrieves metrics scope for a domainID and scopeIdx
Get(domainID string, scopeIdx int) (metrics.Scope, bool)
// Put adds metrics scope for a domainID and scopeIdx
Put(domainID string, scopeIdx int, metricsScope metrics.Scope)
common.Daemon
}