You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Galen O'Sullivan (JIRA)" <ji...@apache.org> on 2017/09/01 20:53:00 UTC
[jira] [Updated] (GEODE-3555) Protobuf clients are rejected with an
old-client-specific message.
[ https://issues.apache.org/jira/browse/GEODE-3555?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Galen O'Sullivan updated GEODE-3555:
------------------------------------
Description:
If the number of client connections is above the configured maximum, new client connections will be rejected with a message that is meant for old clients and, to them, is unintelligible.
This can be seen with the following test added to {{RoundTripCacheConnectionJUnitTest}}:
{code}
@Test
public void testNewProtocolRespectsMaxConnectionLimit()
throws IOException, InterruptedException {
cache.close();
CacheFactory cacheFactory = new CacheFactory();
Cache cache = cacheFactory.create();
CacheServer cacheServer = cache.addCacheServer();
final int cacheServerPort = AvailablePortHelper.getRandomAvailableTCPPort();
cacheServer.setPort(cacheServerPort);
cacheServer.setMaxConnections(16);
cacheServer.setMaxThreads(16);
cacheServer.start();
AcceptorImpl acceptor = ((CacheServerImpl) cacheServer).getAcceptor();
Socket[] sockets = new Socket[16];
for (int i = 0; i < 16; i++) {
Socket socket = new Socket("localhost", cacheServerPort);
sockets[i] = socket;
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(socket::isConnected);
socket.getOutputStream().write(CommunicationMode.ProtobufClientServerProtocol.getModeNumber());
}
try (Socket socket = new Socket("localhost", cacheServerPort)) {
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(socket::isConnected);
OutputStream outputStream = socket.getOutputStream();
outputStream
.write(CommunicationMode.ProtobufClientServerProtocol.getModeNumber());
assertEquals(-1, socket.getInputStream().read());
}
{code}
This can be traced to a call to {{ ServerHandShakeProcessor.refuse(socket.getOutputStream(), ...}}
.
was:
If the number of client connections is above the configured maximum, new client connections will be rejected with a message that is meant for old clients and, to them, is unintelligible.
This can be seen with the following test added to {{RoundTripCacheConnectionJUnitTest}}:
{code}
@Test
public void testNewProtocolRespectsMaxConnectionLimit()
throws IOException, InterruptedException {
cache.close();
CacheFactory cacheFactory = new CacheFactory();
Cache cache = cacheFactory.create();
CacheServer cacheServer = cache.addCacheServer();
final int cacheServerPort = AvailablePortHelper.getRandomAvailableTCPPort();
cacheServer.setPort(cacheServerPort);
cacheServer.setMaxConnections(16);
cacheServer.setMaxThreads(16);
cacheServer.start();
AcceptorImpl acceptor = ((CacheServerImpl) cacheServer).getAcceptor();
Socket[] sockets = new Socket[16];
for (int i = 0; i < 16; i++) {
Socket socket = new Socket("localhost", cacheServerPort);
sockets[i] = socket;
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(socket::isConnected);
socket.getOutputStream().write(CommunicationMode.ProtobufClientServerProtocol.getModeNumber());
}
try (Socket socket = new Socket("localhost", cacheServerPort)) {
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(socket::isConnected);
OutputStream outputStream = socket.getOutputStream();
outputStream
.write(CommunicationMode.ProtobufClientServerProtocol.getModeNumber());
assertEquals(-1, socket.getInputStream().read());
}
{code}
This can be traced to a call to {{ ServerHandShakeProcessor.refuse(socket.getOutputStream(), ...}}.
> Protobuf clients are rejected with an old-client-specific message.
> ------------------------------------------------------------------
>
> Key: GEODE-3555
> URL: https://issues.apache.org/jira/browse/GEODE-3555
> Project: Geode
> Issue Type: Bug
> Components: messaging
> Reporter: Galen O'Sullivan
> Fix For: 1.3.0
>
>
> If the number of client connections is above the configured maximum, new client connections will be rejected with a message that is meant for old clients and, to them, is unintelligible.
> This can be seen with the following test added to {{RoundTripCacheConnectionJUnitTest}}:
> {code}
> @Test
> public void testNewProtocolRespectsMaxConnectionLimit()
> throws IOException, InterruptedException {
> cache.close();
> CacheFactory cacheFactory = new CacheFactory();
> Cache cache = cacheFactory.create();
> CacheServer cacheServer = cache.addCacheServer();
> final int cacheServerPort = AvailablePortHelper.getRandomAvailableTCPPort();
> cacheServer.setPort(cacheServerPort);
> cacheServer.setMaxConnections(16);
> cacheServer.setMaxThreads(16);
> cacheServer.start();
> AcceptorImpl acceptor = ((CacheServerImpl) cacheServer).getAcceptor();
> Socket[] sockets = new Socket[16];
> for (int i = 0; i < 16; i++) {
> Socket socket = new Socket("localhost", cacheServerPort);
> sockets[i] = socket;
> Awaitility.await().atMost(5, TimeUnit.SECONDS).until(socket::isConnected);
> socket.getOutputStream().write(CommunicationMode.ProtobufClientServerProtocol.getModeNumber());
> }
> try (Socket socket = new Socket("localhost", cacheServerPort)) {
> Awaitility.await().atMost(5, TimeUnit.SECONDS).until(socket::isConnected);
> OutputStream outputStream = socket.getOutputStream();
> outputStream
> .write(CommunicationMode.ProtobufClientServerProtocol.getModeNumber());
> assertEquals(-1, socket.getInputStream().read());
> }
> {code}
> This can be traced to a call to {{ ServerHandShakeProcessor.refuse(socket.getOutputStream(), ...}}
> .
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)