-
Improvement
-
Resolution: Fixed
-
Major
-
None
-
Powered by SuggestiMate
Open sourcing the JNLPProtocol4 implementation that combines NIO with TLS encryption to resolve the regression to Thread-per-client in JNLPProtocol3
- is related to
-
JENKINS-33886 Can only connect one JNLP3 slave per IP address
-
- Resolved
-
- relates to
-
JENKINS-40700 Display communication protocol in agent logs
-
- Closed
-
- links to
[JENKINS-36871] JNLPProtocol4
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol2Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol3Handler.java
http://jenkins-ci.org/commit/remoting/124439ed73fce4be1fddcff40c1c6c85a00dd7ac
Log:
JENKINS-36871 Migrate javadoc from classes to be removed
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/util/ByteBufferQueueInputStream.java
src/test/java/org/jenkinsci/remoting/util/ByteBufferQueueInputStreamTest.java
http://jenkins-ci.org/commit/remoting/707bfe8df5ba7392c8427b271507db08cba73a6a
Log:
JENKINS-36871 Tests had missed some critical bugs in this ByteBufferQueueInputStream
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/hudson/remoting/AbstractByteBufferCommandTransport.java
http://jenkins-ci.org/commit/remoting/7062224c9e8a66a5a8acc405c43162f905158569
Log:
JENKINS-36871 Unnecessary reset of length
- Also causes commands that span multiple frames to be corrupted
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/protocol/impl/SSLEngineFilterLayer.java
http://jenkins-ci.org/commit/remoting/90425ad49bac1e6502ace8ad04006c25ed72da34
Log:
JENKINS-36871 Found an infinite loop under certain error state disconnects
- Don't think this affected any real protocols, but better to fix after finding
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/util/KeyUtils.java
http://jenkins-ci.org/commit/remoting/d2504bc8f461e58027b57fa2cde12dfcd7297049
Log:
JENKINS-36871 Slightly faster code path to get hex conversion
- Avoids intermediate String representation. Could probably get faster still with BigInteger and zero-left-pad but it becomes harder to understand
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/hudson/remoting/Channel.java
http://jenkins-ci.org/commit/remoting/0ef5cac61c33550a0de5e94703dd755b5bd179d7
Log:
JENKINS-36871 Stop complaining when the channel is already closed
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/hudson/remoting/RemoteInvocationHandler.java
http://jenkins-ci.org/commit/remoting/adc601401d66a01c44d819a56f81c33de9c304b3
Log:
JENKINS-36871 When tiered compilation kicks in, sometimes you can get concurrent modification exceptions
- They'll recover, but better is not to have to worry about it at all
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/hudson/remoting/Engine.java
http://jenkins-ci.org/commit/remoting/9ad1ed1b1d570d184ee5c89f64cf5b597a81d206
Log:
JENKINS-36871 Suppress extra socket connection when all protocols have been tried
- Also better setup of the SSLContext
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/engine/EngineUtil.java
http://jenkins-ci.org/commit/remoting/a065e8a9a914e9065fbead57af00715d7d30e0c0
Log:
JENKINS-36871 Make the method signature more generic
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/engine/Jnlp3ConnectionState.java
src/main/java/org/jenkinsci/remoting/engine/Jnlp4ConnectionState.java
src/main/java/org/jenkinsci/remoting/engine/JnlpClientDatabase.java
src/main/java/org/jenkinsci/remoting/engine/JnlpConnectionState.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol1Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol2Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol3Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol4Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocolHandler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocolHandlerFactory.java
src/main/java/org/jenkinsci/remoting/engine/LegacyJnlpConnectionState.java
src/main/java/org/jenkinsci/remoting/engine/LegacyJnlpProtocolHandler.java
http://jenkins-ci.org/commit/remoting/6449a73f157f48efe0de53255d22a63734514d42
Log:
JENKINS-36871 All the handlers need the client database
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/protocol/impl/ChannelApplicationLayer.java
http://jenkins-ci.org/commit/remoting/8bb6354a188133ea8568bdb332393251ab6b06c1
Log:
JENKINS-36871 Correctly detect and report the channel being closed for writing
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/protocol/impl/SSLEngineFilterLayer.java
http://jenkins-ci.org/commit/remoting/a6e45c52a3643c2384a393e2ee8308853454f887
Log:
JENKINS-36871 Don't spam the logs with warnings for closed I/O or refused connections
Code changed in jenkins
User: Stephen Connolly
Path:
src/test/java/org/jenkinsci/remoting/engine/JnlpProtocolHandlerTest.java
http://jenkins-ci.org/commit/remoting/0ac6dc3b0acbe7019bceb223e155795364f4678f
Log:
JENKINS-36871 Add tests for the JnlpProtocolHandlers
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol1.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol2.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol3.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocolFactory.java
src/main/java/org/jenkinsci/remoting/engine/JnlpServer3Handshake.java
src/main/java/org/jenkinsci/remoting/engine/JnlpServerHandshake.java
src/test/java/org/jenkinsci/remoting/engine/JnlpProtocol1Test.java
src/test/java/org/jenkinsci/remoting/engine/JnlpProtocol2Test.java
src/test/java/org/jenkinsci/remoting/engine/JnlpProtocol3Test.java
src/test/java/org/jenkinsci/remoting/engine/JnlpProtocolTest.java
http://jenkins-ci.org/commit/remoting/d999b955f2cb7cc62b39944d1cd7c4198c1474a8
Log:
JENKINS-36871 Remove dead classes
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/engine/Jnlp3ConnectionState.java
src/main/java/org/jenkinsci/remoting/engine/Jnlp4ConnectionState.java
src/main/java/org/jenkinsci/remoting/engine/JnlpClientDatabase.java
src/main/java/org/jenkinsci/remoting/engine/JnlpConnectionState.java
src/main/java/org/jenkinsci/remoting/engine/JnlpConnectionStateListener.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol1Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol2Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol3Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol4Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocolHandler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocolHandlerFactory.java
src/main/java/org/jenkinsci/remoting/engine/LegacyJnlpConnectionState.java
src/main/java/org/jenkinsci/remoting/engine/LegacyJnlpProtocolHandler.java
src/test/java/org/jenkinsci/remoting/engine/JnlpProtocolHandlerTest.java
http://jenkins-ci.org/commit/remoting/fc646c3677247843dba5a78a84e03b3d1a81e91a
Log:
JENKINS-36871 Fix up javadoc and copyright headers
Compare: https://github.com/jenkinsci/remoting/compare/d2504bc8f461...fc646c367724
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/hudson/remoting/Asynchronous.java
src/main/java/hudson/remoting/Base64.java
src/main/java/hudson/remoting/CallableFilter.java
src/main/java/hudson/remoting/Channel.java
src/main/java/hudson/remoting/ClassFilter.java
src/main/java/hudson/remoting/CommandTransport.java
src/main/java/hudson/remoting/FastPipedInputStream.java
src/main/java/hudson/remoting/FastPipedOutputStream.java
src/main/java/hudson/remoting/RemoteClassLoader.java
src/main/java/org/jenkinsci/remoting/CallableDecorator.java
src/main/java/org/jenkinsci/remoting/Role.java
src/main/java/org/jenkinsci/remoting/RoleSensitive.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol3Handler.java
src/main/java/org/jenkinsci/remoting/util/SettableFuture.java
http://jenkins-ci.org/commit/remoting/aae74aec41d1c970e60602010ff77cfe0facf96e
Log:
JENKINS-36871 Make all the rest of the javadoc work on Java 8's strict validation
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol3Handler.java
http://jenkins-ci.org/commit/remoting/7d003c854d4d8896bd2dcaf664caa1c806987b70
Log:
JENKINS-36871 Switch back to a PrintWriter
Compare: https://github.com/jenkinsci/remoting/compare/fc646c367724...7d003c854d4d
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/protocol/IOHub.java
http://jenkins-ci.org/commit/remoting/38cd6e424705ff64df68080ab0df9a3a4468a56a
Log:
JENKINS-36871 Optimize hot code path
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/util/ByteBufferQueue.java
src/main/java/org/jenkinsci/remoting/util/ByteBufferQueueInputStream.java
http://jenkins-ci.org/commit/remoting/bbb5865e7cd18ad6854c12ab03d1d5e5e424ec0f
Log:
JENKINS-36871 Remove intermediary ByteBuffer.wrap for simple case
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/util/ByteBufferQueue.java
src/main/java/org/jenkinsci/remoting/util/ByteBufferQueueOutputStream.java
http://jenkins-ci.org/commit/remoting/d40ca3d1870174d017a432b0f85ca40f3ee8c270
Log:
JENKINS-36871 Remove intermediary ByteBuffer.wrap for simple case
Code changed in jenkins
User: Stephen Connolly
Path:
src/test/java/org/jenkinsci/remoting/engine/HandlerLoopbackLoadStress.java
http://jenkins-ci.org/commit/remoting/4bc69f2886d63734e00b000673af4ff00b8f3dd6
Log:
JENKINS-36871 Test bed for stressing out handler implementations
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/protocol/FilterLayer.java
src/main/java/org/jenkinsci/remoting/protocol/ProtocolStack.java
http://jenkins-ci.org/commit/remoting/75c4cf7c8ee6c2c464300efd8664c648ba6d6eb0
Log:
JENKINS-36871 Allow a filter to call `completed()` from both the receive and send sides without bombing out.
Prevents stack traces such as
```
Exception in thread "main" java.lang.IllegalStateException: Filter has already been completed
at org.jenkinsci.remoting.protocol.FilterLayer.completed(FilterLayer.java:106)
at org.jenkinsci.remoting.protocol.impl.ConnectionHeadersFilterLayer.complete(ConnectionHeadersFilterLayer.java:365)
at org.jenkinsci.remoting.protocol.impl.ConnectionHeadersFilterLayer.doSend(ConnectionHeadersFilterLayer.java:498)
at org.jenkinsci.remoting.protocol.ProtocolStack$Ptr.doSend(ProtocolStack.java:691)
at org.jenkinsci.remoting.protocol.ApplicationLayer.write(ApplicationLayer.java:157)
at org.jenkinsci.remoting.protocol.impl.ChannelApplicationLayer.start(ChannelApplicationLayer.java:226)
at org.jenkinsci.remoting.protocol.ProtocolStack.init(ProtocolStack.java:202)
at org.jenkinsci.remoting.protocol.ProtocolStack.access$700(ProtocolStack.java:107)
at org.jenkinsci.remoting.protocol.ProtocolStack$Builder.build(ProtocolStack.java:555)
at org.jenkinsci.remoting.engine.JnlpProtocol4PlainHandler.connect(JnlpProtocol4PlainHandler.java:149)
at org.jenkinsci.remoting.engine.JnlpProtocolHandler.connect(JnlpProtocolHandler.java:140)
at org.jenkinsci.remoting.engine.HandlerLoopbackLoadStress.startClient(HandlerLoopbackLoadStress.java:466)
at org.jenkinsci.remoting.engine.HandlerLoopbackLoadStress.main(HandlerLoopbackLoadStress.java:426)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
```
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/protocol/IOHub.java
http://jenkins-ci.org/commit/remoting/6da1cb4c1f09583382195b4608a2759d49fd65b3
Log:
JENKINS-36871 Using a single final class allows for inlining of hot method
Code changed in jenkins
User: Stephen Connolly
Path:
src/test/java/org/jenkinsci/remoting/util/ByteBufferQueueTest.java
http://jenkins-ci.org/commit/remoting/d942165c92e31b6b2e716e61e1ce6c9e74269357
Log:
JENKINS-36871 Add some more test cases
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/protocol/IOHub.java
http://jenkins-ci.org/commit/remoting/4b291b3ab370e1ddee8b656c96cef636a86c6573
Log:
JENKINS-36871 WIndows!?!
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/util/ByteBufferQueue.java
http://jenkins-ci.org/commit/remoting/6cd91459c8b0e263e907ccdad271ba327e020d93
Log:
JENKINS-36871 Improve single-byte `get()` performance
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/util/ByteBufferQueueInputStream.java
http://jenkins-ci.org/commit/remoting/74bf4fa676837b682ced32ad684474001e525665
Log:
JENKINS-36871 Optimize single byte `read()` performance
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/util/FastByteBufferQueueInputStream.java
src/test/java/org/jenkinsci/remoting/util/FastByteBufferQueueInputStreamTest.java
http://jenkins-ci.org/commit/remoting/8e595fcd116d0df7f712a1ac41d7188a1b943b6f
Log:
JENKINS-36871 Stripped back higher performance ByteBufferQueue InputStream implementation
- Drops support for mark and unbounded read in return for faster performance
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/hudson/remoting/AbstractByteBufferCommandTransport.java
http://jenkins-ci.org/commit/remoting/3c0db40c31165dea74cac5791adae4e99c179bad
Log:
JENKINS-36871 Switch to FastByteBufferQueueInputStream
- We don't need the general purpose mark support or unbounded reads, so lets get more performance
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/protocol/ProtocolStack.java
http://jenkins-ci.org/commit/remoting/b5656c06abb78a2c384fbcee631107a3b476f164
Log:
JENKINS-36871 Halve the number of stack walks when checking if open
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol1Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol2Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol3Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol4Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol4PlainHandler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocolHandler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocolHandlerFactory.java
src/main/java/org/jenkinsci/remoting/engine/LegacyJnlpProtocolHandler.java
src/test/java/org/jenkinsci/remoting/engine/JnlpProtocolHandlerTest.java
http://jenkins-ci.org/commit/remoting/1edda2be2a24732a2ff184207d859468d69b4877
Log:
JENKINS-36871 Blocking I/O is faster when you have very few connections, so allow preference declaration
Code changed in jenkins
User: Stephen Connolly
Path:
LICENSE.md
NOTICE
http://jenkins-ci.org/commit/remoting/c8be8453dbee9cb3c7156307fa64b5c6a0618149
Log:
JENKINS-36871 The code was missing a NOTICE and LICENSE files
- You'll see why I spotted this next
Code changed in jenkins
User: Stephen Connolly
Path:
pom.xml
src/assembly/agent-load-test.xml
src/assembly/agent-load-test/LICENSE.md
src/assembly/agent-load-test/NOTICE
src/assembly/agent-load-test/README.md
src/assembly/agent-load-test/agent-load-test
src/assembly/agent-load-test/agent-load-test.bat
src/test/java/org/jenkinsci/remoting/engine/HandlerLoopbackLoadStress.java
http://jenkins-ci.org/commit/remoting/19093e34f77f6beb0af6d767addb75bee09ef0e6
Log:
JENKINS-36871 Add a load testing client
- This needs its own LICENSE and NOTICE files as it includes things like JUnit
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/hudson/remoting/Engine.java
http://jenkins-ci.org/commit/remoting/41841e520b6cfec0bb1179cf33ef969aec230886
Log:
JENKINS-36871 Use Blocking-I/O for the clients
Code changed in jenkins
User: Stephen Connolly
Path:
src/test/java/org/jenkinsci/remoting/engine/JnlpProtocolHandlerTest.java
http://jenkins-ci.org/commit/remoting/0529c154be04e030855a801e65cd0d096ae8130f
Log:
JENKINS-36871 Test timing is needs longer when dealing with slower build agents
Compare: https://github.com/jenkinsci/remoting/compare/19093e34f77f...0529c154be04
Code changed in jenkins
User: Stephen Connolly
Path:
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol4Handler.java
src/main/java/org/jenkinsci/remoting/engine/JnlpProtocol4PlainHandler.java
http://jenkins-ci.org/commit/remoting/2ce2f8ac22816813b413f09b37d2c05151eb1b3a
Log:
JENKINS-36871 Fix failing tests
Code changed in jenkins
User: Stephen Connolly
Path:
src/test/java/org/jenkinsci/remoting/engine/JnlpProtocolHandlerTest.java
http://jenkins-ci.org/commit/remoting/ac9bcabdb7a69e0cf8e49ca92ce9cad8fd9b6842
Log:
JENKINS-36871 Forgot to test JNLP4-plaintext
Compare: https://github.com/jenkinsci/remoting/compare/0529c154be04...ac9bcabdb7a6
Is there any way to tell when this might be released? We're very interested in this work.
It sounds like this needs a remoting release, which will later make it's way to a jenkins release.
(We might also be willing to test a nightly, but I'm going to have to figure out a bit more of the process first.)
+1, also interested in this. Any update on when this is expected to be released?
Marking it as Resolved. We're preparing to the Remoting 3.0 release right now
Code changed in jenkins
User: Stephen Connolly
Path:
core/src/main/java/jenkins/slaves/DefaultJnlpSlaveReceiver.java
core/src/main/java/jenkins/slaves/IOHubProvider.java
core/src/main/java/jenkins/slaves/JnlpAgentReceiver.java
core/src/main/java/jenkins/slaves/JnlpSlaveAgentProtocol.java
core/src/main/java/jenkins/slaves/JnlpSlaveAgentProtocol2.java
core/src/main/java/jenkins/slaves/JnlpSlaveAgentProtocol3.java
core/src/main/java/jenkins/slaves/JnlpSlaveAgentProtocol4.java
core/src/main/java/jenkins/slaves/JnlpSlaveHandshake.java
core/src/main/resources/jenkins/slaves/JnlpSlaveAgentProtocol4/description.jelly
core/src/main/resources/jenkins/slaves/Messages.properties
core/src/test/java/jenkins/slaves/DefaultJnlpSlaveReceiverTest.java
pom.xml
http://jenkins-ci.org/commit/jenkins/71cbe0cc7c601c04509faa618b23194335288fee
Log:
[JENKINS-36871, JENKINS-37565] JNLP4-connect implementation and Remoting 3 (#2492)
JENKINS-36871Switch to the new JnlpProtocolHandler based implementation
Todo
- [ ] Restore the cookie behaviour (but done right this time)
- [ ] Perhaps investigate issuing clients with TLS certificates (but would require a UI for managing them)
JENKINS-36871License headers and javadocs
JENKINS-36871Restore cookie handling
JENKINS-36871Integrating Agent discovery components
JENKINS-36871Pick up remoting 3.0-SNAPSHOT
JENKINS-36871Pick up newer snapshot
JENKINS-36871Oleg wants to log an exception that cannot happen
How does one confirm that JNLP4 is being used? I tried the latest Jenkins ver. 2.38 (weekly) and configured a JNLP slave (there's no option to configure what kind of JNLP slave).
Additionally, the agent logs don't show much in the way of output confirming which JNLP protocol is even being used. Here's the full log output from the initialization of the JNLP slave.
JNLP agent connected from /REDACTED <===[JENKINS REMOTING CAPACITY]===>Slave.jar version: 3.3 This is a Unix agent Agent successfully connected and online
So far, I'm not sure how to tell what protocol is being used.
Nevermind, I found it in Manage Jenkins > Configure Global Security > JNLP. In the Advanced section, you have to enable JNLP4 (and can optionally disable the other protocols). Then if you look at the agent log you can see the JNLP4 class being used in the thread dump output. It would be nice if the agent Log output displayed which protocol it is using in the agent startup information.
It would be nice if the agent Log output displayed which protocol it is using in the agent startup information.
I created JENKINS-40700 as an enhancement.
Merged towards 2.16.