You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2022/06/24 01:17:48 UTC
[servicecomb-service-center] branch master updated: Feature: add instanceIsolation kind (#1304)
This is an automated email from the ASF dual-hosted git repository.
littlecui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-service-center.git
The following commit(s) were added to refs/heads/master by this push:
new 417c1e9a Feature: add instanceIsolation kind (#1304)
417c1e9a is described below
commit 417c1e9a3e180722a720104bbc56e12f7730c7c7
Author: little-cui <su...@qq.com>
AuthorDate: Fri Jun 24 09:17:43 2022 +0800
Feature: add instanceIsolation kind (#1304)
---
pkg/gov/governance.go | 17 +++++++----------
pkg/gov/governance_test.go | 6 +++---
server/resource/gov/gov_resource.go | 2 +-
server/service/gov/config_distributor_test.go | 18 +++++++++---------
server/service/gov/kie/kie_distributor.go | 16 ++++++----------
server/service/gov/kie/validate.go | 1 +
server/service/gov/mock/mock.go | 2 +-
7 files changed, 28 insertions(+), 34 deletions(-)
diff --git a/pkg/gov/governance.go b/pkg/gov/governance.go
index 1aab551c..2acd95e8 100644
--- a/pkg/gov/governance.go
+++ b/pkg/gov/governance.go
@@ -22,12 +22,12 @@ package gov
//Name is the policy name, for example: "rate-limit-payment-api"
//MD is metadata.
type GovernancePolicy struct {
- Name string `json:"name,omitempty"`
- ID string `json:"id,omitempty"`
- Status string `json:"status,omitempty"`
- CreatTime int64 `json:"creatTime,omitempty"`
- UpdateTime int64 `json:"updateTime,omitempty"`
- Selector *Selector `json:"selector,omitempty"`
+ Name string `json:"name,omitempty"`
+ ID string `json:"id,omitempty"`
+ Status string `json:"status,omitempty"`
+ CreatTime int64 `json:"creatTime,omitempty"`
+ UpdateTime int64 `json:"updateTime,omitempty"`
+ Selector Selector `json:"selector,omitempty"`
}
//DisplayData define display data
@@ -43,10 +43,7 @@ type Policy struct {
Spec map[string]interface{} `json:"spec,omitempty"`
}
-type Selector struct {
- App string `json:"app,omitempty"`
- Environment string `json:"environment,omitempty"`
-}
+type Selector map[string]string
type LBSpec struct {
MarkerName string `json:"match"`
diff --git a/pkg/gov/governance_test.go b/pkg/gov/governance_test.go
index a247aefe..a318983a 100644
--- a/pkg/gov/governance_test.go
+++ b/pkg/gov/governance_test.go
@@ -50,9 +50,9 @@ func TestNewInstance(t *testing.T) {
GovernancePolicy: &gov.GovernancePolicy{
Name: "traffic2adminAPI",
ID: "",
- Selector: &gov.Selector{
- App: "default",
- Environment: "development",
+ Selector: gov.Selector{
+ "app": "default",
+ "environment": "development",
},
},
Spec: map[string]interface{}{
diff --git a/server/resource/gov/gov_resource.go b/server/resource/gov/gov_resource.go
index 2ccda467..9a77b32a 100644
--- a/server/resource/gov/gov_resource.go
+++ b/server/resource/gov/gov_resource.go
@@ -55,7 +55,7 @@ func (t *Governance) Create(w http.ResponseWriter, r *http.Request) {
return
}
p := &model.Policy{
- GovernancePolicy: &model.GovernancePolicy{Selector: &model.Selector{}},
+ GovernancePolicy: &model.GovernancePolicy{Selector: model.Selector{}},
}
err = json.Unmarshal(body, p)
if err != nil {
diff --git a/server/service/gov/config_distributor_test.go b/server/service/gov/config_distributor_test.go
index e8d5f300..9ed9b643 100644
--- a/server/service/gov/config_distributor_test.go
+++ b/server/service/gov/config_distributor_test.go
@@ -57,9 +57,9 @@ func TestCreate(t *testing.T) {
res, err := svc.Create(context.TODO(), MockKind, Project, &gov.Policy{
GovernancePolicy: &gov.GovernancePolicy{
Name: "Traffic2adminAPI",
- Selector: &gov.Selector{
- App: MockApp,
- Environment: MockEnv,
+ Selector: gov.Selector{
+ "app": MockApp,
+ "environment": MockEnv,
},
},
Spec: map[string]interface{}{"retryNext": 3, "match": "traffic2adminAPI"},
@@ -73,9 +73,9 @@ func TestUpdate(t *testing.T) {
err := svc.Update(context.TODO(), MockKind, id, Project, &gov.Policy{
GovernancePolicy: &gov.GovernancePolicy{
Name: "Traffic2adminAPI",
- Selector: &gov.Selector{
- App: MockApp,
- Environment: MockEnv,
+ Selector: gov.Selector{
+ "app": MockApp,
+ "environment": MockEnv,
},
},
Spec: map[string]interface{}{"retryNext": 3, "match": "traffic2adminAPI"},
@@ -87,9 +87,9 @@ func TestDisplay(t *testing.T) {
res, err := svc.Create(context.TODO(), MatchGroup, Project, &gov.Policy{
GovernancePolicy: &gov.GovernancePolicy{
Name: "Traffic2adminAPI",
- Selector: &gov.Selector{
- App: MockApp,
- Environment: MockEnv,
+ Selector: gov.Selector{
+ "app": MockApp,
+ "environment": MockEnv,
},
},
})
diff --git a/server/service/gov/kie/kie_distributor.go b/server/service/gov/kie/kie_distributor.go
index 25f51ed2..26cc9e42 100644
--- a/server/service/gov/kie/kie_distributor.go
+++ b/server/service/gov/kie/kie_distributor.go
@@ -56,7 +56,7 @@ const (
Rules = "rules"
)
-var PolicyNames = []string{"retry", "rateLimiting", "circuitBreaker", "bulkhead"}
+var PolicyNames = []string{"retry", "rateLimiting", "circuitBreaker", "bulkhead", "instanceIsolation"}
var rule = Validator{}
@@ -84,7 +84,7 @@ func (d *Distributor) Create(ctx context.Context, kind, project string, p *gov.P
Value: string(yamlByte),
Status: StatusEnabled,
ValueType: TypeText,
- Labels: map[string]string{KeyApp: p.Selector.App, KeyEnvironment: p.Selector.Environment},
+ Labels: p.Selector,
}
res, err := d.client.Create(ctx, kv, kie.WithProject(project))
if err != nil {
@@ -140,12 +140,9 @@ func (d *Distributor) DeleteMatchGroup(ctx context.Context, id string, project s
return err
}
- labels := make(map[string]string)
- labels[KeyApp] = policy.Selector.App
- labels[KeyEnvironment] = policy.Selector.Environment
ops := []kie.GetOption{
kie.WithKey("wildcard(" + KeyPrefix + "*." + policy.Name + ")"),
- kie.WithLabels(labels),
+ kie.WithLabels(policy.Selector),
kie.WithRevision(0),
kie.WithGetProject(project),
}
@@ -340,7 +337,7 @@ func (d *Distributor) generateID(ctx context.Context, project string, p *gov.Pol
return nil
}
kind := KindMatchGroup
- list, _, err := d.listDataByKind(ctx, kind, project, p.Selector.App, p.Selector.Environment)
+ list, _, err := d.listDataByKind(ctx, kind, project, p.Selector[KeyApp], p.Selector[KeyEnvironment])
if err != nil {
return err
}
@@ -377,7 +374,7 @@ func getID() string {
func (d *Distributor) transform(kv *kie.KVDoc, kind string) (*gov.Policy, error) {
goc := &gov.Policy{
GovernancePolicy: &gov.GovernancePolicy{
- Selector: &gov.Selector{},
+ Selector: gov.Selector{},
},
}
spec := make(map[string]interface{})
@@ -392,8 +389,7 @@ func (d *Distributor) transform(kv *kie.KVDoc, kind string) (*gov.Policy, error)
goc.Status = kv.Status
goc.Name = kv.Key[strings.LastIndex(kv.Key, ".")+1 : len(kv.Key)]
goc.Spec = spec
- goc.Selector.App = kv.Labels[KeyApp]
- goc.Selector.Environment = kv.Labels[KeyEnvironment]
+ goc.Selector = kv.Labels
goc.CreatTime = kv.CreatTime
goc.UpdateTime = kv.UpdateTime
return goc, nil
diff --git a/server/service/gov/kie/validate.go b/server/service/gov/kie/validate.go
index 3d25e4ec..7a23da72 100644
--- a/server/service/gov/kie/validate.go
+++ b/server/service/gov/kie/validate.go
@@ -46,6 +46,7 @@ func (d *Validator) Validate(kind string, spec interface{}) error {
case "rate-limiting":
return rateLimitingValidate(spec)
case "circuit-breaker":
+ case "instance-isolation":
case "bulkhead":
case "loadbalancer":
return nil
diff --git a/server/service/gov/mock/mock.go b/server/service/gov/mock/mock.go
index 990ffcb0..97c541c0 100644
--- a/server/service/gov/mock/mock.go
+++ b/server/service/gov/mock/mock.go
@@ -105,7 +105,7 @@ func (d *Distributor) List(ctx context.Context, kind, project, app, env string)
}
func checkPolicy(g *gov.Policy, kind, app, env string) bool {
- return g.Kind == kind && g.Selector != nil && g.Selector.App == app && g.Selector.Environment == env
+ return g.Kind == kind && g.Selector != nil && g.Selector["app"] == app && g.Selector["environment"] == env
}
func (d *Distributor) Get(ctx context.Context, kind, id, project string) ([]byte, error) {