Skip to content

Commit

Permalink
Add Validate requests.storage field of PD/TiKV (#1983)
Browse files Browse the repository at this point in the history
  • Loading branch information
shonge authored May 8, 2020
1 parent c13f708 commit 6f8b69a
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 0 deletions.
11 changes: 11 additions & 0 deletions pkg/apis/pingcap/v1alpha1/tidbcluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
. "github.com/onsi/gomega"
apps "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/utils/pointer"
Expand Down Expand Up @@ -449,9 +450,19 @@ func newTidbCluster() *TidbCluster {
Spec: TidbClusterSpec{
PD: PDSpec{
Replicas: 3,
ResourceRequirements: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("10G"),
},
},
},
TiKV: TiKVSpec{
Replicas: 3,
ResourceRequirements: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("10G"),
},
},
},
TiDB: TiDBSpec{
Replicas: 1,
Expand Down
12 changes: 12 additions & 0 deletions pkg/apis/pingcap/v1alpha1/validation/validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/pingcap/tidb-operator/pkg/apis/pingcap/v1alpha1"
"github.com/pingcap/tidb-operator/pkg/label"
corev1 "k8s.io/api/core/v1"

apivalidation "k8s.io/apimachinery/pkg/api/validation"
"k8s.io/apimachinery/pkg/util/validation"
"k8s.io/apimachinery/pkg/util/validation/field"
Expand Down Expand Up @@ -67,12 +68,14 @@ func validateTiDBClusterSpec(spec *v1alpha1.TidbClusterSpec, fldPath *field.Path
func validatePDSpec(spec *v1alpha1.PDSpec, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
allErrs = append(allErrs, validateComponentSpec(&spec.ComponentSpec, fldPath)...)
allErrs = append(allErrs, validateRequestsStorage(spec.ResourceRequirements.Requests, fldPath)...)
return allErrs
}

func validateTiKVSpec(spec *v1alpha1.TiKVSpec, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
allErrs = append(allErrs, validateComponentSpec(&spec.ComponentSpec, fldPath)...)
allErrs = append(allErrs, validateRequestsStorage(spec.ResourceRequirements.Requests, fldPath)...)
return allErrs
}

Expand Down Expand Up @@ -168,6 +171,15 @@ func validateComponentSpec(spec *v1alpha1.ComponentSpec, fldPath *field.Path) fi
return allErrs
}

//validateRequestsStorage validates resources requests storage
func validateRequestsStorage(requests corev1.ResourceList, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
if _, ok := requests[corev1.ResourceStorage]; !ok {
allErrs = append(allErrs, field.Required(fldPath.Child("requests.storage").Key((string(corev1.ResourceStorage))), "storage request must not be empty"))
}
return allErrs
}

// validateEnv validates env vars
func validateEnv(vars []corev1.EnvVar, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
Expand Down
51 changes: 51 additions & 0 deletions pkg/apis/pingcap/v1alpha1/validation/validation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ import (
"strings"
"testing"

. "github.com/onsi/gomega"
"github.com/pingcap/tidb-operator/pkg/apis/pingcap/v1alpha1"
"github.com/pingcap/tidb-operator/pkg/label"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/validation/field"
)
Expand Down Expand Up @@ -179,3 +182,51 @@ func TestValidateAnnotations(t *testing.T) {
}
}
}

func TestValidateRequestsStorage(t *testing.T) {
g := NewGomegaWithT(t)
tests := []struct {
name string
haveRequest bool
resourceRequirements corev1.ResourceRequirements
expectedErrors int
}{
{
name: "has request storage",
haveRequest: true,
resourceRequirements: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("10G"),
},
},
expectedErrors: 0,
},
{
name: "Empty request storage",
haveRequest: false,
resourceRequirements: corev1.ResourceRequirements{
Requests: corev1.ResourceList{},
},
expectedErrors: 2,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
tc := newTidbCluster()
if tt.haveRequest {
tc.Spec.PD.ResourceRequirements = tt.resourceRequirements
tc.Spec.TiKV.ResourceRequirements = tt.resourceRequirements
}
err := ValidateTidbCluster(tc)
r := len(err)
g.Expect(r).Should(Equal(tt.expectedErrors))
})
}
}

func newTidbCluster() *v1alpha1.TidbCluster {
tc := &v1alpha1.TidbCluster{}
tc.Name = "test-validate-requests-storage"
tc.Namespace = "default"
return tc
}
11 changes: 11 additions & 0 deletions pkg/controller/tidbcluster/tidb_cluster_control_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
apps "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
apiequality "k8s.io/apimachinery/pkg/api/equality"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/client-go/tools/record"
Expand Down Expand Up @@ -355,11 +356,21 @@ func newTidbClusterForTidbClusterControl() *v1alpha1.TidbCluster {
Replicas: 3,
BaseImage: "pingcap/pd",
Config: &v1alpha1.PDConfig{},
ResourceRequirements: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("10G"),
},
},
},
TiKV: v1alpha1.TiKVSpec{
Replicas: 3,
BaseImage: "pingcap/tikv",
Config: &v1alpha1.TiKVConfig{},
ResourceRequirements: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("10G"),
},
},
},
TiDB: v1alpha1.TiDBSpec{
Replicas: 2,
Expand Down
11 changes: 11 additions & 0 deletions pkg/controller/tidbcluster/tidb_cluster_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"github.com/pingcap/tidb-operator/pkg/scheme"
apps "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
kubeinformers "k8s.io/client-go/informers"
Expand Down Expand Up @@ -306,11 +307,21 @@ func newTidbCluster() *v1alpha1.TidbCluster {
ComponentSpec: v1alpha1.ComponentSpec{
Image: "pd-test-image",
},
ResourceRequirements: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("10G"),
},
},
},
TiKV: v1alpha1.TiKVSpec{
ComponentSpec: v1alpha1.ComponentSpec{
Image: "tikv-test-image",
},
ResourceRequirements: corev1.ResourceRequirements{
Requests: corev1.ResourceList{
corev1.ResourceStorage: resource.MustParse("10G"),
},
},
},
TiDB: v1alpha1.TiDBSpec{
ComponentSpec: v1alpha1.ComponentSpec{
Expand Down
31 changes: 31 additions & 0 deletions tests/e2e/tidbcluster/serial.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ import (
corev1 "k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/util/sets"
Expand Down Expand Up @@ -510,12 +511,22 @@ var _ = ginkgo.Describe("[tidb-operator][Serial]", func() {
ComponentSpec: v1alpha1.ComponentSpec{
Image: fmt.Sprintf("pingcap/tikv:%s", utilimage.TiDBV3Version),
},
ResourceRequirements: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceStorage: resource.MustParse("10G"),
},
},
},
PD: v1alpha1.PDSpec{
Replicas: 1,
ComponentSpec: v1alpha1.ComponentSpec{
Image: fmt.Sprintf("pingcap/pd:%s", utilimage.TiDBV3Version),
},
ResourceRequirements: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceStorage: resource.MustParse("10G"),
},
},
},
},
}
Expand Down Expand Up @@ -560,11 +571,21 @@ var _ = ginkgo.Describe("[tidb-operator][Serial]", func() {
ComponentSpec: v1alpha1.ComponentSpec{
Image: fmt.Sprintf("pingcap/tikv:%s", utilimage.TiDBV3Version),
},
ResourceRequirements: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceStorage: resource.MustParse("10G"),
},
},
},
PD: v1alpha1.PDSpec{
ComponentSpec: v1alpha1.ComponentSpec{
Image: fmt.Sprintf("pingcap/pd:%s", utilimage.TiDBV3Version),
},
ResourceRequirements: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceStorage: resource.MustParse("10G"),
},
},
},
},
}
Expand All @@ -585,9 +606,19 @@ var _ = ginkgo.Describe("[tidb-operator][Serial]", func() {
},
TiKV: v1alpha1.TiKVSpec{
Replicas: 1,
ResourceRequirements: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceStorage: resource.MustParse("10G"),
},
},
},
PD: v1alpha1.PDSpec{
Replicas: 1,
ResourceRequirements: v1.ResourceRequirements{
Requests: v1.ResourceList{
v1.ResourceStorage: resource.MustParse("10G"),
},
},
},
},
}
Expand Down

0 comments on commit 6f8b69a

Please sign in to comment.