ContainerStatus to return container resources
Signed-off-by: ruiwen-zhao <ruiwen@google.com>
This commit is contained in:
@@ -97,6 +97,8 @@ type Status struct {
|
||||
// Unknown indicates that the container status is not fully loaded.
|
||||
// This field doesn't need to be checkpointed.
|
||||
Unknown bool `json:"-"`
|
||||
// Resources has container runtime resource constraints
|
||||
Resources *runtime.ContainerResources
|
||||
}
|
||||
|
||||
// State returns current state of the container based on the container status.
|
||||
@@ -203,7 +205,56 @@ type statusStorage struct {
|
||||
func (s *statusStorage) Get() Status {
|
||||
s.RLock()
|
||||
defer s.RUnlock()
|
||||
return s.status
|
||||
// Deep copy is needed in case some fields in Status are updated after Get()
|
||||
// is called.
|
||||
return deepCopyOf(s.status)
|
||||
}
|
||||
|
||||
func deepCopyOf(s Status) Status {
|
||||
copy := s
|
||||
// Resources is the only field that is a pointer, and therefore needs
|
||||
// a manual deep copy.
|
||||
// This will need updates when new fields are added to ContainerResources.
|
||||
if s.Resources == nil {
|
||||
return copy
|
||||
}
|
||||
copy.Resources = &runtime.ContainerResources{}
|
||||
if s.Resources != nil && s.Resources.Linux != nil {
|
||||
hugepageLimits := make([]*runtime.HugepageLimit, len(s.Resources.Linux.HugepageLimits))
|
||||
for _, l := range s.Resources.Linux.HugepageLimits {
|
||||
hugepageLimits = append(hugepageLimits, &runtime.HugepageLimit{
|
||||
PageSize: l.PageSize,
|
||||
Limit: l.Limit,
|
||||
})
|
||||
}
|
||||
copy.Resources = &runtime.ContainerResources{
|
||||
Linux: &runtime.LinuxContainerResources{
|
||||
CpuPeriod: s.Resources.Linux.CpuPeriod,
|
||||
CpuQuota: s.Resources.Linux.CpuQuota,
|
||||
CpuShares: s.Resources.Linux.CpuShares,
|
||||
CpusetCpus: s.Resources.Linux.CpusetCpus,
|
||||
CpusetMems: s.Resources.Linux.CpusetMems,
|
||||
MemoryLimitInBytes: s.Resources.Linux.MemoryLimitInBytes,
|
||||
MemorySwapLimitInBytes: s.Resources.Linux.MemorySwapLimitInBytes,
|
||||
OomScoreAdj: s.Resources.Linux.OomScoreAdj,
|
||||
Unified: s.Resources.Linux.Unified,
|
||||
HugepageLimits: hugepageLimits,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
if s.Resources != nil && s.Resources.Windows != nil {
|
||||
copy.Resources = &runtime.ContainerResources{
|
||||
Windows: &runtime.WindowsContainerResources{
|
||||
CpuShares: s.Resources.Windows.CpuShares,
|
||||
CpuCount: s.Resources.Windows.CpuCount,
|
||||
CpuMaximum: s.Resources.Windows.CpuMaximum,
|
||||
MemoryLimitInBytes: s.Resources.Windows.MemoryLimitInBytes,
|
||||
RootfsSizeInBytes: s.Resources.Windows.RootfsSizeInBytes,
|
||||
},
|
||||
}
|
||||
}
|
||||
return copy
|
||||
}
|
||||
|
||||
// UpdateSync updates the container status and the on disk checkpoint.
|
||||
|
||||
Reference in New Issue
Block a user