Technoboy- opened a new issue, #15885:
URL: https://github.com/apache/pulsar/issues/15885

   ## Motivation
   
   When investigating #13342, we found that both the client and the server have 
the keepAliveIntervalSeconds configuration, which is 30s by default. During the 
configured time, the channel will send ping/pong commands to maintain 
connection availability. If the pong command is not replied within the cycle, 
the channel will be closed. For the client side, the reconnect logic is 
triggered after the channel is closed. For the broker side, the broker will 
clear the producer information after the channel is inactive.
   For the problem of #13342, it is because the user changed the configuration 
on the broker side to 100s. When the client determines that the connection has 
timed out and needs to disconnect the channel, since the client to the broker 
passes through the firewall, the close of the channel may not be sent, and then 
the client reconnects to the broker, and the reconnection succeeds. However, 
the timeout setting of the broker is relatively large. If the previous channel 
is not closed, the producer information will not be cleared. The reconnection 
of the producer will cause the broker to throw the exception that the producer 
already exists.
   This is the cause of the #13342 issue, and by tweaking the code, the issue 
can be reproduced.
   
   What I want to discuss is whether we can optimize this, configure this value 
only on the client-side, and pass it to the broker through the connect command. 
The advantage is that the server can cancel this configuration, and multiple 
clients can configure different values.
   
   ## API Changes
   
   Add `keep_alive_interval` in CommandConnect:
   ```
   message CommandConnect {
        ...
        optional int32 keep_alive_interval = 11 [default = 30];
   }
   ```
   
   The original logic to check the keep-alive is in  
`PulsarHandler#handleKeepAliveTimeout` which begins at channel active.
   
   For broker-side:
   - Now we do this in `ServerCnx#completeConnect`
   
   For client-side:
   - Now we do this in `ClientCnx#handleConnected`
   
   ## Compatibility
   
   no compatibility issues


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to