Package com.mozilla.grouperfish.batch.handlers

Source Code of com.mozilla.grouperfish.batch.handlers.RunHandler

package com.mozilla.grouperfish.batch.handlers;

import java.io.IOException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mozilla.grouperfish.base.Assert;
import com.mozilla.grouperfish.base.StreamTool;
import com.mozilla.grouperfish.batch.scheduling.Helpers;
import com.mozilla.grouperfish.batch.transforms.Transform;
import com.mozilla.grouperfish.batch.transforms.Transform.TransformResult;
import com.mozilla.grouperfish.batch.transforms.TransformProvider;
import com.mozilla.grouperfish.model.Fail;
import com.mozilla.grouperfish.model.Task;
import com.mozilla.grouperfish.model.TransformConfig;
import com.mozilla.grouperfish.services.api.FileSystem;
import com.mozilla.grouperfish.services.api.FileSystem.Denied;
import com.mozilla.grouperfish.services.api.FileSystem.NotFound;


/** Perform the actual running of the transform. */
public class RunHandler implements TaskHandler {

    private static final Logger log = LoggerFactory.getLogger(RunHandler.class);

    private final FileSystem fs;
    private final TransformProvider transforms;

    public RunHandler(final FileSystem fs, final TransformProvider transforms) {
        this.fs = fs;
        this.transforms = transforms;
    }

    @Override
    public Task handle(final Task task) throws Fail {
        final String inputDirectory;
        try {
            inputDirectory = fs.uri(Helpers.taskDirectory(task));
        }
        catch (final NotFound e) {
            throw Fail.hard(task, "Task input not found...", e);
        }

        try {
            fs.makeDirectory(Helpers.outputDirectory(task));
        } catch (final Denied e) {
            throw Fail.hard(task, "Cannot create output directory.", e);
        }

        final TransformConfig config = task.transform();
        final Transform transform = transforms.get(config.transform());
        Assert.nonNull(transform);
        log.info(String.format("Launching transform '%s' with input directory '%s'", transform, inputDirectory));

        try {
            final TransformResult result = transform.run(task);
            if (result.success()) {
                log.info("Transform {} for task {} was run successfully.", transform, task);
            }
            else {
                final String message = String.format("Failed to run transform: %s (task %s)", transform, task);
                log.warn(message);
                log.warn("STDERR: {}", StreamTool.consume(result.stderr(), StreamTool.UTF8));
                throw Fail.hard(task, message, null);
            }
        }
        catch (final InterruptedException e) {
            throw Fail.soft(task, "Interrupted during run.", e);
        }
        catch (final IOException e) {
            throw Fail.hard(task, "Received IO error reading from task STDERR", e);
        }

        return task;
    }

}
TOP

Related Classes of com.mozilla.grouperfish.batch.handlers.RunHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.