From af218ee6753a233774aa2fa11cff27b3748d7ee5 Mon Sep 17 00:00:00 2001 From: unclejack Date: Tue, 4 Nov 2014 15:43:58 +0200 Subject: [PATCH 1/3] daemon/container: stream & decode JSON Docker-DCO-1.1-Signed-off-by: Cristian Staretu (github: unclejack) Upstream-commit: 4bc28f4e6bb38ec70fb98a4deea723a2d0812d98 Component: engine --- components/engine/daemon/container.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/components/engine/daemon/container.go b/components/engine/daemon/container.go index a972f8b712..da5745650c 100644 --- a/components/engine/daemon/container.go +++ b/components/engine/daemon/container.go @@ -102,13 +102,17 @@ func (container *Container) FromDisk() error { return err } - data, err := ioutil.ReadFile(pth) + jsonSource, err := os.Open(pth) if err != nil { return err } + defer jsonSource.Close() + + dec := json.NewDecoder(jsonSource) + // Load container settings // udp broke compat of docker.PortMapping, but it's not used when loading a container, we can skip it - if err := json.Unmarshal(data, container); err != nil && !strings.Contains(err.Error(), "docker.PortMapping") { + if err := dec.Decode(container); err != nil && !strings.Contains(err.Error(), "docker.PortMapping") { return err } From 617b00b175e80ab16cd5925f72e84b685ceccdfb Mon Sep 17 00:00:00 2001 From: unclejack Date: Tue, 4 Nov 2014 15:45:46 +0200 Subject: [PATCH 2/3] image: stream img JSON & Decode in LoadImage Docker-DCO-1.1-Signed-off-by: Cristian Staretu (github: unclejack) Upstream-commit: 4dbbe4f51a22a9ec335fbf2f6e3981132f868312 Component: engine --- components/engine/image/image.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/components/engine/image/image.go b/components/engine/image/image.go index 47df76d9f3..dfa8e9a6e3 100644 --- a/components/engine/image/image.go +++ b/components/engine/image/image.go @@ -38,14 +38,18 @@ type Image struct { } func LoadImage(root string) (*Image, error) { - // Load the json data - jsonData, err := ioutil.ReadFile(jsonPath(root)) + // Open the JSON file to decode by streaming + jsonSource, err := os.Open(jsonPath(root)) if err != nil { return nil, err } - img := &Image{} + defer jsonSource.Close() - if err := json.Unmarshal(jsonData, img); err != nil { + img := &Image{} + dec := json.NewDecoder(jsonSource) + + // Decode the JSON data + if err := dec.Decode(img); err != nil { return nil, err } if err := utils.ValidateID(img.ID); err != nil { From ec75c9da78a9cd29aa06601274ef30899cac9c43 Mon Sep 17 00:00:00 2001 From: unclejack Date: Tue, 4 Nov 2014 15:46:45 +0200 Subject: [PATCH 3/3] volume: stream JSON & Decode Docker-DCO-1.1-Signed-off-by: Cristian Staretu (github: unclejack) Upstream-commit: f665be55fe832086202e54449402c1513cf4f195 Component: engine --- components/engine/volumes/volume.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/components/engine/volumes/volume.go b/components/engine/volumes/volume.go index 73cbb3640d..d718b07d70 100644 --- a/components/engine/volumes/volume.go +++ b/components/engine/volumes/volume.go @@ -154,12 +154,15 @@ func (v *Volume) FromDisk() error { return err } - data, err := ioutil.ReadFile(pth) + jsonSource, err := os.Open(pth) if err != nil { return err } + defer jsonSource.Close() - return json.Unmarshal(data, v) + dec := json.NewDecoder(jsonSource) + + return dec.Decode(v) } func (v *Volume) jsonPath() (string, error) {