package libnetwork import ( "encoding/json" "sync" "github.com/moby/moby/v2/daemon/libnetwork/datastore" ) // endpointCnt was used to refcount network-endpoint relationships. It's // unused since v28.1, and kept around only to ensure that users can properly // downgrade. // // TODO(aker): remove this struct in v30. type endpointCnt struct { n *Network Count uint64 dbIndex uint64 dbExists bool sync.Mutex } const epCntKeyPrefix = "endpoint_count" func (ec *endpointCnt) Key() []string { ec.Lock() defer ec.Unlock() return []string{epCntKeyPrefix, ec.n.id} } func (ec *endpointCnt) KeyPrefix() []string { ec.Lock() defer ec.Unlock() return []string{epCntKeyPrefix, ec.n.id} } func (ec *endpointCnt) Value() []byte { ec.Lock() defer ec.Unlock() b, err := json.Marshal(ec) if err != nil { return nil } return b } func (ec *endpointCnt) SetValue(value []byte) error { ec.Lock() defer ec.Unlock() return json.Unmarshal(value, &ec) } func (ec *endpointCnt) Index() uint64 { ec.Lock() defer ec.Unlock() return ec.dbIndex } func (ec *endpointCnt) SetIndex(index uint64) { ec.Lock() ec.dbIndex = index ec.dbExists = true ec.Unlock() } func (ec *endpointCnt) Exists() bool { ec.Lock() defer ec.Unlock() return ec.dbExists } func (ec *endpointCnt) Skip() bool { ec.Lock() defer ec.Unlock() return !ec.n.persist } func (ec *endpointCnt) New() datastore.KVObject { ec.Lock() defer ec.Unlock() return &endpointCnt{ n: ec.n, } } func (ec *endpointCnt) CopyTo(o datastore.KVObject) error { ec.Lock() defer ec.Unlock() dstEc := o.(*endpointCnt) dstEc.n = ec.n dstEc.Count = ec.Count dstEc.dbExists = ec.dbExists dstEc.dbIndex = ec.dbIndex return nil }