blob: 088593af6b66c344dba25635f8337b7b642567ef [file] [log] [blame]
William Kurkianea869482019-04-09 15:16:11 -04001/*
2 * Copyright 2018-present Open Networking Foundation
3
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7
8 * http://www.apache.org/licenses/LICENSE-2.0
9
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package kvstore
17
William Kurkianea869482019-04-09 15:16:11 -040018const (
19 // Default timeout in seconds when making a kvstore request
20 defaultKVGetTimeout = 5
21 // Maximum channel buffer between publisher/subscriber goroutines
22 maxClientChannelBufferSize = 10
23)
24
25// These constants represent the event types returned by the KV client
26const (
27 PUT = iota
28 DELETE
29 CONNECTIONDOWN
30 UNKNOWN
31)
32
33// KVPair is a common wrapper for key-value pairs returned from the KV store
34type KVPair struct {
35 Key string
36 Value interface{}
Manikkaraj kb1d51442019-07-23 10:41:02 -040037 Version int64
William Kurkianea869482019-04-09 15:16:11 -040038 Session string
39 Lease int64
40}
41
William Kurkianea869482019-04-09 15:16:11 -040042// NewKVPair creates a new KVPair object
Manikkaraj kb1d51442019-07-23 10:41:02 -040043func NewKVPair(key string, value interface{}, session string, lease int64, version int64) *KVPair {
William Kurkianea869482019-04-09 15:16:11 -040044 kv := new(KVPair)
45 kv.Key = key
46 kv.Value = value
47 kv.Session = session
48 kv.Lease = lease
Manikkaraj kb1d51442019-07-23 10:41:02 -040049 kv.Version = version
William Kurkianea869482019-04-09 15:16:11 -040050 return kv
51}
52
53// Event is generated by the KV client when a key change is detected
54type Event struct {
55 EventType int
56 Key interface{}
57 Value interface{}
Manikkaraj kb1d51442019-07-23 10:41:02 -040058 Version int64
William Kurkianea869482019-04-09 15:16:11 -040059}
60
61// NewEvent creates a new Event object
Manikkaraj kb1d51442019-07-23 10:41:02 -040062func NewEvent(eventType int, key interface{}, value interface{}, version int64) *Event {
William Kurkianea869482019-04-09 15:16:11 -040063 evnt := new(Event)
64 evnt.EventType = eventType
65 evnt.Key = key
66 evnt.Value = value
Manikkaraj kb1d51442019-07-23 10:41:02 -040067 evnt.Version = version
William Kurkianea869482019-04-09 15:16:11 -040068
69 return evnt
70}
71
Devmalya Paul495b94a2019-08-27 19:42:00 -040072// Client represents the set of APIs a KV Client must implement
William Kurkianea869482019-04-09 15:16:11 -040073type Client interface {
sbarbaria8910ba2019-11-05 10:12:23 -050074 List(key string, timeout int) (map[string]*KVPair, error)
75 Get(key string, timeout int) (*KVPair, error)
76 Put(key string, value interface{}, timeout int) error
77 Delete(key string, timeout int) error
William Kurkianea869482019-04-09 15:16:11 -040078 Reserve(key string, value interface{}, ttl int64) (interface{}, error)
79 ReleaseReservation(key string) error
80 ReleaseAllReservations() error
81 RenewReservation(key string) error
82 Watch(key string) chan *Event
83 AcquireLock(lockName string, timeout int) error
84 ReleaseLock(lockName string) error
Devmalya Paul495b94a2019-08-27 19:42:00 -040085 IsConnectionUp(timeout int) bool // timeout in second
William Kurkianea869482019-04-09 15:16:11 -040086 CloseWatch(key string, ch chan *Event)
87 Close()
88}