diff --git a/core/src/main/java/hudson/model/Computer.java b/core/src/main/java/hudson/model/Computer.java index ae037acd082a..5637990f7e08 100644 --- a/core/src/main/java/hudson/model/Computer.java +++ b/core/src/main/java/hudson/model/Computer.java @@ -1503,7 +1503,9 @@ public void doConfigSubmit(StaplerRequest2 req, StaplerResponse2 rsp) throws IOE throw new FormException(Messages.Slave_InvalidConfig_Executors(nodeName), "numExecutors"); } + OfflineCause offlineCause = node.getTemporaryOfflineCause(); Node result = node.reconfigure(req, req.getSubmittedForm()); + result.setTemporaryOfflineCause(offlineCause); Jenkins.get().getNodesObject().replaceNode(this.getNode(), result); if (result.getNodeProperty(DiskSpaceMonitorNodeProperty.class) != null) { diff --git a/test/src/test/java/hudson/model/ComputerTest.java b/test/src/test/java/hudson/model/ComputerTest.java index aef59d8bf344..df63c9635e56 100644 --- a/test/src/test/java/hudson/model/ComputerTest.java +++ b/test/src/test/java/hudson/model/ComputerTest.java @@ -160,6 +160,18 @@ void computerIconDependsOnOfflineCause() throws Exception { assertThat(computer.getIcon(), equalTo(cause.getComputerIcon())); } + @Test + @Issue("#26146") + void computerTemporaryOfflineCauseStaysOnConfigRound() throws Exception { + var agent = j.createSlave(); + var computer = agent.toComputer(); + var offlineCause = new OfflineCause.UserCause(User.getOrCreateByIdOrFullName("username"), "Initial cause"); + computer.setTemporaryOfflineCause(offlineCause); + j.configRoundtrip(agent); + agent = (DumbSlave) j.jenkins.getNode(agent.getNodeName()); + assertThat(agent.getTemporaryOfflineCause(), equalTo(offlineCause)); + } + @Test @LocalData void removeUserDetailsFromOfflineCause() throws Exception {