use of org.apache.nifi.remote.StandardVersionNegotiator in project nifi by apache.
the class DistributedSetCacheClientService method leaseCommsSession.
private CommsSession leaseCommsSession() throws IOException {
CommsSession session = queue.poll();
if (session != null && !session.isClosed()) {
return session;
}
session = createCommsSession(configContext);
final VersionNegotiator versionNegotiator = new StandardVersionNegotiator(1);
try {
ProtocolHandshake.initiateHandshake(session.getInputStream(), session.getOutputStream(), versionNegotiator);
session.setProtocolVersion(versionNegotiator.getVersion());
} catch (final HandshakeException e) {
IOUtils.closeQuietly(session);
throw new IOException(e);
}
return session;
}
use of org.apache.nifi.remote.StandardVersionNegotiator in project nifi by apache.
the class TestSocketFlowFileServerProtocol method getDefaultSocketFlowFileServerProtocol.
private SocketFlowFileServerProtocol getDefaultSocketFlowFileServerProtocol() {
final StandardVersionNegotiator versionNegotiator = new StandardVersionNegotiator(5, 4, 3, 2, 1);
final SocketFlowFileServerProtocol protocol = spy(new SocketFlowFileServerProtocol());
return protocol;
}
use of org.apache.nifi.remote.StandardVersionNegotiator in project nifi by apache.
the class DistributedMapCacheClientService method leaseCommsSession.
private CommsSession leaseCommsSession() throws IOException {
CommsSession session = queue.poll();
if (session != null && !session.isClosed()) {
return session;
}
session = createCommsSession(configContext);
final VersionNegotiator versionNegotiator = new StandardVersionNegotiator(3, 2, 1);
try {
ProtocolHandshake.initiateHandshake(session.getInputStream(), session.getOutputStream(), versionNegotiator);
session.setProtocolVersion(versionNegotiator.getVersion());
} catch (final HandshakeException e) {
try {
session.close();
} catch (final IOException ioe) {
}
throw new IOException(e);
}
return session;
}
use of org.apache.nifi.remote.StandardVersionNegotiator in project nifi by apache.
the class TestServerAndClient method testBackwardCompatibility.
@Test
public void testBackwardCompatibility() throws Exception {
/**
* This bypasses the test for build environments in OS X running Java 1.8 due to a JVM bug
* See: https://issues.apache.org/jira/browse/NIFI-437
*/
Assume.assumeFalse("test is skipped due to build environment being OS X with JDK 1.8. See https://issues.apache.org/jira/browse/NIFI-437", SystemUtils.IS_OS_MAC && SystemUtils.IS_JAVA_1_8);
LOGGER.info("Testing " + Thread.currentThread().getStackTrace()[1].getMethodName());
final TestRunner runner = TestRunners.newTestRunner(Mockito.mock(Processor.class));
// Create a server that only supports protocol version 1.
final DistributedMapCacheServer server = new MapServer() {
@Override
protected MapCacheServer createMapCacheServer(int port, int maxSize, SSLContext sslContext, EvictionPolicy evictionPolicy, File persistenceDir) throws IOException {
return new MapCacheServer(getIdentifier(), sslContext, port, maxSize, evictionPolicy, persistenceDir) {
@Override
protected StandardVersionNegotiator getVersionNegotiator() {
return new StandardVersionNegotiator(1);
}
};
}
};
runner.addControllerService("server", server);
runner.enableControllerService(server);
DistributedMapCacheClientService client = new DistributedMapCacheClientService();
MockControllerServiceInitializationContext clientInitContext1 = new MockControllerServiceInitializationContext(client, "client");
client.initialize(clientInitContext1);
final Map<PropertyDescriptor, String> clientProperties = new HashMap<>();
clientProperties.put(DistributedMapCacheClientService.HOSTNAME, "localhost");
clientProperties.put(DistributedMapCacheClientService.PORT, String.valueOf(server.getPort()));
clientProperties.put(DistributedMapCacheClientService.COMMUNICATIONS_TIMEOUT, "360 secs");
MockConfigurationContext clientContext = new MockConfigurationContext(clientProperties, clientInitContext1.getControllerServiceLookup());
client.cacheConfig(clientContext);
final Serializer<String> stringSerializer = new StringSerializer();
final Deserializer<String> stringDeserializer = new StringDeserializer();
final String key = "test-backward-compatibility";
// Version 1 operations should work
client.put(key, "value1", stringSerializer, stringSerializer);
assertEquals("value1", client.get(key, stringSerializer, stringDeserializer));
assertTrue(client.containsKey(key, stringSerializer));
try {
client.fetch(key, stringSerializer, stringDeserializer);
fail("Version 2 operations should NOT work.");
} catch (UnsupportedOperationException e) {
}
try {
AtomicCacheEntry<String, String, Long> entry = new AtomicCacheEntry<>(key, "value2", 0L);
client.replace(entry, stringSerializer, stringSerializer);
fail("Version 2 operations should NOT work.");
} catch (UnsupportedOperationException e) {
}
try {
Set<String> keys = client.keySet(stringDeserializer);
fail("Version 3 operations should NOT work.");
} catch (UnsupportedOperationException e) {
}
try {
String removed = client.removeAndGet("v.*", stringSerializer, stringDeserializer);
fail("Version 3 operations should NOT work.");
} catch (UnsupportedOperationException e) {
}
try {
Map<String, String> removed = client.removeByPatternAndGet("v.*", stringDeserializer, stringDeserializer);
fail("Version 3 operations should NOT work.");
} catch (UnsupportedOperationException e) {
}
client.close();
server.shutdownServer();
}
use of org.apache.nifi.remote.StandardVersionNegotiator in project nifi by apache.
the class DataTransferResource method initiateServerProtocol.
private HttpFlowFileServerProtocol initiateServerProtocol(final HttpServletRequest req, final Peer peer, final Integer transportProtocolVersion) throws IOException {
// Switch transaction protocol version based on transport protocol version.
TransportProtocolVersionNegotiator negotiatedTransportProtocolVersion = new TransportProtocolVersionNegotiator(transportProtocolVersion);
VersionNegotiator versionNegotiator = new StandardVersionNegotiator(negotiatedTransportProtocolVersion.getTransactionProtocolVersion());
final String dataTransferUrl = req.getRequestURL().toString();
((HttpCommunicationsSession) peer.getCommunicationsSession()).setDataTransferUrl(dataTransferUrl);
HttpFlowFileServerProtocol serverProtocol = getHttpFlowFileServerProtocol(versionNegotiator);
HttpRemoteSiteListener.getInstance(nifiProperties).setupServerProtocol(serverProtocol);
serverProtocol.handshake(peer);
return serverProtocol;
}
Aggregations