mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 14:07:14 +00:00
add CheckpointNotFound error
This commit is contained in:
parent
95badd95ce
commit
012acad32e
@ -23,6 +23,8 @@ import (
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"k8s.io/kubernetes/pkg/kubelet/dockershim/errors"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -40,6 +42,7 @@ type CheckpointStore interface {
|
||||
// Write persists a checkpoint with key
|
||||
Write(key string, data []byte) error
|
||||
// Read retrieves a checkpoint with key
|
||||
// Read must return CheckpointNotFoundError if checkpoint is not found
|
||||
Read(key string) ([]byte, error)
|
||||
// Delete deletes a checkpoint with key
|
||||
// Delete must not return error if checkpoint does not exist
|
||||
@ -75,7 +78,11 @@ func (fstore *FileStore) Read(key string) ([]byte, error) {
|
||||
if err := validateKey(key); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ioutil.ReadFile(fstore.getCheckpointPath(key))
|
||||
bytes, err := ioutil.ReadFile(fstore.getCheckpointPath(key))
|
||||
if os.IsNotExist(err) {
|
||||
return bytes, errors.CheckpointNotFoundError
|
||||
}
|
||||
return bytes, err
|
||||
}
|
||||
|
||||
func (fstore *FileStore) Delete(key string) error {
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"k8s.io/kubernetes/pkg/kubelet/dockershim/errors"
|
||||
)
|
||||
|
||||
func TestFileStore(t *testing.T) {
|
||||
@ -102,7 +103,7 @@ func TestFileStore(t *testing.T) {
|
||||
err = store.Delete(c.key)
|
||||
assert.NoError(t, err)
|
||||
_, err = store.Read(c.key)
|
||||
assert.Error(t, err)
|
||||
assert.EqualValues(t, errors.CheckpointNotFoundError, err)
|
||||
}
|
||||
|
||||
// Test delete non existed checkpoint
|
||||
|
@ -23,6 +23,7 @@ import (
|
||||
"path/filepath"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/kubernetes/pkg/kubelet/dockershim/errors"
|
||||
hashutil "k8s.io/kubernetes/pkg/util/hash"
|
||||
)
|
||||
|
||||
@ -34,8 +35,6 @@ const (
|
||||
schemaVersion = "v1"
|
||||
)
|
||||
|
||||
var CorruptCheckpointError = fmt.Errorf("checkpoint is corrupted.")
|
||||
|
||||
type Protocol string
|
||||
|
||||
// PortMapping is the port mapping configurations of a sandbox.
|
||||
@ -108,11 +107,11 @@ func (handler *PersistentCheckpointHandler) GetCheckpoint(podSandboxID string) (
|
||||
err = json.Unmarshal(blob, &checkpoint)
|
||||
if err != nil {
|
||||
glog.Errorf("Failed to unmarshal checkpoint %q. Checkpoint content: %q. ErrMsg: %v", podSandboxID, string(blob), err)
|
||||
return &checkpoint, CorruptCheckpointError
|
||||
return &checkpoint, errors.CorruptCheckpointError
|
||||
}
|
||||
if checkpoint.CheckSum != calculateChecksum(checkpoint) {
|
||||
glog.Errorf("Checksum of checkpoint %q is not valid", podSandboxID)
|
||||
return &checkpoint, CorruptCheckpointError
|
||||
return &checkpoint, errors.CorruptCheckpointError
|
||||
}
|
||||
return &checkpoint, nil
|
||||
}
|
||||
|
@ -27,6 +27,7 @@ import (
|
||||
utilerrors "k8s.io/apimachinery/pkg/util/errors"
|
||||
runtimeapi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime"
|
||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||
"k8s.io/kubernetes/pkg/kubelet/dockershim/errors"
|
||||
"k8s.io/kubernetes/pkg/kubelet/dockertools"
|
||||
"k8s.io/kubernetes/pkg/kubelet/qos"
|
||||
"k8s.io/kubernetes/pkg/kubelet/types"
|
||||
@ -355,7 +356,7 @@ func (ds *dockerService) ListPodSandbox(filter *runtimeapi.PodSandboxFilter) ([]
|
||||
if err != nil {
|
||||
glog.Errorf("Failed to retrieve checkpoint for sandbox %q: %v", id, err)
|
||||
|
||||
if err == CorruptCheckpointError {
|
||||
if err == errors.CorruptCheckpointError {
|
||||
glog.V(2).Info("Removing corrupted checkpoint %q: %+v", id, *checkpoint)
|
||||
ds.checkpointHandler.RemoveCheckpoint(id)
|
||||
}
|
||||
|
@ -32,6 +32,7 @@ import (
|
||||
kubecm "k8s.io/kubernetes/pkg/kubelet/cm"
|
||||
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
|
||||
"k8s.io/kubernetes/pkg/kubelet/dockershim/cm"
|
||||
"k8s.io/kubernetes/pkg/kubelet/dockershim/errors"
|
||||
"k8s.io/kubernetes/pkg/kubelet/dockertools"
|
||||
"k8s.io/kubernetes/pkg/kubelet/network"
|
||||
"k8s.io/kubernetes/pkg/kubelet/network/cni"
|
||||
@ -292,8 +293,14 @@ func (ds *dockerService) GetNetNS(podSandboxID string) (string, error) {
|
||||
func (ds *dockerService) GetPodPortMappings(podSandboxID string) ([]*hostport.PortMapping, error) {
|
||||
// TODO: get portmappings from docker labels for backward compatibility
|
||||
checkpoint, err := ds.checkpointHandler.GetCheckpoint(podSandboxID)
|
||||
// Return empty portMappings if checkpoint is not found
|
||||
if err != nil {
|
||||
return nil, err
|
||||
if err == errors.CheckpointNotFoundError {
|
||||
glog.Warningf("Failed to retrieve checkpoint for sandbox %q: %v", err)
|
||||
return nil, nil
|
||||
} else {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
portMappings := []*hostport.PortMapping{}
|
||||
|
22
pkg/kubelet/dockershim/errors/errors.go
Normal file
22
pkg/kubelet/dockershim/errors/errors.go
Normal file
@ -0,0 +1,22 @@
|
||||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package errors
|
||||
|
||||
import "fmt"
|
||||
|
||||
var CorruptCheckpointError = fmt.Errorf("checkpoint is corrupted.")
|
||||
var CheckpointNotFoundError = fmt.Errorf("checkpoint is not found.")
|
@ -17,8 +17,9 @@ limitations under the License.
|
||||
package testing
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
|
||||
"k8s.io/kubernetes/pkg/kubelet/dockershim/errors"
|
||||
)
|
||||
|
||||
// MemStore is an implementation of CheckpointStore interface which stores checkpoint in memory.
|
||||
@ -43,7 +44,7 @@ func (mstore *MemStore) Read(key string) ([]byte, error) {
|
||||
defer mstore.Unlock()
|
||||
data, ok := mstore.mem[key]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("checkpoint %q could not be found", key)
|
||||
return nil, errors.CheckpointNotFoundError
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user