Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] HTTP Subscriber: Updating subscription information is not taking effect #768

Closed
2 tasks done
jinrongluo opened this issue Feb 14, 2022 · 2 comments
Closed
2 tasks done
Labels
bug Something isn't working
Milestone

Comments

@jinrongluo
Copy link
Contributor

jinrongluo commented Feb 14, 2022

Search before asking

  • I had searched in the issues and found no similar issues.

Environment

Window

EventMesh version

master

What happened

In HTTP subscription, the changes in subscription will not trigger the ConsumerGroupManager to refresh. So the updates of the subscription is not taking effect.

The ConsumerGroupManager still using the old subscription even it is already updated.

How to reproduce

Run test using the http subscriber sample in eventmesh-examples -> Http.deom.sub package, with the following changes:

public void afterPropertiesSet() throws Exception {

  ....

 eventMeshHttpConsumer.subscribe(topicList, url);

 // after 10s, update the subscription with new topic
  Thread.sleep(10000);

  List<SubscriptionItem> topicList = Lists.newArrayList(
            new SubscriptionItem("TEST2-TOPIC-HTTP-ASYNC", SubscriptionMode.CLUSTERING, SubscriptionType.SYNC));
   eventMeshHttpConsumer.subscribe(topicList, url);

   ....
}

After running this test, the logs shows no consumer is started for topic TEST2-TOPIC-HTTP-ASYNC

Eventmesh Runtime Log


2022-02-14 15:00:19,434 DEBUG [eventMesh-http-worker-1] http(AbstractHTTPServer.java:381) - httpCommand={REQ,POST/HTTP,requestCode=206,opaque=1,header=subscribeRequestHeader={code=206,language=JAVA,version=V1,env=P,idc=FT,sys=1234,pid=18328,ip=127.0.0.1:51386,username=,passwd=},body=subscribeBody{consumerGroup='EventMeshTest-consumerGroup', url='http://192.168.2.31:8088/sub/test', topics=[SubscriptionItem{topic=TEST-TOPIC-HTTP-ASYNC, mode=CLUSTERING, type=ASYNC}]}}
2022-02-14 15:00:19,589 INFO  [pool-11-thread-1] ConsumerManager(ConsumerManager.java:78) - clientInfo check start.....
2022-02-14 15:00:19,608 INFO  [eventMesh-clientManage-] http(SubscribeProcessor.java:78) - cmd=SUBSCRIBE|http|client2eventMesh|from=127.0.0.1:51386|to=192.168.2.31
2022-02-14 15:00:19,767 INFO  [eventMesh-clientManage-] ConsumerManager(ConsumerManager.java:322) - onChange event:consumerGroupStateEvent={consumerGroup=EventMeshTest-consumerGroup,action=NEW}
2022-02-14 15:00:19,771 INFO  [eventMesh-clientManage-] MetaInfExtensionClassLoader(MetaInfExtensionClassLoader.java:79) - load extension class success, extensionType: interface org.apache.eventmesh.api.consumer.Consumer, extensionClass: class org.apache.eventmesh.connector.standalone.consumer.StandaloneConsumerAdaptor
2022-02-14 15:00:19,771 INFO  [eventMesh-clientManage-] EventMeshExtensionFactory(EventMeshExtensionFactory.java:101) - initialize extension instance success, extensionType: interface org.apache.eventmesh.api.consumer.Consumer, extensionName: standalone
2022-02-14 15:00:19,771 INFO  [eventMesh-clientManage-] EventMeshExtensionFactory(EventMeshExtensionFactory.java:101) - initialize extension instance success, extensionType: interface org.apache.eventmesh.api.consumer.Consumer, extensionName: standalone
2022-02-14 15:00:19,778 INFO  [eventMesh-clientManage-] EventMeshConsumer(EventMeshConsumer.java:105) - EventMeshConsumer [EventMeshTest-consumerGroup] inited.............
2022-02-14 15:00:19,783 DEBUG [StandaloneConsumerThread] SubScribeTask(SubScribeTask.java:56) - execute subscribe task, topic: TEST-TOPIC-HTTP-ASYNC, offset: null
2022-02-14 15:00:19,786 DEBUG [eventMesh-clientManage-] http(AbstractHTTPServer.java:429) - httpCommand={RES,POST/HTTP,requestCode=206,opaque=1,cost=534,header=org.apache.eventmesh.common.protocol.http.header.BaseResponseHeader@1679171f,body=org.apache.eventmesh.common.protocol.http.body.BaseResponseBody@47909e95}
2022-02-14 15:00:19,786 DEBUG [EventMesh-http-asyncContext-] http(SubscribeProcessor.java:257) - httpCommand={RES,POST/HTTP,requestCode=206,opaque=1,cost=534,header=org.apache.eventmesh.common.protocol.http.header.BaseResponseHeader@1679171f,body=org.apache.eventmesh.common.protocol.http.body.BaseResponseBody@47909e95}
2022-02-14 15:00:20,585 INFO  [eventMesh-metrics-2] httpMonitor(HTTPMetricsServer.java:108) - ===========================================SERVER METRICS==================================================
2022-02-14 15:00:20,585 INFO  [eventMesh-metrics-2] httpMonitor(HTTPMetricsServer.java:110) - {"maxHTTPTPS":"1.0","avgHTTPTPS":"0.0","maxHTTPCOST":"562","avgHTTPCOST":"549.5","avgHTTPBodyDecodeCost":"6.0", "httpDiscard":"0"}
2022-02-14 15:00:20,585 INFO  [eventMesh-metrics-2] httpMonitor(HTTPMetricsServer.java:119) - {"maxBatchSendMsgTPS":"0.0","avgBatchSendMsgTPS":"0.0", "sum":"0", "sumFail":"0", "sumFailRate":"0.00", "discard":"0"}
2022-02-14 15:00:20,586 INFO  [eventMesh-metrics-2] httpMonitor(HTTPMetricsServer.java:129) - {"maxSendMsgTPS":"0.0","avgSendMsgTPS":"0.0", "sum":"0", "sumFail":"0", "sumFailRate":"0.00", "replyMsg":"0", "replyFail":"0"}
2022-02-14 15:00:20,586 INFO  [eventMesh-metrics-2] httpMonitor(HTTPMetricsServer.java:140) - {"maxPushMsgTPS":"0.0","avgPushMsgTPS":"0.0", "sum":"0", "sumFail":"0", "sumFailRate":"0.0", "maxClientLatency":"0.0", "avgClientLatency":"0.0"}
2022-02-14 15:00:20,586 INFO  [eventMesh-metrics-2] httpMonitor(HTTPMetricsServer.java:151) - {"batchMsgQ":"0","sendMsgQ":"0","pushMsgQ":"0","httpRetryQ":"0"}
2022-02-14 15:00:20,586 INFO  [eventMesh-metrics-2] httpMonitor(HTTPMetricsServer.java:157) - {"batchAvgSend2MQCost":"0.0", "avgSend2MQCost":"0.0", "avgReply2MQCost":"0.0"}
2022-02-14 15:00:20,789 DEBUG [StandaloneConsumerThread] SubScribeTask(SubScribeTask.java:56) - execute subscribe task, topic: TEST-TOPIC-HTTP-ASYNC, offset: null
2022-02-14 15:00:21,791 DEBUG [StandaloneConsumerThread] SubScribeTask(SubScribeTask.java:56) - execute subscribe task, topic: TEST-TOPIC-HTTP-ASYNC, offset: null
2022-02-14 15:00:22,792 DEBUG [StandaloneConsumerThread] SubScribeTask(SubScribeTask.java:56) - execute subscribe task, topic: TEST-TOPIC-HTTP-ASYNC, offset: null
2022-02-14 15:00:23,804 DEBUG [StandaloneConsumerThread] SubScribeTask(SubScribeTask.java:56) - execute subscribe task, topic: TEST-TOPIC-HTTP-ASYNC, offset: null
2022-02-14 15:00:24,590 INFO  [BatchSpanProcessor_WorkerThread-1] LogExporter(LogExporter.java:61) - 'HTTP POST' : 13edb08ae53aa8fd95ca799e9c93e690 63b98f38a3ad1255 SERVER [tracer: class org.apache.eventmesh.runtime.boot.EventMeshHTTPServer:] AttributesMap{data={http.status_code=206, http.flavor=HTTP, http.method=POST}, capacity=128, totalAddedValues=3}


2022-02-14 15:00:29,589 INFO  [pool-11-thread-1] ConsumerManager(ConsumerManager.java:78) - clientInfo check start.....
2022-02-14 15:00:29,883 DEBUG [eventMesh-http-worker-1] http(AbstractHTTPServer.java:381) - httpCommand={REQ,POST/HTTP,requestCode=206,opaque=3,header=subscribeRequestHeader={code=206,language=JAVA,version=V1,env=P,idc=FT,sys=1234,pid=18328,ip=127.0.0.1:51386,username=,passwd=},body=subscribeBody{consumerGroup='EventMeshTest-consumerGroup', url='http://192.168.2.31:8088/sub/test', topics=[SubscriptionItem{topic=TEST2-TOPIC-HTTP-ASYNC, mode=CLUSTERING, type=SYNC}]}}
2022-02-14 15:00:29,884 DEBUG [StandaloneConsumerThread] SubScribeTask(SubScribeTask.java:56) - execute subscribe task, topic: TEST-TOPIC-HTTP-ASYNC, offset: null
2022-02-14 15:00:30,094 INFO  [eventMesh-clientManage-] http(SubscribeProcessor.java:78) - cmd=SUBSCRIBE|http|client2eventMesh|from=127.0.0.1:51386|to=192.168.2.31
2022-02-14 15:00:30,302 DEBUG [eventMesh-clientManage-] http(AbstractHTTPServer.java:429) - httpCommand={RES,POST/HTTP,requestCode=206,opaque=3,cost=420,header=org.apache.eventmesh.common.protocol.http.header.BaseResponseHeader@4206e247,body=org.apache.eventmesh.common.protocol.http.body.BaseResponseBody@46396edf}
2022-02-14 15:00:30,302 DEBUG [EventMesh-http-asyncContext-] http(SubscribeProcessor.java:257) - httpCommand={RES,POST/HTTP,requestCode=206,opaque=3,cost=420,header=org.apache.eventmesh.common.protocol.http.header.BaseResponseHeader@4206e247,body=org.apache.eventmesh.common.protocol.http.body.BaseResponseBody@46396edf}
2022-02-14 15:00:30,900 DEBUG [StandaloneConsumerThread] SubScribeTask(SubScribeTask.java:56) - execute subscribe task, topic: TEST-TOPIC-HTTP-ASYNC, offset: null
2022-02-14 15:00:31,912 DEBUG [StandaloneConsumerThread] SubScribeTask(SubScribeTask.java:56) - execute subscribe task, topic: TEST-TOPIC-HTTP-ASYNC, offset: null
2022-02-14 15:00:32,925 DEBUG [StandaloneConsumerThread] SubScribeTask(SubScribeTask.java:56) - execute subscribe task, topic: TEST-TOPIC-HTTP-ASYNC, offset: null
2022-02-14 15:00:33,937 DEBUG [StandaloneConsumerThread] SubScribeTask(SubScribeTask.java:56) - execute subscribe task, topic: TEST-TOPIC-HTTP-ASYNC, offset: null

Root Cause Analysis

The Root cause of the issue is the org.apache.eventmesh.runtime.core.protocol.http.consumer package, ConsumerManager.notifyConsumerManager() method

  1. when adding a new latestConsumerGroupConfig object to ConsumerManager.consumerTable, the object reference is used. So the latestConsumerGroupConfig has the same reference as the one inside ConsumerManager.consumerTable
 if (cgm == null) {
            ConsumerGroupStateEvent notification = new ConsumerGroupStateEvent();
            notification.action = ConsumerGroupStateEvent.ConsumerGroupStateAction.NEW;
            notification.consumerGroup = consumerGroup;
            notification.consumerGroupConfig = latestConsumerGroupConfig;
            eventMeshHTTPServer.getEventBus().post(notification);
            return;
        }
  1. When we update the subscription, latestConsumerGroupConfig is updated, as the same object inside ConsumerManager.consumerTable is also updated (same object reference)

So latestConsumerGroupConfig.equals(cgm.getConsumerGroupConfig() is always TRUE.

and the following code is never executed

 if (!latestConsumerGroupConfig.equals(cgm.getConsumerGroupConfig())) {
            ConsumerGroupStateEvent notification = new ConsumerGroupStateEvent();
            notification.action = ConsumerGroupStateEvent.ConsumerGroupStateAction.CHANGE;
            notification.consumerGroup = consumerGroup;
            notification.consumerGroupConfig = latestConsumerGroupConfig;
            eventMeshHTTPServer.getEventBus().post(notification);
            return;
     }

Solution

We need to pass a new cloned object in notifyConsumerManager(), So that the object comparison is taking effect.

Are you willing to submit PR?

  • Yes I am willing to submit a PR!
@jinrongluo jinrongluo added the bug Something isn't working label Feb 14, 2022
jinrongluo added a commit to jinrongluo/incubator-eventmesh that referenced this issue Feb 14, 2022
@xwm1992
Copy link
Contributor

xwm1992 commented Feb 15, 2022

Hi @jinrongluo,I think this is not a normal operating scenario, because the cgm objects are distinguished by group and client IP, in your test your client doesn't change and only change the subscription is not correct, may be you should first unsubscribe the old topics, then restart the client and subscribe the newest topics, or you may want to modify the subscription information at run time, but this hasn't been supported yet.

jinrongluo added a commit to jinrongluo/incubator-eventmesh that referenced this issue Feb 15, 2022
@jinrongluo
Copy link
Contributor Author

Hi @jinrongluo,I think this is not a normal operating scenario, because the cgm objects are distinguished by group and client IP, in your test your client doesn't change and only change the subscription is not correct, may be you should first unsubscribe the old topics, then restart the client and subscribe the newest topics, or you may want to modify the subscription information at run time, but this hasn't been supported yet.

Thanks, unsubscribe -> subscribe will work, but it has performance impact in our Production use case.

@xwm1992 xwm1992 added this to the 1.4.0 milestone Feb 16, 2022
xwm1992 added a commit that referenced this issue Apr 7, 2022
* update project version to 1.3.0-RELEASE

* Delete gradle/wrapper directory

* update docs

* update Dockerfile and build.gradle

* update build.gradle

* update Dockerfile path

* Update .asf.yaml

disabled protected branch

(cherry picked from commit 4b60e37)

* Update .asf.yaml

(cherry picked from commit a051d06)

* [Infra] trigger branch protection change

(cherry picked from commit d9a9a5b)

* [Infra] retrigger .asf.yaml protections

(cherry picked from commit 8e5a196)

* update some docs

Signed-off-by: qqeasonchen <qqeasonchen@gmail.com>
(cherry picked from commit faf1fc1)

* update Dockerfile path

(cherry picked from commit 2790b78)

* Update java sdk docs (#663)


(cherry picked from commit 56b665b)

* Add files via upload

add pluggable-protocols.png

(cherry picked from commit ce62aa0)

* [Infra] retrigger .asf.yaml protections

(cherry picked from commit 8e5a196)

* Update .asf.yaml

make the master branch under the protected

* [ISSUE #670] fix checkstyle check fail (#680)

fix checkstyle check fail

* [MINOR] Fixed redundant boxing operations (#684)

* [MINOR] new Runnable() can be replaced with lambda (#685)

* gradle

* Anonymous new Runnable() can be replaced with lambda

* Anonymous new Runnable() can be replaced with lambda

* add logger print exception

* [MINOR] ConfigurationWrapper class adds thread pool shutdown (#683)

* gradle

* ConfigurationWrapper class adds thread pool shutdown

* [ISSUE #677] Translate readme files from English to Chinese (#678)

* translate English to Chinese
close #677

* [ISSUE #405]update cloudevents examples (#688)

[Minor #405] update cloudevents examples

* Bump gradle version to 7.3.3 Support Java17 build

* [ISSUE #690]Remove extra code style check job in CI (#691)

Close ISSUE #690.

* Update intro.md (#693)

* Add files via upload (#694)

* [ISSUE #692]Change the default merge strategy to squash (#695)

* Change the default merge strategy to squash
close #692

* [ISSUE #673] update eventmesh-runtime-quickstart-with-docker.md en & cn (#698)

* update eventmesh-runtime-quickstart-with-docker.md en & cn
close #673

* [MINOR] Change Tar and Zip name (#699)

* [Issue #702] Fix Slack Join link (#705)

close #702

* Updated Notice file to 2022 (#704)

* add instruction docs of trace and metrics in eventmesh (#706)

* [ISSUE #405]Fix args typo in examples (#707)

fixed #405

* [ISSUE #696] Add metrics plugin (#709)

1. Add Metrics plugin module
2. Implement opentelemetry metrics module
related issue #696

* [ISSUE #713] Fix trace bug (#712)

* add docs

* change default spanExporter to span

* [Issue #533] Adding design doc for EventMesh Workflow

* [Issue #553] Adding design doc for EventMesh Workflow (#714)

* [Issue #553] update the design doc.

* small updates to doc

Signed-off-by: Tihomir Surdilovic <tihomir@temporal.io>

* small update

Signed-off-by: Tihomir Surdilovic <tihomir@temporal.io>

* adding asyncapi type to event defs

Signed-off-by: Tihomir Surdilovic <tihomir@temporal.io>

* Remove unnecessary call toString (#719)

* [Issue #553] add workflow diagram to the design doc

* Update intro.md (#722)

* Update roadmap.md (#721)

* Missed exception cause (#724)

close #727

* [ISSUE #726] Remove the misleading annotation (#725)

close #726

* [ISSUE #729] Bump netty version (#730)

* Bump netty version
close #729

* [ISSUE #732] Binary package failed to execute (#733)

close #732

* [Issue #735] log4j 2.17.1 (#736)

* log4j 2.17.1

* Update known-dependencies.txt

* Update LICENSE

* fix item mislabeled as MIT when they are ASL

* fix log4j urls https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/license.html

* [MINOR] Remove the unnecessary boxing (#731)

* Use archiveBaseName and archiveVersion to optimize gradle zip task (#728)

* Add environment and version selector in bug_report.yml (#734)

* Fix bug report template (#741)

* add eventmesh-admin-rocketmq into rootProject

* [ISSUE #737] Add Netty license (#738)

close #737

* [Issue #750] junit should only be used in tests (#751)

* junit should only be used in tests

add back assertj

revert assertj changes

build issues

centralise junit dependency

Update build.gradle

* junit 4.12 has a CVE

close #750

* [Issue #752] upgrade httpclient (#753)

* upgrade httpclient

* commons-codec transitive dependency upgrade

close #752

* [Issue-754] upgrade guava (#757)

* upgrade guava

* [Issue #758] validate subscriber Url (#759)

* [Issue #758] validate subscriber Url

* [Issue #758] fix build issue

* [Issue #758] fix checkstyle issue

* [Issue #758] fix license check issue
close #758

* [Issue #655] Adding send message constraints for message size and batch size (#760)

* [Issue #655] Adding send message constraints for message size and batch size

* [MINOR] Fix plugin cannot load properties from classpath (#763)

* [MINOR] Fix plugin cannot load properties from classpath

* Fix callback warning

* [MINOR] Remove unused field in example (#766)

* [MINOR] Allow run script in other directory (#765)

* [MINOR] Fix the hardcode ip address (#767)

* [Issue #768] fix issue in update HTTP subscriber (#769)

* [Issue #768] fix issue in update HTTP subscriber

* [Issue #769] use Serialization to deep clone object and adding equals method to SubscriptionItem

* [Issue #768] fix build checkstyle issue

close #768

* update checkstyle.xml (#773)

add suppresswarnings filter

* Rebase the grpc branch to master branch (#771)

* [Issue #417] Grpc Transport Protocol support (#710)

Grpc Transport Protocol support

* [Issue #417] Create getting started instructions for Grpc transport procotol

* [Issue #417] update Grpc Message Model name to SimpleMessage

* [Issue #417] more update Grpc Message Model name to SimpleMessage

* [Issue #718] Fix readme file and protobuf file based on review comments

* [Issue #745] fix the ack bugs and cloudevent message resolver

* [Issue #744] update SDK API message model

* [Issue #744] fix the gRPC Consumer SubscribeStream Message handler

* [Issue #744] Grpc Request-Reply API support

* [Issue #744] Bug fix for Grpc Request-Reply API support

* [Issue #744] minor fix for Grpc request-Reply API

* [Issue #744] fix infinte message loop in Grpc CloudEvent request-Reply API

* [Issue #744] Fix Grpc subscribe-unsubscribe bug

* [Issue #744] Fix Data models in Grpc Request-Reply API

* [Issue #744] Code optimization for Grpc Request-Reply API

* [Issue #417] support Grpc broadcast async publish

* [Issue #718] add synchronized calls for grpc streamObserver

* supply apache header

* add checkstyle ignore for grpc

* fix checkstyle error

* fix javax.annotation.generated compile error

* fix javax.annotation.generated compile error

* supply dependencies licenses

* update known-dependencies.txt

* update known-dependencies.txt

Co-authored-by: jinrongluo <kapoking@gmail.com>

* [Issue #774] Optimize the object property description of eventmesh client (#775)

* modify: add group field in UserAgent, delete ProducerGroup and ConsumerGroup field

* modify: fix checksyle error

* modify: fix checksyle error in ClientGroupWrapper.java

close #774

* Update roadmap.md (#779)

* [Issue #780] Modify the define level  of EventListener from Topic to Consumer (#781)

* modify: add group field in UserAgent, delete ProducerGroup and ConsumerGroup field

* modify: fix checksyle error

* modify: fix checksyle error in ClientGroupWrapper.java

* modify: move EventListner in the level of Consumer instead of binding with topic in EventMesh

* modify: fix the eventListener level problem in grpc protocal

* modify: fix the eventListener problem in test case

close #780

* [ISSUE #786] remove eventmesh-sdk-java model redundant code (#789)

Co-authored-by: lucky-lsr <hacker_lsr@126.com>
close #786

* Update roadmap.md (#791)

* [ISSUE #783] clean useless code in runtime module (#787)

* [ISSUE #783] clean useless code in runtime module

* format code

close #783

* [ISSUE #696] Add trace plugin (#749)

* add docs

* add trace plugin

* fix ConfigurationWrapperTest error

* fix checkstyle

* fix checkstyle

* [ISSUE #784] Fix words misspell, optimize admin http method code (#792)

close #784

* [Issue #658] Eventmesh Http Support CloudEvents Webhook spec (#772)

* [Issue #658] support CloudEvents Webhook spec

* [Issue #658] create auth-http-basic security module

* [Issue #658] create auth-http-basic security module

* [Issue #658] code refactor for CloudEvents Webhook

* [Issue #658] fix build checkstyles

* [Issue #658] fix javadoc build issue

* [Issue #658] fix javadoc build issue in eventmesh-security-auth-http-basic

* [Issue #658] adding more log to the WebhookUtil

* [Issue #658] address PR review comments.

* [Issue #658] fixed checkstyles issue

Co-authored-by: mike_xwm <mike_xwm@126.com>

* [ISSUE #782] delete invalid code in eventmesh-connector-plugin module (#793)

* [ISSUE #795] Fix doc eventmesh-runtime-quickstart-with-docker.md (#798)

close #795

* [Enhancement] Some suggestions for eventmesh-examples (#794)

* remove invalid code

* read config from file

* extract constants

* format code

close #794

* [Enhancement] compile project with junit error (#802)

Co-authored-by: ylong <ylong.b@gamil.com>
close #796

* [Enhancement] Run CI on all branch (#805)

* [MINOR] sort dependencise before check (#808)

* [ISSUE #806] code optimization and delete invalid code in eventmesh-e… (#807)

* [ISSUE #806] code optimization and delete invalid code in eventmesh-examples module

* use ExampleConstants to hold constants in examples
* delete invalid code

* [ISSUE #806] code optimization and delete invalid code in eventmesh-examples module

Motivation
Code style consistency in log msg

Co-authored-by: fengyongshe <fengyongshe@cmss.chinamobile.com>

close #806

Co-authored-by: xwm1992 <mike_xwm@126.com>
Co-authored-by: Daniel Gruno <humbedooh@apache.org>
Co-authored-by: qqeasonchen <qqeasonchen@gmail.com>
Co-authored-by: Wenjun Ruan <wenjun@apache.org>
Co-authored-by: yangjun <yangjun1120@gmail.com>
Co-authored-by: 李晓双 Li Xiao Shuang <644968328@qq.com>
Co-authored-by: Shoothzj <shoothzj@gmail.com>
Co-authored-by: Junjie Zhou <1192031540@qq.com>
Co-authored-by: ZePeng Chen <84842773+Roc-00@users.noreply.github.com>
Co-authored-by: jinrongluo <kapoking@gmail.com>
Co-authored-by: Tihomir Surdilovic <tihomir@temporal.io>
Co-authored-by: PJ Fanning <pjfanning@users.noreply.github.com>
Co-authored-by: wqliang <wqliang@apache.org>
Co-authored-by: lrhkobe <34571087+lrhkobe@users.noreply.github.com>
Co-authored-by: lucky-lsr <45811620+lucky-lsr@users.noreply.github.com>
Co-authored-by: sarihuangshanrong <280456134@qq.com>
Co-authored-by: TownChen <793847469@qq.com>
Co-authored-by: AhahaGe <ahahage@163.com>
Co-authored-by: SpiritZhang <howtoknow@qq.com>
Co-authored-by: like <likegeek@163.com>
Co-authored-by: beeylong@126.com <29363663+hsld9527@users.noreply.github.com>
Co-authored-by: fengyongshe <fengyongshe@139.com>
xwm1992 pushed a commit that referenced this issue Aug 4, 2022
* [Issue #768] fix issue in update HTTP subscriber

* [Issue #769] use Serialization to deep clone object and adding equals method to SubscriptionItem

* [Issue #768] fix build checkstyle issue

close #768
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants