You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2022/07/20 14:30:56 UTC

[brooklyn-server] branch master updated: fix problem where k8s logs are sometimes reset

This is an automated email from the ASF dual-hosted git repository.

heneveld pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git


The following commit(s) were added to refs/heads/master by this push:
     new 168b66036c fix problem where k8s logs are sometimes reset
168b66036c is described below

commit 168b66036cc973af7a3f015c757c03460ad9310c
Author: Alex Heneveld <al...@cloudsoft.io>
AuthorDate: Wed Jul 20 15:30:40 2022 +0100

    fix problem where k8s logs are sometimes reset
---
 .../brooklyn/tasks/kubectl/ContainerTaskFactory.java       | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java
index d9736f61a4..bab7b06fcb 100644
--- a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java
+++ b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java
@@ -319,9 +319,17 @@ public class ContainerTaskFactory<T extends ContainerTaskFactory<T,RET>,RET> imp
                                         throw new IllegalStateException("Error detected with container job while reading logs (exit code "+outputSoFarCmd.getExitCode()+"): "+outputSoFarCmd.getStdout() + " / "+outputSoFarCmd.getStderr());
                                     }
                                     String outputSoFar = outputSoFarCmd.get();
-                                    String newOutput = outputSoFar.substring(stdout.size());
-                                    LOG.debug("Container job "+namespace+" output: "+newOutput);
-                                    stdout.write(newOutput.getBytes(StandardCharsets.UTF_8));
+                                    int bytesAlreadyRead = stdout.size();
+                                    if (bytesAlreadyRead <= outputSoFar.length()) {
+                                        String newOutput = outputSoFar.substring(stdout.size());
+                                        LOG.debug("Container job " + namespace + " output: " + newOutput);
+                                        stdout.write(newOutput.getBytes(StandardCharsets.UTF_8));
+                                    } else {
+                                        // not sure why this happens, but it does sometimes; for now just reset
+                                        LOG.debug("Container job " + namespace + " output reset, length "+outputSoFar.length()+" less than "+bytesAlreadyRead+"; ignoring new output:\n" + outputSoFar +"\n"+new String(stdout.toByteArray()));
+                                        stdout.reset();
+                                        stdout.write(outputSoFar.getBytes(StandardCharsets.UTF_8));
+                                    }
 
                                     if (timer.isExpired())
                                         throw new IllegalStateException("Timeout waiting for success or failure");