...
1 package store
2
3 import (
4 bolt "go.etcd.io/bbolt"
5 )
6
7 const schemaVersion = "v1"
8
9 var (
10 bucketKeyVersion = []byte(schemaVersion)
11
12 bucketKeyNetwork = []byte("network")
13 bucketKeyEndpoint = []byte("endpoint")
14 bucketKeyComputeAgent = []byte("computeagent")
15 )
16
17
18
19
20
21
22
23
24
25 func getBucket(tx *bolt.Tx, keys ...[]byte) *bolt.Bucket {
26 bkt := tx.Bucket(keys[0])
27
28 for _, key := range keys[1:] {
29 if bkt == nil {
30 break
31 }
32 bkt = bkt.Bucket(key)
33 }
34
35 return bkt
36 }
37
38
39 func createBucketIfNotExists(tx *bolt.Tx, keys ...[]byte) (*bolt.Bucket, error) {
40 bkt, err := tx.CreateBucketIfNotExists(keys[0])
41 if err != nil {
42 return nil, err
43 }
44
45 for _, key := range keys[1:] {
46 bkt, err = bkt.CreateBucketIfNotExists(key)
47 if err != nil {
48 return nil, err
49 }
50 }
51
52 return bkt, nil
53 }
54
55 func createNetworkBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
56 return createBucketIfNotExists(tx, bucketKeyVersion, bucketKeyNetwork)
57 }
58
59 func getNetworkBucket(tx *bolt.Tx) *bolt.Bucket {
60 return getBucket(tx, bucketKeyVersion, bucketKeyNetwork)
61 }
62
63 func createEndpointBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
64 return createBucketIfNotExists(tx, bucketKeyVersion, bucketKeyEndpoint)
65 }
66
67 func getEndpointBucket(tx *bolt.Tx) *bolt.Bucket {
68 return getBucket(tx, bucketKeyVersion, bucketKeyEndpoint)
69 }
70
71 func createComputeAgentBucket(tx *bolt.Tx) (*bolt.Bucket, error) {
72 return createBucketIfNotExists(tx, bucketKeyVersion, bucketKeyComputeAgent)
73 }
74
75 func getComputeAgentBucket(tx *bolt.Tx) *bolt.Bucket {
76 return getBucket(tx, bucketKeyVersion, bucketKeyComputeAgent)
77 }
78
View as plain text