File: store.go

package info (click to toggle)
golang-github-throttled-throttled 2.2.4-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, sid
  • size: 172 kB
  • sloc: makefile: 23
file content (34 lines) | stat: -rw-r--r-- 1,478 bytes parent folder | download | duplicates (2)
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
package throttled

import (
	"time"
)

// GCRAStore is the interface to implement to store state for a GCRA
// rate limiter
type GCRAStore interface {
	// GetWithTime returns the value of the key if it is in the store
	// or -1 if it does not exist. It also returns the current time at
	// the Store. The time must be representable as a positive int64
	// of nanoseconds since the epoch.
	//
	// GCRA assumes that all instances sharing the same Store also
	// share the same clock. Using separate clocks will work if the
	// skew is small but not recommended in practice unless you're
	// lucky enough to be hooked up to GPS or atomic clocks.
	GetWithTime(key string) (int64, time.Time, error)

	// SetIfNotExistsWithTTL sets the value of key only if it is not
	// already set in the store it returns whether a new value was
	// set. If the store supports expiring keys and a new value was
	// set, the key will expire after the provided ttl.
	SetIfNotExistsWithTTL(key string, value int64, ttl time.Duration) (bool, error)

	// CompareAndSwapWithTTL atomically compares the value at key to
	// the old value. If it matches, it sets it to the new value and
	// returns true. Otherwise, it returns false. If the key does not
	// exist in the store, it returns false with no error. If the
	// store supports expiring keys and the swap succeeded, the key
	// will expire after the provided ttl.
	CompareAndSwapWithTTL(key string, old, new int64, ttl time.Duration) (bool, error)
}