Fix the potential runtime type casting error

This commit is contained in:
robbiezhang
2018-10-18 19:15:05 +00:00
parent 4a7b74ed42
commit a6bab6e3bb

View File

@@ -3,6 +3,7 @@ package vkubelet
import ( import (
"context" "context"
"fmt" "fmt"
"reflect"
"time" "time"
pkgerrors "github.com/pkg/errors" pkgerrors "github.com/pkg/errors"
@@ -30,11 +31,10 @@ func (s *Server) onAddPod(ctx context.Context, obj interface{}) {
defer span.End() defer span.End()
logger := log.G(ctx).WithField("method", "onAddPod") logger := log.G(ctx).WithField("method", "onAddPod")
pod := obj.(*corev1.Pod) pod, ok := obj.(*corev1.Pod)
if !ok {
if pod == nil { span.SetStatus(trace.Status{Code: trace.StatusCodeInvalidArgument, Message: fmt.Sprintf("Unexpected object from event: %s", reflect.TypeOf(obj))})
span.SetStatus(trace.Status{Code: trace.StatusCodeInvalidArgument, Message: fmt.Sprintf("Unexpected object from event: %v", obj)}) logger.Errorf("obj is not of a valid type: %s", reflect.TypeOf(obj))
logger.Errorf("obj is not a valid pod: %v", obj)
return return
} }
@@ -53,11 +53,10 @@ func (s *Server) onUpdatePod(ctx context.Context, obj interface{}) {
defer span.End() defer span.End()
logger := log.G(ctx).WithField("method", "onUpdatePod") logger := log.G(ctx).WithField("method", "onUpdatePod")
pod := obj.(*corev1.Pod) pod, ok := obj.(*corev1.Pod)
if !ok {
if pod == nil { span.SetStatus(trace.Status{Code: trace.StatusCodeInvalidArgument, Message: fmt.Sprintf("Unexpected object from event: %s", reflect.TypeOf(obj))})
span.SetStatus(trace.Status{Code: trace.StatusCodeInvalidArgument, Message: fmt.Sprintf("Unexpected object from event: %v", obj)}) logger.Errorf("obj is not of a valid type: %s", reflect.TypeOf(obj))
logger.Errorf("obj is not a valid pod: %v", obj)
return return
} }
@@ -76,12 +75,20 @@ func (s *Server) onDeletePod(ctx context.Context, obj interface{}) {
defer span.End() defer span.End()
logger := log.G(ctx).WithField("method", "onDeletePod") logger := log.G(ctx).WithField("method", "onDeletePod")
pod := obj.(*corev1.Pod) pod, ok := obj.(*corev1.Pod)
if !ok {
delta, ok := obj.(cache.DeletedFinalStateUnknown)
if !ok {
span.SetStatus(trace.Status{Code: trace.StatusCodeInvalidArgument, Message: fmt.Sprintf("Unexpected object from event: %s", reflect.TypeOf(obj))})
logger.Errorf("obj is not of a valid type: %s", reflect.TypeOf(obj))
return
}
if pod == nil { if pod, ok = delta.Obj.(*corev1.Pod); !ok {
span.SetStatus(trace.Status{Code: trace.StatusCodeInvalidArgument, Message: fmt.Sprintf("Unexpected object from event: %v", obj)}) span.SetStatus(trace.Status{Code: trace.StatusCodeInvalidArgument, Message: fmt.Sprintf("Unexpected object from event: %s", reflect.TypeOf(obj))})
logger.Errorf("obj is not a valid pod: %v", obj) logger.Errorf("obj is not of a valid type: %s", reflect.TypeOf(obj))
return return
}
} }
addPodAttributes(span, pod) addPodAttributes(span, pod)