Aleksey Yeschenko created CASSANDRA-8057:
--------------------------------------------
Summary: Record the real messaging version in all cases in
OutboundTcpConnection
Key: CASSANDRA-8057
URL: https://issues.apache.org/jira/browse/CASSANDRA-8057
Project: Cassandra
Issue Type: Bug
Reporter: Aleksey Yeschenko
Assignee: Aleksey Yeschenko
Priority: Minor
Fix For: 2.0.11
Piotr's quote, from CASSANDRA-6700 description:
bq. IncomingTcpConnection#handleModernVersion sets version to min(my version,
version of the peer). This messes up schema pull/push.
Seems like we've missed a similar, yet related, case in
OutboundTcpConnection#connect():
{code}
if (targetVersion < maxTargetVersion && targetVersion <
MessagingService.current_version)
{
logger.trace("Detected higher max version {} (using {}); will reconnect
when queued messages are done",
maxTargetVersion, targetVersion);
MessagingService.instance().setVersion(poolReference.endPoint(),
Math.min(MessagingService.current_version, maxTargetVersion));
softCloseSocket();
}
{code}
Should really set the true version (maxTargetVersion), since
MessagingService#getVersion() will return the min for us, anyway:
{code}
public int getVersion(InetAddress endpoint)
{
Integer v = versions.get(endpoint);
if (v == null)
{
// we don't know the version. assume current. we'll know soon enough if
that was incorrect.
logger.trace("Assuming current protocol version for {}", endpoint);
return MessagingService.current_version;
}
else
return Math.min(v, MessagingService.current_version);
}
{code}
But we need the true version for schema exchange decisions.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)