[ 
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

        

Reply via email to