[
https://issues.apache.org/jira/browse/BOOKKEEPER-252?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13272185#comment-13272185
]
[email protected] commented on BOOKKEEPER-252:
----------------------------------------------------------
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/5086/
-----------------------------------------------------------
Review request for bookkeeper.
Summary
-------
In some case, we need to hedwig-client as proxy server to provide messaging
service to other users.
client -> proxy server 1 -> hedwig
\> proxy server 2 />
when client would connect to either proxy server to receive messages, the proxy
server would setup subscription channel to hedwig server.
we just want client to be simple, so when the channel between client and proxy
server is broken, client will try to connect to proxy servers thru VIP. it
might connect to other proxy server. for example, first time client connects to
proxy server 1, but the client found the connection is broken, it connects to
proxy server 2. when proxy server 2 tried to setup subscription channel to
hedwig, hedwig found that this subscription has existed before occupied by
proxy server 1.
the panic here is that proxy server 1 only disconnect old subscription channel
only when it detected the channel between client and itself is broken. The
detection might be delayed due to several reasons. so it might increment the
latency that messages are pushed to real client.
so we try to introduce a subscription mode called CREATE_OR_ATTACH_OR_KILL mode.
when a subscriber use this subscription mode, it would kill old existed
subscription channel. when using this subscription mode, we would turn off
auto-reconnect functionality in hedwig client and just tell client about the
channel disconnected event so client could do its logic when channel is
detected.
in order to provide some admin tool for admin guys to debug/operate, we provide
ADMIN mode. if a subscriber attach to a subscription using ADMIN mode, its
subscription channel would never be killed, then it is safe to guarantee admin
operations.
This addresses bug BOOKKEEPER-252.
https://issues.apache.org/jira/browse/BOOKKEEPER-252
Diffs
-----
hedwig-client/src/main/cpp/inc/hedwig/callback.h 5200d5b
hedwig-client/src/main/cpp/inc/hedwig/subscribe.h fc8da58
hedwig-client/src/main/cpp/lib/channel.cpp ada1e58
hedwig-client/src/main/cpp/lib/clientimpl.h 40e063c
hedwig-client/src/main/cpp/lib/clientimpl.cpp 712de01
hedwig-client/src/main/cpp/lib/data.h d9d2ffd
hedwig-client/src/main/cpp/lib/data.cpp 42fa2ad
hedwig-client/src/main/cpp/lib/publisherimpl.cpp a421e98
hedwig-client/src/main/cpp/lib/subscriberimpl.h 508a495
hedwig-client/src/main/cpp/lib/subscriberimpl.cpp 6f7d02e
hedwig-client/src/main/cpp/test/subscribetest.cpp f90502c
hedwig-client/src/main/cpp/test/util.h 780a466
hedwig-client/src/main/java/org/apache/hedwig/client/api/Subscriber.java
972590b
hedwig-client/src/main/java/org/apache/hedwig/client/data/PubSubData.java
8460de0
hedwig-client/src/main/java/org/apache/hedwig/client/data/TopicSubscriber.java
064cec1
hedwig-client/src/main/java/org/apache/hedwig/client/netty/HedwigPublisher.java
603766c
hedwig-client/src/main/java/org/apache/hedwig/client/netty/HedwigSubscriber.java
0c8634c
hedwig-client/src/main/java/org/apache/hedwig/client/netty/ResponseHandler.java
c4affaf
hedwig-client/src/main/java/org/apache/hedwig/util/SubscriptionChannelListener.java
PRE-CREATION
hedwig-protocol/src/main/java/org/apache/hedwig/protocol/PubSubProtocol.java
92f409d
hedwig-protocol/src/main/protobuf/PubSubProtocol.proto b845c40
hedwig-server/src/main/java/org/apache/hedwig/admin/console/HedwigCommands.java
a17f56b
hedwig-server/src/main/java/org/apache/hedwig/admin/console/HedwigConsole.java
5da8e16
hedwig-server/src/main/java/org/apache/hedwig/server/handlers/SubscribeHandler.java
76e0c14
hedwig-server/src/main/java/org/apache/hedwig/server/netty/PubSubServer.java
52089f5
hedwig-server/src/main/java/org/apache/hedwig/server/subscriptions/AbstractSubscriptionManager.java
ba841af
hedwig-server/src/main/java/org/apache/hedwig/server/subscriptions/InMemorySubscriptionManager.java
0fdfad0
hedwig-server/src/main/java/org/apache/hedwig/server/subscriptions/ZkSubscriptionManager.java
4d39335
hedwig-server/src/test/java/org/apache/hedwig/client/TestPubSubClient.java
08994de
hedwig-server/src/test/java/org/apache/hedwig/server/PubSubServerStandAloneTestBase.java
5f6e363
hedwig-server/src/test/java/org/apache/hedwig/server/handlers/TestSubUnsubHandler.java
d24a86d
hedwig-server/src/test/java/org/apache/hedwig/server/subscriptions/StubSubscriptionManager.java
255880b
hedwig-server/src/test/java/org/apache/hedwig/server/subscriptions/TestZkSubscriptionManager.java
f6d533f
Diff: https://reviews.apache.org/r/5086/diff
Testing
-------
Thanks,
Sijie
> Hedwig: provide a subscription mode to kill other subscription channel when
> hedwig client is used as a proxy-style server.
> --------------------------------------------------------------------------------------------------------------------------
>
> Key: BOOKKEEPER-252
> URL: https://issues.apache.org/jira/browse/BOOKKEEPER-252
> Project: Bookkeeper
> Issue Type: New Feature
> Affects Versions: 4.1.0
> Reporter: Sijie Guo
> Assignee: Sijie Guo
> Fix For: 4.2.0
>
> Attachments: BK-252.diff
>
>
> In some case, we need to hedwig-client as proxy server to provide messaging
> service to other users.
> client -> proxy server 1 -> hedwig
> \> proxy server 2 />
> when client would connect to either proxy server to receive messages, the
> proxy server would setup subscription channel to hedwig server.
> we just want client to be simple, so when the channel between client and
> proxy server is broken, client will try to connect to proxy servers thru VIP.
> it might connect to other proxy server. for example, first time client
> connects to proxy server 1, but the client found the connection is broken, it
> connects to proxy server 2. when proxy server 2 tried to setup subscription
> channel to hedwig, hedwig found that this subscription has existed before
> occupied by proxy server 1.
> the panic here is that proxy server 1 only disconnect old subscription
> channel only when it detected the channel between client and itself is
> broken. The detection might be delayed due to several reasons. so it might
> increment the latency that messages are pushed to real client.
> so we try to introduce a subscription mode called CREATE_OR_ATTACH_OR_KILL
> mode.
> when a subscriber use this subscription mode, it would kill old existed
> subscription channel. when using this subscription mode, we would turn off
> auto-reconnect functionality in hedwig client and just tell client about the
> channel disconnected event so client could do its logic when channel is
> detected.
> in order to provide some admin tool for admin guys to debug/operate, we
> provide ADMIN mode. if a subscriber attach to a subscription using ADMIN
> mode, its subscription channel would never be killed, then it is safe to
> guarantee admin operations.
>
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira