blob: e4b1ffffbd2cd8989e6c2a6b5f0338cf681ac242 [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
Neha Sharmacc656962020-04-14 14:26:11 +000018import (
19 "context"
20 "time"
21)
npujarec5762e2020-01-01 14:08:48 +053022
William Kurkianea869482019-04-09 15:16:11 -040023const (
William Kurkianea869482019-04-09 15:16:11 -040024 // Maximum channel buffer between publisher/subscriber goroutines
25 maxClientChannelBufferSize = 10
26)
27
28// These constants represent the event types returned by the KV client
29const (
30 PUT = iota
31 DELETE
32 CONNECTIONDOWN
33 UNKNOWN
34)
35
36// KVPair is a common wrapper for key-value pairs returned from the KV store
37type KVPair struct {
38 Key string
39 Value interface{}
Manikkaraj kb1d51442019-07-23 10:41:02 -040040 Version int64
William Kurkianea869482019-04-09 15:16:11 -040041 Session string
42 Lease int64
43}
44
William Kurkianea869482019-04-09 15:16:11 -040045// NewKVPair creates a new KVPair object
Manikkaraj kb1d51442019-07-23 10:41:02 -040046func NewKVPair(key string, value interface{}, session string, lease int64, version int64) *KVPair {
William Kurkianea869482019-04-09 15:16:11 -040047 kv := new(KVPair)
48 kv.Key = key
49 kv.Value = value
50 kv.Session = session
51 kv.Lease = lease
Manikkaraj kb1d51442019-07-23 10:41:02 -040052 kv.Version = version
William Kurkianea869482019-04-09 15:16:11 -040053 return kv
54}
55
56// Event is generated by the KV client when a key change is detected
57type Event struct {
58 EventType int
59 Key interface{}
60 Value interface{}
Manikkaraj kb1d51442019-07-23 10:41:02 -040061 Version int64
William Kurkianea869482019-04-09 15:16:11 -040062}
63
64// NewEvent creates a new Event object
Manikkaraj kb1d51442019-07-23 10:41:02 -040065func NewEvent(eventType int, key interface{}, value interface{}, version int64) *Event {
William Kurkianea869482019-04-09 15:16:11 -040066 evnt := new(Event)
67 evnt.EventType = eventType
68 evnt.Key = key
69 evnt.Value = value
Manikkaraj kb1d51442019-07-23 10:41:02 -040070 evnt.Version = version
William Kurkianea869482019-04-09 15:16:11 -040071
72 return evnt
73}
74
Devmalya Paul495b94a2019-08-27 19:42:00 -040075// Client represents the set of APIs a KV Client must implement
William Kurkianea869482019-04-09 15:16:11 -040076type Client interface {
npujarec5762e2020-01-01 14:08:48 +053077 List(ctx context.Context, key string) (map[string]*KVPair, error)
78 Get(ctx context.Context, key string) (*KVPair, error)
79 Put(ctx context.Context, key string, value interface{}) error
80 Delete(ctx context.Context, key string) error
serkant.uluderya7b8211e2021-02-24 16:39:18 +030081 DeleteWithPrefix(ctx context.Context, prefixKey string) error
Girish Gowdra8a0bdcd2021-05-13 12:31:04 -070082 Watch(ctx context.Context, key string, withPrefix bool) chan *Event
83 IsConnectionUp(ctx context.Context) bool // timeout in second
84 CloseWatch(ctx context.Context, key string, ch chan *Event)
85 Close(ctx context.Context)
86
87 // These APIs are not used. They will be cleaned up in release Voltha 2.9.
88 // It's not cleaned now to limit changes in all components
Neha Sharmacc656962020-04-14 14:26:11 +000089 Reserve(ctx context.Context, key string, value interface{}, ttl time.Duration) (interface{}, error)
npujarec5762e2020-01-01 14:08:48 +053090 ReleaseReservation(ctx context.Context, key string) error
91 ReleaseAllReservations(ctx context.Context) error
92 RenewReservation(ctx context.Context, key string) error
Neha Sharmacc656962020-04-14 14:26:11 +000093 AcquireLock(ctx context.Context, lockName string, timeout time.Duration) error
William Kurkianea869482019-04-09 15:16:11 -040094 ReleaseLock(lockName string) error
William Kurkianea869482019-04-09 15:16:11 -040095}