Split parseNetNSBoltData from BoltState.getContainerFromDB

This is the actual platform-specific part of getContainerFromDB.

Factor it out, unchanged, on Linux. On other platforms, introduce
a stub which fails if any data exists; this stub is not yet called.

Should not change behavior.

Signed-off-by: Miloslav Trmač <mitr@redhat.com>

Closes: #1115
Approved by: rhatdan
This commit is contained in:
Miloslav Trmač
2018-07-25 04:19:58 +02:00
committed by Atomic Bot
parent 24fe6e950c
commit eba6bf0018
2 changed files with 31 additions and 11 deletions

View File

@ -13,6 +13,24 @@ import (
"github.com/sirupsen/logrus"
)
// parseNetNSBoltData sets ctr.state.NetNS, if any, from netNSBytes.
// Returns true if the data is valid.
func parseNetNSBoltData(ctr *Container, netNSBytes []byte) bool {
// The container may not have a network namespace, so it's OK if this is
// nil
if netNSBytes != nil {
nsPath := string(netNSBytes)
netNS, err := joinNetNS(nsPath)
if err == nil {
ctr.state.NetNS = netNS
} else {
logrus.Errorf("error joining network namespace for container %s", ctr.ID())
return false
}
}
return true
}
func (s *BoltState) getContainerFromDB(id []byte, ctr *Container, ctrsBkt *bolt.Bucket) error {
valid := true
ctrBkt := ctrsBkt.Bucket(id)
@ -47,17 +65,8 @@ func (s *BoltState) getContainerFromDB(id []byte, ctr *Container, ctrsBkt *bolt.
return errors.Wrapf(err, "error unmarshalling container %s state", string(id))
}
// The container may not have a network namespace, so it's OK if this is
// nil
if netNSBytes != nil {
nsPath := string(netNSBytes)
netNS, err := joinNetNS(nsPath)
if err == nil {
ctr.state.NetNS = netNS
} else {
logrus.Errorf("error joining network namespace for container %s", ctr.ID())
valid = false
}
if !parseNetNSBoltData(ctr, netNSBytes) {
valid = false
}
// Get the lock

View File

@ -4,8 +4,19 @@ package libpod
import (
"github.com/boltdb/bolt"
"github.com/sirupsen/logrus"
)
// parseNetNSBoltData sets ctr.state.NetNS, if any, from netNSBytes.
// Returns true if the data is valid.
func parseNetNSBoltData(ctr *Container, netNSBytes []byte) bool {
if netNSBytes != nil {
logrus.Errorf("error loading %s: network namespaces are not supported on this platform", ctr.ID())
return false
}
return true
}
func (s *BoltState) getContainerFromDB(id []byte, ctr *Container, ctrsBkt *bolt.Bucket) error {
return ErrNotImplemented
}