| 
52 | 52 | 	featureKVStoreBucketKey = []byte("feature-kv-store")  | 
53 | 53 | )  | 
54 | 54 | 
 
  | 
55 |  | -// KVStores provides an Update and View method that will allow the caller to  | 
56 |  | -// perform atomic read and write transactions on and of the key value stores  | 
57 |  | -// offered the KVStoreTx.  | 
58 |  | -type KVStores = DBExecutor[KVStoreTx]  | 
59 |  | - | 
60 |  | -// KVStoreTx represents a database transaction that can be used for both read  | 
61 |  | -// and writes of the various different key value stores offered for the rule.  | 
62 |  | -type KVStoreTx interface {  | 
63 |  | -	// Global returns a persisted global, rule-name indexed, kv store. A  | 
64 |  | -	// rule with a given name will have access to this store independent of  | 
65 |  | -	// group ID or feature.  | 
66 |  | -	Global() KVStore  | 
67 |  | - | 
68 |  | -	// Local returns a persisted local kv store for the rule. Depending on  | 
69 |  | -	// how the implementation is initialised, this will either be under the  | 
70 |  | -	// group ID namespace or the group ID _and_ feature name namespace.  | 
71 |  | -	Local() KVStore  | 
72 |  | - | 
73 |  | -	// GlobalTemp is similar to the Global store except that its contents  | 
74 |  | -	// is cleared upon restart of the database. The reason persisting the  | 
75 |  | -	// temporary store changes instead of just keeping an in-memory store is  | 
76 |  | -	// that we can then guarantee atomicity if changes are made to both  | 
77 |  | -	// the permanent and temporary stores.  | 
78 |  | -	GlobalTemp() KVStore  | 
79 |  | - | 
80 |  | -	// LocalTemp is similar to the Local store except that its contents is  | 
81 |  | -	// cleared upon restart of the database. The reason persisting the  | 
82 |  | -	// temporary store changes instead of just keeping an in-memory store is  | 
83 |  | -	// that we can then guarantee atomicity if changes are made to both  | 
84 |  | -	// the permanent and temporary stores.  | 
85 |  | -	LocalTemp() KVStore  | 
86 |  | -}  | 
87 |  | - | 
88 |  | -// KVStore is in interface representing a key value store. It allows us to  | 
89 |  | -// abstract away the details of the data storage method.  | 
90 |  | -type KVStore interface {  | 
91 |  | -	// Get fetches the value under the given key from the underlying kv  | 
92 |  | -	// store. If no value is found, nil is returned.  | 
93 |  | -	Get(ctx context.Context, key string) ([]byte, error)  | 
94 |  | - | 
95 |  | -	// Set sets the given key-value pair in the underlying kv store.  | 
96 |  | -	Set(ctx context.Context, key string, value []byte) error  | 
97 |  | - | 
98 |  | -	// Del deletes the value under the given key in the underlying kv store.  | 
99 |  | -	Del(ctx context.Context, key string) error  | 
100 |  | -}  | 
101 |  | - | 
102 |  | -// RulesDB can be used to initialise a new rules.KVStores.  | 
103 |  | -type RulesDB interface {  | 
104 |  | -	// GetKVStores constructs a new rules.KVStores in a namespace defined  | 
105 |  | -	// by the rule name, group ID and feature name.  | 
106 |  | -	GetKVStores(rule string, groupID session.ID, feature string) KVStores  | 
107 |  | - | 
108 |  | -	// DeleteTempKVStores deletes all temporary kv stores.  | 
109 |  | -	DeleteTempKVStores(ctx context.Context) error  | 
110 |  | -}  | 
111 |  | - | 
112 | 55 | // GetKVStores constructs a new rules.KVStores backed by a bbolt db.  | 
113 | 56 | func (db *BoltDB) GetKVStores(rule string, groupID session.ID,  | 
114 | 57 | 	feature string) KVStores {  | 
 | 
0 commit comments