Skip to content

Commit

Permalink
More robust waiting for the process death
Browse files Browse the repository at this point in the history
Signed-off-by: David Matějček <david.matejcek@omnifish.ee>
  • Loading branch information
dmatej committed Dec 29, 2024
1 parent 21fe61c commit 0f23409
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 19 deletions.
16 changes: 7 additions & 9 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ spec:
PORT_ADMIN=4848
PORT_HTTP=8080
PORT_HTTPS=8181
AS_RESTART_LOGFILES="true"
}

options {
Expand Down Expand Up @@ -187,22 +188,19 @@ spec:
container('maven') {
dumpSysInfo()
sh '''
# Validate the structure in all submodules (especially version ids)
mvn -B -e -fae clean validate -Ptck,set-version-id,staging
# Until we fix ANTLR in cmp-support-sqlstore, broken in parallel builds. Just -Pfast after the fix.
mvn -B -e install -Pfastest,staging -T4C
./gfbuild.sh archive_bundles
./gfbuild.sh archive_embedded
mvn -B -e clean -Pstaging
tar -c -C ${WORKSPACE}/appserver/tests common_test.sh gftest.sh appserv-tests quicklook | gzip --fast > ${WORKSPACE}/bundles/appserv_tests.tar.gz
ls -la ${WORKSPACE}/bundles
ls -la ${WORKSPACE}/embedded
mvn -B -e clean install -pl :admin-tests-parent -amd
'''
}
archiveArtifacts artifacts: 'bundles/*.zip', onlyIfSuccessful: true
archiveArtifacts artifacts: 'embedded/*', onlyIfSuccessful: true
stash includes: 'bundles/*', name: 'build-bundles'
}
post {
always {
archiveArtifacts artifacts: "**/*.log*", onlyIfSuccessful: false
}
}
}
stage('mvn-tests') {
steps {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,9 +68,11 @@ public class AsadminLoggingITest {
private static final Asadmin ASADMIN = GlassFishTestEnvironment.getAsadmin();

@BeforeAll
public static void fillUpServerLog() {
public static void fillUpServerLog() throws Exception {
// Fill up the server log.
AsadminResult result = ASADMIN.exec(60_000, "restart-domain");
new ProcessBuilder("ps", "-lAf").inheritIO().start().waitFor();

assertThat(result, asadminOK());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
import java.time.Duration;
import java.time.Instant;
import java.util.Optional;
import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
Expand Down Expand Up @@ -76,19 +78,21 @@ private ProcessUtils() {
* @return true if the handle was not found or exited before timeout. False otherwise.
*/
public static boolean waitWhileIsAlive(final long pid, Duration timeout, boolean printDots) {
Optional<ProcessHandle> handle = ProcessHandle.of(pid);
if (handle.isEmpty()) {
ProcessHandle handle = ProcessHandle.of(pid).orElse(null);
if (handle == null || !handle.isAlive() || handle.parent().isEmpty()) {
LOG.log(INFO, "Could not find the process with id " + pid + ", probably already died. Returning true.");
return true;
}
final DotPrinter dotPrinter = DotPrinter.startWaiting(printDots);
try {
handle.get().onExit().get(timeout.toSeconds(), TimeUnit.SECONDS);
return true;
final CompletableFuture<ProcessHandle> onExit = handle.onExit();
onExit.get(timeout.toSeconds(), TimeUnit.SECONDS);
return !handle.isAlive();
} catch (TimeoutException e) {
LOG.log(TRACE, "Timeout while waiting for exit of process with id " + pid + ". Returning false.", e);
LOG.log(INFO, "Timeout while waiting for exit of process with id " + pid + ". Returning false.", e);
return false;
} catch (InterruptedException | ExecutionException e) {
LOG.log(TRACE, "Exception while waiting for exit of process with id " + pid + ". Returning true.", e);
} catch (CancellationException | InterruptedException | ExecutionException e) {
LOG.log(INFO, "Exception while waiting for exit of process with id " + pid + ". Returning true.", e);
return true;
} finally {
DotPrinter.stopWaiting(dotPrinter);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,8 @@ private static ProcessBuilder prepareStartup(Instant now, String classpath, Stri
outerCommand = new ArrayList<>();
outerCommand.add("bash");
outerCommand.add("-c");
outerCommand.add("tail --pid=" + ProcessHandle.current().pid() + " -f /dev/null && "
+ cmdline.stream().collect(Collectors.joining(" ")));
outerCommand.add("(waitpid -e " + ProcessHandle.current().pid() + " || sleep 1) && '"
+ cmdline.stream().collect(Collectors.joining("' '")) + "'");
}

final ProcessBuilder builder = new ProcessBuilder(outerCommand);
Expand Down

0 comments on commit 0f23409

Please sign in to comment.