Search in sources :

Example 51 with IndyWorkflowException

use of org.commonjava.indy.IndyWorkflowException in project indy by Commonjava.

the class PromoteResource method rollbackPaths.

@ApiOperation("Rollback promotion of any completed paths to a source repository from a target repository/group.")
@ApiResponse(code = 200, message = "Promotion operation finished (consult response content for success/failure).", response = PathsPromoteResult.class)
@ApiImplicitParam(name = "body", paramType = "body", value = "JSON result from previous attempt, specifying source and target, with other configuration options", allowMultiple = false, required = true, dataType = "org.commonjava.indy.promote.model.PathsPromoteResult")
@Path("/paths/rollback")
@POST
@Consumes(ApplicationContent.application_json)
public Response rollbackPaths(@Context final HttpServletRequest request, @Context final UriInfo uriInfo) {
    PathsPromoteResult result = null;
    Response response = null;
    try {
        result = mapper.readValue(request.getInputStream(), PathsPromoteResult.class);
    } catch (final IOException e) {
        response = formatResponse(e, "Failed to read DTO from request body.");
    }
    if (response != null) {
        return response;
    }
    try {
        result = manager.rollbackPathsPromote(result);
        // TODO: Amend response status code based on presence of error? This would have consequences for client API...
        response = formatOkResponseWithJsonEntity(result, mapper);
    } catch (PromotionException | IndyWorkflowException e) {
        logger.error(e.getMessage(), e);
        response = formatResponse(e);
    }
    return response;
}
Also used : ResponseUtils.formatResponse(org.commonjava.indy.bind.jaxrs.util.ResponseUtils.formatResponse) Response(javax.ws.rs.core.Response) ApiResponse(io.swagger.annotations.ApiResponse) PathsPromoteResult(org.commonjava.indy.promote.model.PathsPromoteResult) IndyWorkflowException(org.commonjava.indy.IndyWorkflowException) IOException(java.io.IOException) PromotionException(org.commonjava.indy.promote.data.PromotionException) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes) ApiOperation(io.swagger.annotations.ApiOperation) ApiImplicitParam(io.swagger.annotations.ApiImplicitParam) ApiResponse(io.swagger.annotations.ApiResponse)

Example 52 with IndyWorkflowException

use of org.commonjava.indy.IndyWorkflowException in project indy by Commonjava.

the class KojiBuildAuthority method checksumArtifact.

private String checksumArtifact(ArtifactStore store, String path, EventMetadata eventMetadata) {
    final Logger logger = LoggerFactory.getLogger(getClass());
    try {
        if (directContentAccess.exists(store, path)) {
            String md5Path = path + ".md5";
            Transfer md5 = directContentAccess.retrieveRaw(store, md5Path, eventMetadata);
            if (md5 != null && md5.exists()) {
                try (InputStream in = md5.openInputStream(true)) {
                    return IOUtils.toString(in).trim();
                } catch (IOException e) {
                    logger.warn("Error reading MD5 checksum for transfer of path {} in store {}, error is {}", md5Path, store, e.getMessage());
                }
            } else {
                EventMetadata forcedEventMetadata = new EventMetadata(eventMetadata).set(FORCE_CHECKSUM, TRUE);
                final TransferMetadata artifactData = contentDigester.digest(store.getKey(), path, forcedEventMetadata);
                if (artifactData != null) {
                    return artifactData.getDigests().get(ContentDigest.MD5);
                }
            }
        }
    } catch (IndyWorkflowException e) {
        logger.warn("Error happened when calculate md5 checksum for transfer of path {} in store {}, error is {}", path, store, e.getMessage());
    }
    return null;
}
Also used : TransferMetadata(org.commonjava.maven.galley.io.checksum.TransferMetadata) InputStream(java.io.InputStream) IndyWorkflowException(org.commonjava.indy.IndyWorkflowException) Transfer(org.commonjava.maven.galley.model.Transfer) IOException(java.io.IOException) Logger(org.slf4j.Logger) EventMetadata(org.commonjava.maven.galley.event.EventMetadata)

Example 53 with IndyWorkflowException

use of org.commonjava.indy.IndyWorkflowException in project indy by Commonjava.

the class ProxyResponseWriter method transfer.

private void transfer(final HttpConduitWrapper http, final RemoteRepository repo, final String path, final boolean writeBody, final UserPass proxyUserPass) throws IOException, IndyWorkflowException {
    if (transferred) {
        return;
    }
    transferred = true;
    if (!http.isOpen()) {
        throw new IOException("Sink channel already closed (or null)!");
    }
    final EventMetadata eventMetadata = createEventMetadata(writeBody, proxyUserPass, path, repo);
    Transfer txfr = null;
    try {
        txfr = contentController.get(repo.getKey(), path, eventMetadata);
    } catch (final IndyWorkflowException e) {
        // block TransferException to allow handling below.
        if (!(e.getCause() instanceof TransferException)) {
            throw e;
        }
        logger.debug("Suppressed exception for further handling inside proxy logic:", e);
    }
    if (txfr != null && txfr.exists()) {
        http.writeExistingTransfer(txfr, writeBody, path, eventMetadata);
    } else {
        http.writeNotFoundTransfer(repo, path);
    }
}
Also used : TransferException(org.commonjava.maven.galley.TransferException) IndyWorkflowException(org.commonjava.indy.IndyWorkflowException) Transfer(org.commonjava.maven.galley.model.Transfer) IOException(java.io.IOException) EventMetadata(org.commonjava.maven.galley.event.EventMetadata)

Example 54 with IndyWorkflowException

use of org.commonjava.indy.IndyWorkflowException in project indy by Commonjava.

the class ProxyResponseWriter method createEventMetadata.

private EventMetadata createEventMetadata(final boolean writeBody, final UserPass proxyUserPass, final String path, final RemoteRepository repo) throws IndyWorkflowException {
    final EventMetadata eventMetadata = new EventMetadata();
    if (writeBody) {
        TrackingKey tk = null;
        switch(config.getTrackingType()) {
            case ALWAYS:
                {
                    if (proxyUserPass == null) {
                        throw new IndyWorkflowException(ApplicationStatus.BAD_REQUEST.code(), "Tracking is always-on, but no username was provided! Cannot initialize tracking key.");
                    }
                    tk = new TrackingKey(proxyUserPass.getUser());
                    break;
                }
            case SUFFIX:
                {
                    if (proxyUserPass != null) {
                        final String user = proxyUserPass.getUser();
                        // TODO: Will this always be non-null here? Can we have an unsecured proxy?
                        if (user.endsWith(TRACKED_USER_SUFFIX) && user.length() > TRACKED_USER_SUFFIX.length()) {
                            tk = new TrackingKey(StringUtils.substring(user, 0, -TRACKED_USER_SUFFIX.length()));
                        }
                    }
                    break;
                }
            default:
                {
                }
        }
        if (tk != null) {
            logger.debug("TRACKING {} in {} (KEY: {})", path, repo, tk);
            eventMetadata.set(FoloConstants.TRACKING_KEY, tk);
            eventMetadata.set(FoloConstants.ACCESS_CHANNEL, AccessChannel.GENERIC_PROXY);
        } else {
            logger.debug("NOT TRACKING: {} in {}", path, repo);
        }
    } else {
        logger.debug("NOT TRACKING non-body request: {} in {}", path, repo);
    }
    eventMetadata.setPackageType(PKG_TYPE_GENERIC_HTTP);
    return eventMetadata;
}
Also used : IndyWorkflowException(org.commonjava.indy.IndyWorkflowException) EventMetadata(org.commonjava.maven.galley.event.EventMetadata) TrackingKey(org.commonjava.indy.folo.model.TrackingKey)

Example 55 with IndyWorkflowException

use of org.commonjava.indy.IndyWorkflowException in project indy by Commonjava.

the class HttpConduitWrapper method writeExistingTransfer.

public void writeExistingTransfer(Transfer txfr, boolean writeBody, String path, EventMetadata eventMetadata) throws IOException {
    Logger logger = LoggerFactory.getLogger(getClass());
    logger.debug("Valid transfer found.");
    try (InputStream in = txfr.openInputStream(true, eventMetadata)) {
        final HttpExchangeMetadata metadata = contentController.getHttpMetadata(txfr);
        logger.trace("Got HTTP metadata: {} for transfer: {}", metadata, txfr);
        writeStatus(ApplicationStatus.OK);
        Long headerContentLength = metadata != null ? metadata.getContentLength() : null;
        long bytes = metadata != null && headerContentLength != null ? metadata.getContentLength() : txfr.length();
        if (bytes < 1) {
            bytes = txfr.length();
        }
        if (bytes > 0) {
            writeHeader(ApplicationHeader.content_length, String.valueOf(bytes));
        }
        String lastMod = metadata != null ? metadata.getLastModified() : null;
        if (lastMod == null) {
            lastMod = HttpUtils.formatDateHeader(txfr.lastModified());
        }
        if (lastMod != null) {
            writeHeader(ApplicationHeader.last_modified, lastMod);
        }
        writeHeader(ApplicationHeader.content_type, contentController.getContentType(path));
        if (writeBody) {
            sinkChannel.write(ByteBuffer.wrap("\r\n".getBytes()));
            int capacity = 16384;
            ByteBuffer bbuf = ByteBuffer.allocate(capacity);
            byte[] buf = new byte[capacity];
            int read = -1;
            while ((read = in.read(buf)) > -1) {
                bbuf.clear();
                bbuf.put(buf, 0, read);
                bbuf.flip();
                int written = 0;
                do {
                    written += sinkChannel.write(bbuf);
                } while (written < read);
            }
        }
    } catch (IndyWorkflowException e) {
        logger.error(String.format("Failed to retrieve http-metadata.json file for: %s. Reason: %s", txfr, e.getMessage()), e);
    } finally {
        cacheProvider.cleanupCurrentThread();
    }
}
Also used : FileInputStream(java.io.FileInputStream) InputStream(java.io.InputStream) IndyWorkflowException(org.commonjava.indy.IndyWorkflowException) Logger(org.slf4j.Logger) HttpExchangeMetadata(org.commonjava.maven.galley.transport.htcli.model.HttpExchangeMetadata) ByteBuffer(java.nio.ByteBuffer)

Aggregations

IndyWorkflowException (org.commonjava.indy.IndyWorkflowException)109 Response (javax.ws.rs.core.Response)40 Transfer (org.commonjava.maven.galley.model.Transfer)39 IOException (java.io.IOException)36 ResponseUtils.formatResponse (org.commonjava.indy.bind.jaxrs.util.ResponseUtils.formatResponse)36 StoreKey (org.commonjava.indy.model.core.StoreKey)36 ApiOperation (io.swagger.annotations.ApiOperation)35 ArtifactStore (org.commonjava.indy.model.core.ArtifactStore)34 ApiResponse (io.swagger.annotations.ApiResponse)33 Path (javax.ws.rs.Path)32 StoreType (org.commonjava.indy.model.core.StoreType)26 IndyDataException (org.commonjava.indy.data.IndyDataException)25 GET (javax.ws.rs.GET)24 Logger (org.slf4j.Logger)22 ApiResponses (io.swagger.annotations.ApiResponses)21 ArrayList (java.util.ArrayList)19 Produces (javax.ws.rs.Produces)18 EventMetadata (org.commonjava.maven.galley.event.EventMetadata)18 InputStream (java.io.InputStream)15 List (java.util.List)13