118 lines
5.2 KiB
Diff
118 lines
5.2 KiB
Diff
From 38bed99e8cb58ad3c7fe0ef386c66c558d16b569 Mon Sep 17 00:00:00 2001
|
|
From: DCCooper <1866858@gmail.com>
|
|
Date: Tue, 9 Nov 2021 19:18:45 +0800
|
|
Subject: [PATCH] enhancement: add log info to show the image layer number
|
|
|
|
reason: when save separated image, the layer number should be
|
|
printed out into log
|
|
|
|
Signed-off-by: DCCooper <1866858@gmail.com>
|
|
---
|
|
daemon/save.go | 18 +++++++++++++-----
|
|
hack/unit_test.sh | 6 ++++--
|
|
2 files changed, 17 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/daemon/save.go b/daemon/save.go
|
|
index 9c5e563..f14a485 100644
|
|
--- a/daemon/save.go
|
|
+++ b/daemon/save.go
|
|
@@ -139,7 +139,7 @@ type tarballInfo struct {
|
|
BaseTarName string `json:"base"`
|
|
BaseHash string `json:"baseHash"`
|
|
BaseImageName string `json:"baseImageName"`
|
|
- BaseLayers []string `json:"baseLayer"`
|
|
+ BaseLayer string `json:"baseLayer"`
|
|
}
|
|
|
|
func (b *Backend) getSaveOptions(req *pb.SaveRequest) saveOptions {
|
|
@@ -381,7 +381,7 @@ func (opts *saveOptions) checkRenameFile() error {
|
|
return nil
|
|
}
|
|
|
|
-func getLayerHashFromStorage(store *store.Store, name string) ([]string, error) {
|
|
+func (s *separatorSave) getLayerHashFromStorage(store *store.Store, name string) ([]string, error) {
|
|
if len(name) == 0 {
|
|
return nil, nil
|
|
}
|
|
@@ -632,8 +632,11 @@ func (info imageInfo) processTarName(suffix string) string {
|
|
func (info *imageInfo) processBaseImg(sep *separatorSave, baseImagesMap map[string]string, tarball *tarballInfo) error {
|
|
// process base
|
|
tarball.BaseImageName = sep.base
|
|
+ if len(info.layers.base) != 0 {
|
|
+ sep.log.Infof("Base image %s has %d layers", sep.base, len(info.layers.base))
|
|
+ tarball.BaseLayer = info.layers.base[0]
|
|
+ }
|
|
for _, layerID := range info.layers.base {
|
|
- tarball.BaseLayers = append(tarball.BaseLayers, layerID)
|
|
if baseImg, ok := baseImagesMap[layerID]; !ok {
|
|
srcLayerPath := filepath.Join(sep.tmpDir.untar, layerID)
|
|
destLayerPath := filepath.Join(sep.tmpDir.base, layerID)
|
|
@@ -673,6 +676,7 @@ func (info *imageInfo) processLibImg(sep *separatorSave, libImagesMap map[string
|
|
}
|
|
|
|
tarball.LibImageName = sep.lib
|
|
+ sep.log.Infof("Lib image %s has %d layers", sep.lib, len(info.layers.lib))
|
|
for _, layerID := range info.layers.lib {
|
|
tarball.LibLayers = append(tarball.LibLayers, layerID)
|
|
if libImg, ok := libImagesMap[layerID]; !ok {
|
|
@@ -709,6 +713,7 @@ func (info *imageInfo) processLibImg(sep *separatorSave, libImagesMap map[string
|
|
|
|
func (info *imageInfo) processAppImg(sep *separatorSave, appImagesMap map[string]string, tarball *tarballInfo) error {
|
|
// process app
|
|
+ sep.log.Infof("App image %s has %d layers", info.nameTag, len(info.layers.app))
|
|
appTarName := info.processTarName(appTarNameSuffix)
|
|
appTarName = sep.rename(appTarName)
|
|
appTarPath := filepath.Join(sep.dest, appTarName)
|
|
@@ -834,14 +839,17 @@ func (s *separatorSave) constructSingleImgInfo(mani imageManifest, store *store.
|
|
}
|
|
|
|
func (s *separatorSave) checkLayersHash(layerHashMap map[string]string, store *store.Store) ([]string, []string, error) {
|
|
- libHash, err := getLayerHashFromStorage(store, s.lib)
|
|
+ libHash, err := s.getLayerHashFromStorage(store, s.lib)
|
|
if err != nil {
|
|
return nil, nil, errors.Wrapf(err, "get lib image %s layers failed", s.lib)
|
|
}
|
|
- baseHash, err := getLayerHashFromStorage(store, s.base)
|
|
+ baseHash, err := s.getLayerHashFromStorage(store, s.base)
|
|
if err != nil {
|
|
return nil, nil, errors.Wrapf(err, "get base image %s layers failed", s.base)
|
|
}
|
|
+ if len(baseHash) > 1 {
|
|
+ return nil, nil, errors.Errorf("number of base layers %d more than one", len(baseHash))
|
|
+ }
|
|
if len(libHash) >= len(layerHashMap) || len(baseHash) >= len(layerHashMap) {
|
|
return nil, nil, errors.Errorf("number of base or lib layers is equal or greater than saved app layers")
|
|
}
|
|
diff --git a/hack/unit_test.sh b/hack/unit_test.sh
|
|
index 161feb6..b6a7978 100755
|
|
--- a/hack/unit_test.sh
|
|
+++ b/hack/unit_test.sh
|
|
@@ -28,6 +28,8 @@ go_test_mod_method="-mod=vendor"
|
|
go_test_count_method="-count=1"
|
|
go_test_timeout_flag="-timeout=300s"
|
|
go_test_race_flag="-race"
|
|
+go_test_covermode_flag="-covermode=atomic"
|
|
+go_test_coverprofile_flag="-coverprofile=/dev/null"
|
|
|
|
function precheck() {
|
|
if pgrep isula-builder > /dev/null 2>&1; then
|
|
@@ -54,13 +56,13 @@ function run_unit_test() {
|
|
echo "Start to test: ${package}"
|
|
if [[ -n ${run_coverage} ]]; then
|
|
coverprofile_file="${covers_folder}/$(echo "${package}" | tr / -).cover"
|
|
- coverprofile_flag="-coverprofile=${coverprofile_file}"
|
|
+ go_test_coverprofile_flag="-coverprofile=${coverprofile_file}"
|
|
go_test_covermode_flag="-covermode=set"
|
|
go_test_race_flag=""
|
|
fi
|
|
# TEST_ARGS is " -args SKIP_REG=foo", so no double quote for it
|
|
# shellcheck disable=SC2086
|
|
- go test -v ${go_test_race_flag} "${go_test_mod_method}" ${coverprofile_flag} "${go_test_covermode_flag}" -coverpkg=${package} "${go_test_count_method}" "${go_test_timeout_flag}" "${package}" ${TEST_ARGS} >> "${testlog}"
|
|
+ go test -v "${go_test_race_flag}" "${go_test_mod_method}" "${go_test_coverprofile_flag}" "${go_test_covermode_flag}" -coverpkg=${package} "${go_test_count_method}" "${go_test_timeout_flag}" "${package}" ${TEST_ARGS} >> "${testlog}"
|
|
done
|
|
|
|
if grep -E -- "--- FAIL:|^FAIL" "${testlog}"; then
|
|
--
|
|
1.8.3.1
|
|
|