vc: Utilize map for newMounts to speed up replaceOCIMountSource

Fixes #2212

Signed-off-by: Ted Yu <yuzhihong@gmail.com>
This commit is contained in:
Ted Yu 2019-11-19 07:46:48 -08:00
parent c0d2867a0e
commit 9a4ee4f205
2 changed files with 5 additions and 9 deletions

View File

@ -533,8 +533,8 @@ func (c *Container) shareFiles(m Mount, idx int, hostSharedDir, guestSharedDir s
// It also updates the container mount list with the HostPath info, and store // It also updates the container mount list with the HostPath info, and store
// container mounts to the storage. This way, we will have the HostPath info // container mounts to the storage. This way, we will have the HostPath info
// available when we will need to unmount those mounts. // available when we will need to unmount those mounts.
func (c *Container) mountSharedDirMounts(hostSharedDir, guestSharedDir string) ([]Mount, []Mount, error) { func (c *Container) mountSharedDirMounts(hostSharedDir, guestSharedDir string) (map[string]Mount, []Mount, error) {
var sharedDirMounts []Mount sharedDirMounts := make(map[string]Mount)
var ignoredMounts []Mount var ignoredMounts []Mount
for idx, m := range c.mounts { for idx, m := range c.mounts {
// Skip mounting certain system paths from the source on the host side // Skip mounting certain system paths from the source on the host side
@ -607,7 +607,7 @@ func (c *Container) mountSharedDirMounts(hostSharedDir, guestSharedDir string) (
ReadOnly: readonly, ReadOnly: readonly,
} }
sharedDirMounts = append(sharedDirMounts, sharedDirMount) sharedDirMounts[sharedDirMount.Destination] = sharedDirMount
} }
if !c.sandbox.supportNewStore() { if !c.sandbox.supportNewStore() {

View File

@ -962,15 +962,11 @@ func (k *kataAgent) stopSandbox(sandbox *Sandbox) error {
return nil return nil
} }
func (k *kataAgent) replaceOCIMountSource(spec *specs.Spec, guestMounts []Mount) error { func (k *kataAgent) replaceOCIMountSource(spec *specs.Spec, guestMounts map[string]Mount) error {
ociMounts := spec.Mounts ociMounts := spec.Mounts
for index, m := range ociMounts { for index, m := range ociMounts {
for _, guestMount := range guestMounts { if guestMount, ok := guestMounts[m.Destination]; ok {
if guestMount.Destination != m.Destination {
continue
}
k.Logger().Debugf("Replacing OCI mount (%s) source %s with %s", m.Destination, m.Source, guestMount.Source) k.Logger().Debugf("Replacing OCI mount (%s) source %s with %s", m.Destination, m.Source, guestMount.Source)
ociMounts[index].Source = guestMount.Source ociMounts[index].Source = guestMount.Source
} }