| /* |
| * Copyright 2020-present Open Networking Foundation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| // Package db holds utils for datastore implementation |
| package db |
| |
| import ( |
| "context" |
| "errors" |
| |
| "github.com/opencord/voltha-lib-go/v4/pkg/log" |
| ) |
| |
| // Read function reads key value pair from db/kvstore |
| func Read(ctx context.Context, key string) (string, error) { |
| if kvClient != nil { |
| logger.Debugw(ctx, "Reading-key-value-pair-from-kv-store", log.Fields{"key": key}) |
| kvPair, err := kvClient.client.Get(ctx, key) |
| if err != nil { |
| return "", err |
| } |
| if kvPair == nil { |
| return "", errors.New("key not found") |
| } |
| return string(kvPair.Value.([]byte)), nil |
| |
| } |
| logger.Errorw(ctx, "Reading-key-value-pair-in kv-store-failed-because-kvstore-not-initialised", log.Fields{"key": key}) |
| return "", errors.New("kvstore not initialised") |
| } |
| |
| // ReadAll function reads all key value pair from db/kvstore |
| func ReadAll(ctx context.Context, keyPrefix string) (map[string]string, error) { |
| keyValues := make(map[string]string) |
| if kvClient != nil { |
| logger.Debugw(ctx, "Reading-all-key-value-pairs-from-kv-store", log.Fields{"key-prefix": keyPrefix}) |
| kvPairs, err := kvClient.client.List(ctx, keyPrefix) |
| if err != nil { |
| return keyValues, err |
| } |
| if kvPairs == nil { |
| return keyValues, errors.New("key not found") |
| } |
| |
| for key, kvPair := range kvPairs { |
| keyValues[key] = string(kvPair.Value.([]byte)) |
| } |
| return keyValues, nil |
| } |
| logger.Errorw(ctx, "Reading-all-key-value-pair-in-kv-store-failed-because-kvstore-not-initialised", log.Fields{"key-prefix": keyPrefix}) |
| return keyValues, errors.New("kvstore not initialised") |
| } |
| |
| // Del function deletes key value pair from db/kvstore |
| func Del(ctx context.Context, key string) error { |
| if kvClient != nil { |
| logger.Debugw(ctx, "Deleting-key-value-pair-from-kv-store", log.Fields{"key": key}) |
| return kvClient.client.Delete(ctx, key) |
| } |
| logger.Errorw(ctx, "Deleting-key-value-pair-in-kv-store-failed-because-kvstore-not-initialised", log.Fields{"key": key}) |
| return errors.New("kvstore not initialised") |
| } |
| |
| // DelAll function deletes all key value pair from db/kvstore with provided key prefix |
| func DelAll(ctx context.Context, keyPrefix string) error { |
| if kvClient != nil { |
| logger.Debugw(ctx, "Deleting-all-key-value-pair-from-kv-store-with-prefix", log.Fields{"key-prefix": keyPrefix}) |
| return kvClient.client.DeleteWithPrefix(ctx, keyPrefix) |
| } |
| logger.Errorw(ctx, "Deleting-all-key-value-pair-in-kv-store-with-prefix-failed-because-kvstore-not-initialised", log.Fields{"key-prefix": keyPrefix}) |
| return errors.New("kvstore not initialised") |
| } |
| |
| // Put function stores key value pair in db/kvstore |
| func Put(ctx context.Context, key string, val string) error { |
| if kvClient != nil { |
| logger.Debugw(ctx, "Storing-key-value-pair-in-kv-store", log.Fields{"key": key, "value": val}) |
| return kvClient.client.Put(ctx, key, val) |
| } |
| logger.Errorw(ctx, "Storing-key-value-pair-in-kv-store-failed-because-kvstore-not-initialised", log.Fields{"key": key, "value": val}) |
| return errors.New("kvstore not initialised") |
| } |