Search in sources :

Example 1 with StreamBuildListener

use of hudson.model.StreamBuildListener in project workflow-job-plugin by jenkinsci.

the class WorkflowRun method onLoad.

@Override
protected void onLoad() {
    super.onLoad();
    if (completed != null) {
        throw new IllegalStateException("double onLoad of " + this);
    }
    FlowExecution fetchedExecution = execution;
    if (fetchedExecution != null) {
        try {
            if (getParent().isResumeBlocked() && execution instanceof BlockableResume) {
                ((BlockableResume) execution).setResumeBlocked(true);
            }
            fetchedExecution.onLoad(new Owner(this));
        } catch (Exception x) {
            LOGGER.log(Level.WARNING, null, x);
            // probably too broken to use
            execution = null;
        }
    }
    fetchedExecution = execution;
    if (fetchedExecution != null) {
        fetchedExecution.addListener(new GraphL());
        executionPromise.set(fetchedExecution);
        if (!fetchedExecution.isComplete()) {
            // we've been restarted while we were running. let's get the execution going again.
            FlowExecutionListener.fireResumed(fetchedExecution);
            try {
                OutputStream logger = new FileOutputStream(getLogFile(), true);
                listener = new StreamBuildListener(logger, Charset.defaultCharset());
                listener.getLogger().println("Resuming build at " + new Date() + " after Jenkins restart");
            } catch (IOException x) {
                LOGGER.log(Level.WARNING, null, x);
                listener = new StreamBuildListener(new NullStream());
            }
            completed = new AtomicBoolean();
            Timer.get().submit(new // JENKINS-31614
            Runnable() {

                @Override
                public void run() {
                    Queue.getInstance().schedule(new AfterRestartTask(WorkflowRun.this), 0);
                }
            });
        }
    }
    // only for diagnostics
    checkouts(null);
    synchronized (LOADING_RUNS) {
        // or could just make the value type be WeakReference<WorkflowRun>
        LOADING_RUNS.remove(key());
        LOADING_RUNS.notifyAll();
    }
}
Also used : FlowExecutionOwner(org.jenkinsci.plugins.workflow.flow.FlowExecutionOwner) NullStream(hudson.util.NullStream) LineTransformationOutputStream(hudson.console.LineTransformationOutputStream) FileOutputStream(java.io.FileOutputStream) OutputStream(java.io.OutputStream) IOException(java.io.IOException) StreamBuildListener(hudson.model.StreamBuildListener) AbortException(hudson.AbortException) IOException(java.io.IOException) FlowInterruptedException(org.jenkinsci.plugins.workflow.steps.FlowInterruptedException) Date(java.util.Date) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) FlowExecution(org.jenkinsci.plugins.workflow.flow.FlowExecution) FileOutputStream(java.io.FileOutputStream) BlockableResume(org.jenkinsci.plugins.workflow.flow.BlockableResume)

Example 2 with StreamBuildListener

use of hudson.model.StreamBuildListener in project workflow-job-plugin by jenkinsci.

the class WorkflowRun method run.

/**
 * Actually executes the workflow.
 */
@Override
public void run() {
    if (!firstTime) {
        throw sleep();
    }
    try {
        onStartBuilding();
        OutputStream logger = new FileOutputStream(getLogFile());
        listener = new StreamBuildListener(logger, Charset.defaultCharset());
        listener.started(getCauses());
        Authentication auth = Jenkins.getAuthentication();
        if (!auth.equals(ACL.SYSTEM)) {
            String name = auth.getName();
            if (!auth.equals(Jenkins.ANONYMOUS)) {
                name = ModelHyperlinkNote.encodeTo(User.get(name));
            }
            listener.getLogger().println(hudson.model.Messages.Run_running_as_(name));
        }
        RunListener.fireStarted(this, listener);
        updateSymlinks(listener);
        FlowDefinition definition = getParent().getDefinition();
        if (definition == null) {
            throw new AbortException("No flow definition, cannot run");
        }
        Owner owner = new Owner(this);
        FlowExecution newExecution = definition.create(owner, listener, getAllActions());
        boolean loggedHintOverride = false;
        if (getParent().isResumeBlocked()) {
            if (newExecution instanceof BlockableResume) {
                ((BlockableResume) newExecution).setResumeBlocked(true);
                listener.getLogger().println("Resume disabled by user, switching to high-performance, low-durability mode.");
                loggedHintOverride = true;
            }
        }
        if (!loggedHintOverride) {
            // Avoid double-logging
            listener.getLogger().println("Running in Durability level: " + DurabilityHintProvider.suggestedFor(this.project));
        }
        FlowExecutionList.get().register(owner);
        newExecution.addListener(new GraphL());
        completed = new AtomicBoolean();
        logsToCopy = new ConcurrentSkipListMap<>();
        execution = newExecution;
        newExecution.start();
        executionPromise.set(newExecution);
        FlowExecutionListener.fireRunning(execution);
    } catch (Throwable x) {
        // ensures isInProgress returns false
        execution = null;
        finish(Result.FAILURE, x);
        try {
            executionPromise.setException(x);
        } catch (Error e) {
            if (e != x) {
                // cf. CpsThread.runNextChunk
                throw e;
            }
        }
        return;
    }
    throw sleep();
}
Also used : FlowExecutionOwner(org.jenkinsci.plugins.workflow.flow.FlowExecutionOwner) LineTransformationOutputStream(hudson.console.LineTransformationOutputStream) FileOutputStream(java.io.FileOutputStream) OutputStream(java.io.OutputStream) StreamBuildListener(hudson.model.StreamBuildListener) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Authentication(org.acegisecurity.Authentication) FileOutputStream(java.io.FileOutputStream) FlowExecution(org.jenkinsci.plugins.workflow.flow.FlowExecution) FlowDefinition(org.jenkinsci.plugins.workflow.flow.FlowDefinition) BlockableResume(org.jenkinsci.plugins.workflow.flow.BlockableResume) AbortException(hudson.AbortException)

Example 3 with StreamBuildListener

use of hudson.model.StreamBuildListener in project workflow-job-plugin by jenkinsci.

the class WorkflowRun method sleep.

private AsynchronousExecution sleep() {
    final AsynchronousExecution asynchronousExecution = new AsynchronousExecution() {

        @Override
        public void interrupt(boolean forShutdown) {
            if (forShutdown) {
                return;
            }
            Timer.get().submit(new Runnable() {

                @Override
                public void run() {
                    if (execution == null) {
                        return;
                    }
                    Executor executor = getExecutor();
                    if (executor == null) {
                        LOGGER.log(Level.WARNING, "Lost executor for {0}", WorkflowRun.this);
                        return;
                    }
                    try {
                        Collection<CauseOfInterruption> causes = executor.getCausesOfInterruption();
                        execution.interrupt(executor.abortResult(), causes.toArray(new CauseOfInterruption[causes.size()]));
                    } catch (Exception x) {
                        LOGGER.log(Level.WARNING, null, x);
                    }
                    executor.recordCauseOfInterruption(WorkflowRun.this, listener);
                    printLater(StopState.TERM, "Click here to forcibly terminate running steps");
                }
            });
        }

        @Override
        public boolean blocksRestart() {
            return execution != null && execution.blocksRestart();
        }

        @Override
        public boolean displayCell() {
            return blocksRestart();
        }
    };
    final AtomicReference<ScheduledFuture<?>> copyLogsTask = new AtomicReference<>();
    copyLogsTask.set(copyLogsExecutorService().scheduleAtFixedRate(new Runnable() {

        @Override
        public void run() {
            synchronized (completed) {
                if (completed.get()) {
                    asynchronousExecution.completed(null);
                    copyLogsTask.get().cancel(false);
                    return;
                }
                Jenkins jenkins = Jenkins.getInstance();
                if (jenkins == null || jenkins.isTerminating()) {
                    LOGGER.log(Level.FINE, "shutting down, breaking waitForCompletion on {0}", this);
                    // Stop writing content, in case a new set of objects gets loaded after in-VM restart and starts writing to the same file:
                    listener.closeQuietly();
                    listener = new StreamBuildListener(new NullStream());
                    return;
                }
                try (WithThreadName naming = new WithThreadName(" (" + WorkflowRun.this + ")")) {
                    copyLogs();
                }
            }
        }
    }, 1, 1, TimeUnit.SECONDS));
    return asynchronousExecution;
}
Also used : AsynchronousExecution(jenkins.model.queue.AsynchronousExecution) NullStream(hudson.util.NullStream) WithThreadName(org.jenkinsci.plugins.workflow.support.concurrent.WithThreadName) AtomicReference(java.util.concurrent.atomic.AtomicReference) StreamBuildListener(hudson.model.StreamBuildListener) AbortException(hudson.AbortException) IOException(java.io.IOException) FlowInterruptedException(org.jenkinsci.plugins.workflow.steps.FlowInterruptedException) ScheduledFuture(java.util.concurrent.ScheduledFuture) Jenkins(jenkins.model.Jenkins) Executor(hudson.model.Executor) ScheduledThreadPoolExecutor(java.util.concurrent.ScheduledThreadPoolExecutor) Collection(java.util.Collection)

Aggregations

AbortException (hudson.AbortException)3 StreamBuildListener (hudson.model.StreamBuildListener)3 LineTransformationOutputStream (hudson.console.LineTransformationOutputStream)2 NullStream (hudson.util.NullStream)2 FileOutputStream (java.io.FileOutputStream)2 IOException (java.io.IOException)2 OutputStream (java.io.OutputStream)2 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)2 BlockableResume (org.jenkinsci.plugins.workflow.flow.BlockableResume)2 FlowExecution (org.jenkinsci.plugins.workflow.flow.FlowExecution)2 FlowExecutionOwner (org.jenkinsci.plugins.workflow.flow.FlowExecutionOwner)2 FlowInterruptedException (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException)2 Executor (hudson.model.Executor)1 Collection (java.util.Collection)1 Date (java.util.Date)1 ScheduledFuture (java.util.concurrent.ScheduledFuture)1 ScheduledThreadPoolExecutor (java.util.concurrent.ScheduledThreadPoolExecutor)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1 Jenkins (jenkins.model.Jenkins)1 AsynchronousExecution (jenkins.model.queue.AsynchronousExecution)1