Skip to content

Commit

Permalink
Add nil conversion for v1beta1 -> v1alpha2 explainer spec (kubeflow#1313
Browse files Browse the repository at this point in the history
)
  • Loading branch information
Tomcli authored Jan 21, 2021
1 parent 659b2c4 commit bb4f0ab
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 6 deletions.
12 changes: 7 additions & 5 deletions pkg/apis/serving/v1alpha2/inferenceservice_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -343,11 +343,13 @@ func (dst *InferenceService) ConvertFrom(srcRaw conversion.Hub) error {
},
}
}
dst.Spec.Default.Explainer.ServiceAccountName = src.Spec.Explainer.PodSpec.ServiceAccountName
dst.Spec.Default.Explainer.MinReplicas = src.Spec.Explainer.MinReplicas
dst.Spec.Default.Explainer.MaxReplicas = src.Spec.Explainer.MaxReplicas
if src.Spec.Explainer.ContainerConcurrency != nil {
dst.Spec.Default.Explainer.Parallelism = int(*src.Spec.Explainer.ContainerConcurrency)
if dst.Spec.Default.Explainer != nil {
dst.Spec.Default.Explainer.ServiceAccountName = src.Spec.Explainer.PodSpec.ServiceAccountName
dst.Spec.Default.Explainer.MinReplicas = src.Spec.Explainer.MinReplicas
dst.Spec.Default.Explainer.MaxReplicas = src.Spec.Explainer.MaxReplicas
if src.Spec.Explainer.ContainerConcurrency != nil {
dst.Spec.Default.Explainer.Parallelism = int(*src.Spec.Explainer.ContainerConcurrency)
}
}
}
return nil
Expand Down
90 changes: 89 additions & 1 deletion pkg/apis/serving/v1alpha2/inferenceservice_conversion_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,14 @@ limitations under the License.
package v1alpha2

import (
"testing"

"github.com/golang/protobuf/proto"
"github.com/google/go-cmp/cmp"
"github.com/kubeflow/kfserving/pkg/apis/serving/v1beta1"
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"testing"
)

func TestInferenceServiceConversion(t *testing.T) {
Expand Down Expand Up @@ -297,3 +298,90 @@ func TestInferenceServiceConversion(t *testing.T) {
})
}
}

func TestInferenceServiceNilExplainerConversion(t *testing.T) {
scenarios := map[string]struct {
v1alpha2spec *InferenceService
v1beta1Spec *v1beta1.InferenceService
}{
"explainer": {
v1alpha2spec: &InferenceService{
ObjectMeta: metav1.ObjectMeta{
Name: "explainerConversionTest",
Namespace: "default",
},
Spec: InferenceServiceSpec{
Default: EndpointSpec{
Predictor: PredictorSpec{
DeploymentSpec: DeploymentSpec{
MinReplicas: GetIntReference(1),
MaxReplicas: 3,
Parallelism: 1,
},
Tensorflow: &TensorflowSpec{
StorageURI: "s3://test/mnist/export",
RuntimeVersion: "1.13.0",
},
},
Explainer: nil,
},
},
},
v1beta1Spec: &v1beta1.InferenceService{
ObjectMeta: metav1.ObjectMeta{
Name: "explainerConversionTest",
Namespace: "default",
},
Spec: v1beta1.InferenceServiceSpec{
Predictor: v1beta1.PredictorSpec{
ComponentExtensionSpec: v1beta1.ComponentExtensionSpec{
MinReplicas: GetIntReference(1),
MaxReplicas: 3,
ContainerConcurrency: proto.Int64(1),
},
Tensorflow: &v1beta1.TFServingSpec{
PredictorExtensionSpec: v1beta1.PredictorExtensionSpec{
StorageURI: proto.String("s3://test/mnist/export"),
RuntimeVersion: proto.String("1.13.0"),
},
},
},
Explainer: &v1beta1.ExplainerSpec{
ComponentExtensionSpec: v1beta1.ComponentExtensionSpec{
MinReplicas: GetIntReference(1),
MaxReplicas: 3,
ContainerConcurrency: proto.Int64(1),
},
ART: &v1beta1.ARTExplainerSpec{
Type: v1beta1.ARTSquareAttackExplainer,
ExplainerExtensionSpec: v1beta1.ExplainerExtensionSpec{
RuntimeVersion: proto.String("0.4.0"),
Container: v1.Container{
Resources: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("1"),
v1.ResourceMemory: resource.MustParse("2Gi"),
},
Limits: v1.ResourceList{
v1.ResourceCPU: resource.MustParse("1"),
v1.ResourceMemory: resource.MustParse("2Gi"),
},
},
},
},
},
},
},
},
},
}
for name, scenario := range scenarios {
t.Run(name, func(t *testing.T) {
v1alpha2ExpectedSpec := &InferenceService{}
v1alpha2ExpectedSpec.ConvertFrom(scenario.v1beta1Spec)
if cmp.Diff(scenario.v1alpha2spec, v1alpha2ExpectedSpec) != "" {
t.Errorf("diff: %s", cmp.Diff(scenario.v1alpha2spec, v1alpha2ExpectedSpec))
}
})
}
}

0 comments on commit bb4f0ab

Please sign in to comment.