Skip to content

Commit

Permalink
fix: 解决eureka更新接口鉴权失败问题 (#952)
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewshan authored Feb 27, 2023
1 parent 3130527 commit 5f9cf3e
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 6 deletions.
8 changes: 4 additions & 4 deletions apiserver/eurekaserver/write.go
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,8 @@ func (h *EurekaServer) updateStatus(
}
ctx = context.WithValue(
ctx, model.CtxEventKeyMetadata, map[string]string{MetadataReplicate: strconv.FormatBool(replicated)})
resp := h.namingServer.UpdateInstances(ctx,
[]*apiservice.Instance{{Id: &wrappers.StringValue{Value: instanceId}, Isolate: &wrappers.BoolValue{Value: isolated}}})
resp := h.namingServer.UpdateInstance(ctx, &apiservice.Instance{
Id: &wrappers.StringValue{Value: instanceId}, Isolate: &wrappers.BoolValue{Value: isolated}})
return resp.GetCode().GetValue()
}

Expand All @@ -237,7 +237,7 @@ func (h *EurekaServer) renew(ctx context.Context, appId string, instanceId strin
}

func (h *EurekaServer) updateMetadata(ctx context.Context, instanceId string, metadata map[string]string) uint32 {
resp := h.namingServer.UpdateInstances(ctx,
[]*apiservice.Instance{{Id: &wrappers.StringValue{Value: instanceId}, Metadata: metadata}})
resp := h.namingServer.UpdateInstance(ctx,
&apiservice.Instance{Id: &wrappers.StringValue{Value: instanceId}, Metadata: metadata})
return resp.GetCode().GetValue()
}
3 changes: 3 additions & 0 deletions service/api_v1.go
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,9 @@ type ClientServer interface {
GetRouterConfigWithCache(ctx context.Context, req *apiservice.Service) *apiservice.DiscoverResponse

GetFaultDetectWithCache(ctx context.Context, req *apiservice.Service) *apiservice.DiscoverResponse

// UpdateInstance update one instance by client
UpdateInstance(ctx context.Context, req *apiservice.Instance) *apiservice.Response
}

// L5OperateServer L5 related operations
Expand Down
17 changes: 17 additions & 0 deletions service/client_v1_authability.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,3 +108,20 @@ func (svr *serverAuthAbility) GetRouterConfigWithCache(
ctx context.Context, req *apiservice.Service) *apiservice.DiscoverResponse {
return svr.targetServer.GetRouterConfigWithCache(ctx, req)
}

// UpdateInstance update single instance
func (svr *serverAuthAbility) UpdateInstance(ctx context.Context, req *apiservice.Instance) *apiservice.Response {
authCtx := svr.collectClientInstanceAuthContext(
ctx, []*apiservice.Instance{req}, model.Modify, "UpdateInstance")

_, err := svr.authMgn.CheckClientPermission(authCtx)
if err != nil {
resp := api.NewResponseWithMsg(convertToErrCode(err), err.Error())
return resp
}

ctx = authCtx.GetRequestContext()
ctx = context.WithValue(ctx, utils.ContextAuthContextKey, authCtx)

return svr.targetServer.UpdateInstance(ctx, req)
}
53 changes: 51 additions & 2 deletions service/instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1641,13 +1641,62 @@ func TestInstanceNoNeedUpdate(t *testing.T) {
oldHealthCheck := instanceReq.GetHealthCheck()
instanceReq.HealthCheck = nil
defer func() { instanceReq.HealthCheck = oldHealthCheck }()
So(discoverSuit.server.UpdateInstances(discoverSuit.defaultCtx, []*apiservice.Instance{instanceReq}).GetCode().GetValue(), ShouldEqual, api.NoNeedUpdate)
So(discoverSuit.server.UpdateInstances(discoverSuit.defaultCtx,
[]*apiservice.Instance{instanceReq}).GetCode().GetValue(), ShouldEqual, api.NoNeedUpdate)
})
}

func TestUpdateInstanceField(t *testing.T) {
discoverSuit := &DiscoverTestSuit{}
if err := discoverSuit.initialize(); err != nil {
t.Fatal(err)
}
defer discoverSuit.Destroy()

_, serviceResp := discoverSuit.createCommonService(t, 181)
defer discoverSuit.cleanServiceName(serviceResp.GetName().GetValue(), serviceResp.GetNamespace().GetValue())

_, instanceResp := discoverSuit.createCommonInstance(t, serviceResp, 181)
defer discoverSuit.cleanInstance(instanceResp.GetId().GetValue())
instId := instanceResp.GetId().GetValue()
Convey("metadata变更", t, func() {
request := &apiservice.Instance{Id: wrapperspb.String(instId)}
request.Metadata = map[string]string{}
So(discoverSuit.server.UpdateInstance(
discoverSuit.defaultCtx, request).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess)

request.Metadata = map[string]string{"123": "456", "789": "abc", "135": "246"}
So(discoverSuit.server.UpdateInstance(
discoverSuit.defaultCtx, request).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess)

instance, err := discoverSuit.storage.GetInstance(instId)
So(err, ShouldBeNil)
So(instance.Proto.Host.GetValue(), ShouldEqual, instanceResp.Host.GetValue())
})

Convey("isolate变更", t, func() {
request := &apiservice.Instance{Id: wrapperspb.String(instId)}
request.Isolate = wrapperspb.Bool(true)
So(discoverSuit.server.UpdateInstance(
discoverSuit.defaultCtx, request).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess)
instance, err := discoverSuit.storage.GetInstance(instId)
So(err, ShouldBeNil)
So(instance.Proto.Isolate.GetValue(), ShouldEqual, true)

request.Isolate = wrapperspb.Bool(false)
So(discoverSuit.server.UpdateInstance(
discoverSuit.defaultCtx, request).GetCode().GetValue(), ShouldEqual, api.ExecuteSuccess)

instance, err = discoverSuit.storage.GetInstance(instId)
So(err, ShouldBeNil)
So(instance.Proto.Isolate.GetValue(), ShouldEqual, false)
})

}

// 实例数据更新测试
// 部分数据变更,触发更新
func TestUpdateInstanceFiled(t *testing.T) {
func TestUpdateInstancesFiled(t *testing.T) {

discoverSuit := &DiscoverTestSuit{}
if err := discoverSuit.initialize(); err != nil {
Expand Down

0 comments on commit 5f9cf3e

Please sign in to comment.