Search in sources :

Example 1 with TempFileInput

use of org.apache.manifoldcf.core.interfaces.TempFileInput in project manifoldcf by apache.

the class DocumentChunkManager method recordDocument.

/**
 * Record document information for later trasmission to Amazon.
 * @param uid documentuid
 * @param sdfData document SDF data.
 * @throws ManifoldCFException
 */
public void recordDocument(String uid, String host, String path, String uri, String activity, Long length, InputStream sdfData) throws ManifoldCFException, IOException {
    TempFileInput tfi = null;
    try {
        // This downloads all the data from upstream!
        try {
            tfi = new TempFileInput(sdfData);
        } catch (ManifoldCFException e) {
            if (e.getErrorCode() == ManifoldCFException.INTERRUPTED)
                throw e;
            throw new IOException("Fetch failed: " + e.getMessage());
        }
        while (true) {
            long sleepAmt = 0L;
            try {
                beginTransaction();
                try {
                    ArrayList params = new ArrayList();
                    String query = buildConjunctionClause(params, new ClauseDescription[] { new UnitaryClause(HOST_FIELD, host), new UnitaryClause(PATH_FIELD, path), new UnitaryClause(UID_FIELD, uid) });
                    IResultSet set = performQuery("SELECT " + UID_FIELD + " FROM " + getTableName() + " WHERE " + query + " FOR UPDATE", params, null, null);
                    Map<String, Object> parameterMap = new HashMap<String, Object>();
                    parameterMap.put(SDF_DATA_FIELD, tfi);
                    parameterMap.put(URI_FIELD, uri);
                    parameterMap.put(ACTIVITY_FIELD, activity);
                    if (length != null)
                        parameterMap.put(LENGTH_FIELD, length);
                    // if record exists on table, update record.
                    if (set.getRowCount() > 0) {
                        performUpdate(parameterMap, " WHERE " + query, params, null);
                    } else {
                        parameterMap.put(UID_FIELD, uid);
                        parameterMap.put(HOST_FIELD, host);
                        parameterMap.put(PATH_FIELD, path);
                        performInsert(parameterMap, null);
                    }
                    break;
                } catch (ManifoldCFException e) {
                    signalRollback();
                    throw e;
                } catch (RuntimeException e) {
                    signalRollback();
                    throw e;
                } catch (Error e) {
                    signalRollback();
                    throw e;
                } finally {
                    endTransaction();
                }
            } catch (ManifoldCFException e) {
                // Look for deadlock and retry if so
                if (e.getErrorCode() == e.DATABASE_TRANSACTION_ABORT) {
                    sleepAmt = getSleepAmt();
                    continue;
                }
                throw e;
            }
        }
    } finally {
        if (tfi != null)
            tfi.discard();
    }
}
Also used : TempFileInput(org.apache.manifoldcf.core.interfaces.TempFileInput) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) IOException(java.io.IOException) IResultSet(org.apache.manifoldcf.core.interfaces.IResultSet) UnitaryClause(org.apache.manifoldcf.core.interfaces.UnitaryClause) ManifoldCFException(org.apache.manifoldcf.core.interfaces.ManifoldCFException)

Example 2 with TempFileInput

use of org.apache.manifoldcf.core.interfaces.TempFileInput in project manifoldcf by apache.

the class AmazonCloudSearchConnector method postData.

private String postData(InputStream jsonData) throws ServiceInterruption, ManifoldCFException {
    CloseableHttpClient httpclient = HttpClients.createDefault();
    try {
        BinaryInput bi = new TempFileInput(jsonData);
        try {
            poster.setEntity(new InputStreamEntity(bi.getStream(), bi.getLength()));
            HttpResponse res = httpclient.execute(poster);
            HttpEntity resEntity = res.getEntity();
            return EntityUtils.toString(resEntity);
        } finally {
            bi.discard();
        }
    } catch (ClientProtocolException e) {
        throw new ManifoldCFException(e);
    } catch (IOException e) {
        handleIOException(e);
    } finally {
        try {
            httpclient.close();
        } catch (IOException e) {
        // do nothing
        }
    }
    return null;
}
Also used : TempFileInput(org.apache.manifoldcf.core.interfaces.TempFileInput) CloseableHttpClient(org.apache.http.impl.client.CloseableHttpClient) BinaryInput(org.apache.manifoldcf.core.interfaces.BinaryInput) HttpEntity(org.apache.http.HttpEntity) ManifoldCFException(org.apache.manifoldcf.core.interfaces.ManifoldCFException) HttpResponse(org.apache.http.HttpResponse) InterruptedIOException(java.io.InterruptedIOException) IOException(java.io.IOException) InputStreamEntity(org.apache.http.entity.InputStreamEntity) ClientProtocolException(org.apache.http.client.ClientProtocolException)

Aggregations

IOException (java.io.IOException)2 ManifoldCFException (org.apache.manifoldcf.core.interfaces.ManifoldCFException)2 TempFileInput (org.apache.manifoldcf.core.interfaces.TempFileInput)2 InterruptedIOException (java.io.InterruptedIOException)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 HttpEntity (org.apache.http.HttpEntity)1 HttpResponse (org.apache.http.HttpResponse)1 ClientProtocolException (org.apache.http.client.ClientProtocolException)1 InputStreamEntity (org.apache.http.entity.InputStreamEntity)1 CloseableHttpClient (org.apache.http.impl.client.CloseableHttpClient)1 BinaryInput (org.apache.manifoldcf.core.interfaces.BinaryInput)1 IResultSet (org.apache.manifoldcf.core.interfaces.IResultSet)1 UnitaryClause (org.apache.manifoldcf.core.interfaces.UnitaryClause)1