...

Source file src/github.com/Microsoft/hcsshim/internal/ncproxy/store/buckets.go

Documentation: github.com/Microsoft/hcsshim/internal/ncproxy/store

     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  // Below is the current database schema. This should be updated any time the schema is
    18  // changed or updated. The version should be incremented if breaking changes are made.
    19  //  └──v1                                        - Schema version bucket
    20  //     └──computeagent							 - Compute agent bucket
    21  //			└──containerID : <string>            - Entry in compute agent bucket: Address to
    22  //												   the compute agent for containerID
    23  
    24  // taken from containerd/containerd/metadata/buckets.go
    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  // taken from containerd/containerd/metadata/buckets.go
    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