[
https://issues.apache.org/jira/browse/SCB-977?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16662076#comment-16662076
]
ASF GitHub Bot commented on SCB-977:
------------------------------------
asifdxtreme closed pull request #462: SCB-977 Dependencies will not be updated
in 5min when re-create provider service
URL: https://github.com/apache/incubator-servicecomb-service-center/pull/462
This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:
As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):
diff --git a/server/core/key_convertor.go b/server/core/key_convertor.go
index fbb59fb8..296b727f 100644
--- a/server/core/key_convertor.go
+++ b/server/core/key_convertor.go
@@ -140,21 +140,21 @@ func GetInfoFromDependencyQueueKV(key []byte)
(consumerId, domainProject, uuid s
return
}
-func GetInfoFromDependencyRuleKV(key []byte) *pb.MicroServiceKey {
+func GetInfoFromDependencyRuleKV(key []byte) (t string, _ *pb.MicroServiceKey)
{
keys := KvToResponse(key)
l := len(keys)
if l < 5 {
- return nil
+ return "", nil
}
if keys[l-1] == "*" {
- return &pb.MicroServiceKey{
+ return keys[l-3], &pb.MicroServiceKey{
Tenant: fmt.Sprintf("%s/%s", keys[l-5], keys[l-4]),
Environment: keys[l-2],
ServiceName: keys[l-1],
}
}
- return &pb.MicroServiceKey{
+ return keys[l-5], &pb.MicroServiceKey{
Tenant: fmt.Sprintf("%s/%s", keys[l-7], keys[l-6]),
Environment: keys[l-4],
AppId: keys[l-3],
diff --git a/server/core/key_convertor_test.go
b/server/core/key_convertor_test.go
index 21dd2bfb..422d8d48 100644
--- a/server/core/key_convertor_test.go
+++ b/server/core/key_convertor_test.go
@@ -129,27 +129,27 @@ func TestGetInfoFromKV(t *testing.T) {
t.Fatalf("TestGetInfoFromKV failed")
}
- k :=
GetInfoFromDependencyRuleKV([]byte(GenerateProviderDependencyRuleKey("a/b",
&proto.MicroServiceKey{
+ dt, k :=
GetInfoFromDependencyRuleKV([]byte(GenerateProviderDependencyRuleKey("a/b",
&proto.MicroServiceKey{
Tenant: "a/b",
AppId: "c",
ServiceName: "*",
})))
- if k == nil || k.AppId != "" || k.ServiceName != "*" {
+ if dt != DEPS_PROVIDER || k == nil || k.AppId != "" || k.ServiceName !=
"*" {
t.Fatalf("TestGetInfoFromKV failed")
}
- k =
GetInfoFromDependencyRuleKV([]byte(GenerateProviderDependencyRuleKey("a/b",
&proto.MicroServiceKey{
+ dt, k =
GetInfoFromDependencyRuleKV([]byte(GenerateProviderDependencyRuleKey("a/b",
&proto.MicroServiceKey{
Tenant: "a/b",
AppId: "c",
ServiceName: "d",
Version: "e",
})))
- if k == nil || k.AppId != "c" || k.ServiceName != "d" {
+ if dt != DEPS_PROVIDER || k == nil || k.AppId != "c" || k.ServiceName
!= "d" {
t.Fatalf("TestGetInfoFromKV failed")
}
- k = GetInfoFromDependencyRuleKV([]byte("abc"))
- if k != nil {
+ dt, k = GetInfoFromDependencyRuleKV([]byte("abc"))
+ if dt != "" || k != nil {
t.Fatalf("TestGetInfoFromKV failed")
}
}
diff --git a/server/service/dependency_test.go
b/server/service/dependency_test.go
index 497b86c6..29500244 100644
--- a/server/service/dependency_test.go
+++ b/server/service/dependency_test.go
@@ -774,6 +774,8 @@ var _ = Describe("'Dependency' service", func() {
Expect(err).To(BeNil())
Expect(resp.Response.Code).To(Equal(pb.Response_SUCCESS))
+ Expect(deh.Handle()).To(BeNil())
+
respGetC, err =
serviceResource.GetConsumerDependencies(getContext(),
&pb.GetDependenciesRequest{
ServiceId: consumerId1,
NoSelf: true,
@@ -781,6 +783,96 @@ var _ = Describe("'Dependency' service", func() {
Expect(err).To(BeNil())
Expect(respGetC.Response.Code).To(Equal(pb.Response_SUCCESS))
Expect(len(respGetC.Providers)).To(Equal(1))
+
+ By("find before provider register")
+ resp, err = instanceResource.Find(getContext(),
&pb.FindInstancesRequest{
+ ConsumerServiceId: providerId2,
+ AppId: "get_dep_group",
+ ServiceName: "get_dep_finder",
+ VersionRule: "1.0.0+",
+ })
+ Expect(err).To(BeNil())
+
Expect(resp.Response.Code).To(Equal(scerr.ErrServiceNotExists))
+
+ respCreateF, err :=
serviceResource.Create(getContext(), &pb.CreateServiceRequest{
+ Service: &pb.MicroService{
+ AppId: "get_dep_group",
+ ServiceName: "get_dep_finder",
+ Version: "1.0.0",
+ Level: "FRONT",
+ Status: pb.MS_UP,
+ },
+ })
+ Expect(err).To(BeNil())
+
Expect(respCreateF.Response.Code).To(Equal(pb.Response_SUCCESS))
+ finder1 := respCreateF.ServiceId
+
+ resp, err = instanceResource.Find(getContext(),
&pb.FindInstancesRequest{
+ ConsumerServiceId: providerId2,
+ AppId: "get_dep_group",
+ ServiceName: "get_dep_finder",
+ VersionRule: "1.0.0+",
+ })
+ Expect(err).To(BeNil())
+
Expect(resp.Response.Code).To(Equal(pb.Response_SUCCESS))
+
+ Expect(deh.Handle()).To(BeNil())
+
+ respGetC, err =
serviceResource.GetConsumerDependencies(getContext(),
&pb.GetDependenciesRequest{
+ ServiceId: providerId2,
+ })
+ Expect(err).To(BeNil())
+
Expect(respGetC.Response.Code).To(Equal(pb.Response_SUCCESS))
+ Expect(len(respGetC.Providers)).To(Equal(1))
+
Expect(respGetC.Providers[0].ServiceId).To(Equal(finder1))
+
+ By("find after delete micro service")
+ respDelP, err :=
serviceResource.Delete(getContext(), &pb.DeleteServiceRequest{
+ ServiceId: finder1, Force: true,
+ })
+ Expect(err).To(BeNil())
+
Expect(respDelP.Response.Code).To(Equal(pb.Response_SUCCESS))
+
+ Expect(deh.Handle()).To(BeNil())
+
+ respGetC, err =
serviceResource.GetConsumerDependencies(getContext(),
&pb.GetDependenciesRequest{
+ ServiceId: providerId2,
+ })
+ Expect(err).To(BeNil())
+
Expect(respGetC.Response.Code).To(Equal(pb.Response_SUCCESS))
+ Expect(len(respGetC.Providers)).To(Equal(0))
+
+ respCreateF, err =
serviceResource.Create(getContext(), &pb.CreateServiceRequest{
+ Service: &pb.MicroService{
+ ServiceId: finder1,
+ AppId: "get_dep_group",
+ ServiceName: "get_dep_finder",
+ Version: "1.0.0",
+ Level: "FRONT",
+ Status: pb.MS_UP,
+ },
+ })
+ Expect(err).To(BeNil())
+
Expect(respCreateF.Response.Code).To(Equal(pb.Response_SUCCESS))
+
+ resp, err = instanceResource.Find(getContext(),
&pb.FindInstancesRequest{
+ ConsumerServiceId: providerId2,
+ AppId: "get_dep_group",
+ ServiceName: "get_dep_finder",
+ VersionRule: "1.0.0+",
+ })
+ Expect(err).To(BeNil())
+
Expect(resp.Response.Code).To(Equal(pb.Response_SUCCESS))
+
+ Expect(deh.Handle()).To(BeNil())
+
+ respGetC, err =
serviceResource.GetConsumerDependencies(getContext(),
&pb.GetDependenciesRequest{
+ ServiceId: providerId2,
+ })
+ Expect(err).To(BeNil())
+
Expect(respGetC.Response.Code).To(Equal(pb.Response_SUCCESS))
+ Expect(len(respGetC.Providers)).To(Equal(1))
+
Expect(respGetC.Providers[0].ServiceId).To(Equal(finder1))
})
})
})
diff --git a/server/service/event/service_event_handler.go
b/server/service/event/service_event_handler.go
index 5b3ada8a..542b2498 100644
--- a/server/service/event/service_event_handler.go
+++ b/server/service/event/service_event_handler.go
@@ -66,6 +66,7 @@ func (h *ServiceEventHandler) OnEvent(evt discovery.KvEvent) {
// cache
providerKey := pb.MicroServiceToKey(domainProject, ms)
cache.FindInstances.Remove(providerKey)
+ cache.DependencyRule.Remove(providerKey)
}
func getFramework(ms *pb.MicroService) (string, string) {
diff --git a/server/service/event/tag_event_handler.go
b/server/service/event/tag_event_handler.go
index 0c83661e..2f9706a9 100644
--- a/server/service/event/tag_event_handler.go
+++ b/server/service/event/tag_event_handler.go
@@ -81,8 +81,8 @@ func (apt *TagsChangedTask) publish(ctx context.Context,
domainProject, consumer
log.Errorf(err, "get service %s file failed",
providerId)
continue
}
- providerKey := pb.MicroServiceToKey(domainProject, provider)
+ providerKey := pb.MicroServiceToKey(domainProject, provider)
PublishInstanceEvent(domainProject, pb.EVT_EXPIRE, providerKey,
nil, rev, []string{consumerId})
}
return nil
diff --git a/server/service/instance.go b/server/service/instance.go
index 54eef407..54f4ec6f 100644
--- a/server/service/instance.go
+++ b/server/service/instance.go
@@ -548,21 +548,14 @@ func (s *InstanceService) Find(ctx context.Context, in
*pb.FindInstancesRequest)
service.Environment, in.AppId, in.ServiceName,
in.VersionRule)
}
+ // cache
+ var item *cache.VersionRuleCacheItem
noCache, cacheOnly := ctx.Value(serviceUtil.CTX_NOCACHE) == "1",
ctx.Value(serviceUtil.CTX_CACHEONLY) == "1"
rev, _ := ctx.Value(serviceUtil.CTX_REQUEST_REVISION).(string)
reqRev, _ := serviceUtil.ParseRevision(rev)
cloneCtx := util.CloneContext(ctx)
- // cache
- var (
- item *cache.VersionRuleCacheItem
- i = 0
- newVersionRule =
!cache.DependencyRule.ExistVersionRule(cloneCtx, in.ConsumerServiceId, provider)
- )
- if noCache {
- i = 1
- }
- for ; i < 2; i++ {
+ for i := 0; i < 2; i++ {
item, err = cache.FindInstances.Get(cloneCtx, service,
provider, in.Tags)
if err != nil {
log.Errorf(err, "FindInstancesCache.Get failed, %s",
findFlag)
@@ -586,7 +579,9 @@ func (s *InstanceService) Find(ctx context.Context, in
*pb.FindInstancesRequest)
}
// add dependency queue
- if len(in.ConsumerServiceId) > 0 && newVersionRule &&
len(item.ServiceIds) > 0 {
+ if len(in.ConsumerServiceId) > 0 &&
+ len(item.ServiceIds) > 0 &&
+ !cache.DependencyRule.ExistVersionRule(ctx,
in.ConsumerServiceId, provider) {
provider, err = s.reshapeProviderKey(ctx, provider,
item.ServiceIds[0])
if provider != nil {
err = serviceUtil.AddServiceVersionRule(ctx,
domainProject, service, provider)
diff --git a/server/service/util/dependency_util.go
b/server/service/util/dependency_util.go
index 90979d46..2c0c3b49 100644
--- a/server/service/util/dependency_util.go
+++ b/server/service/util/dependency_util.go
@@ -491,7 +491,7 @@ func removeProviderRuleKeys(ctx context.Context,
domainProject string, cache map
id := util.BytesToStringWithNoCopy(kv.Key)
exist, ok := cache[id]
if !ok {
- key := apt.GetInfoFromDependencyRuleKV(kv.Key)
+ _, key := apt.GetInfoFromDependencyRuleKV(kv.Key)
if key == nil || key.ServiceName == "*" {
continue
}
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> Dependencies will not be updated in 5min when micro service is changed
> ----------------------------------------------------------------------
>
> Key: SCB-977
> URL: https://issues.apache.org/jira/browse/SCB-977
> Project: Apache ServiceComb
> Issue Type: Bug
> Components: Service-Center
> Reporter: little-cui
> Assignee: little-cui
> Priority: Major
> Fix For: service-center-1.1.0
>
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)