Search in sources :

Example 1 with BSONCallback

use of org.bson.BSONCallback in project mongo-hadoop by mongodb.

the class BSONWritable method readFields.

/**
     * {@inheritDoc}
     *
     * @see Writable#readFields(DataInput)
     */
public void readFields(final DataInput in) throws IOException {
    BSONDecoder dec = new BasicBSONDecoder();
    BSONCallback cb = new BasicBSONCallback();
    // Read the BSON length from the start of the record
    byte[] l = new byte[4];
    try {
        in.readFully(l);
        int dataLen = Bits.readInt(l);
        if (LOG.isDebugEnabled()) {
            LOG.debug("*** Expected DataLen: " + dataLen);
        }
        byte[] data = new byte[dataLen + 4];
        System.arraycopy(l, 0, data, 0, 4);
        in.readFully(data, 4, dataLen - 4);
        dec.decode(data, cb);
        doc = (BSONObject) cb.get();
        if (LOG.isTraceEnabled()) {
            LOG.trace("Decoded a BSON Object: " + doc);
        }
    } catch (Exception e) {
        /* If we can't read another length it's not an error, just return quietly. */
        // TODO - Figure out how to gracefully mark this as an empty
        LOG.info("No Length Header available." + e);
        doc = new BasicDBObject();
    }
}
Also used : BasicDBObject(com.mongodb.BasicDBObject) BasicBSONCallback(org.bson.BasicBSONCallback) BasicBSONDecoder(org.bson.BasicBSONDecoder) BSONDecoder(org.bson.BSONDecoder) BSONCallback(org.bson.BSONCallback) BasicBSONCallback(org.bson.BasicBSONCallback) BasicBSONDecoder(org.bson.BasicBSONDecoder) IOException(java.io.IOException)

Example 2 with BSONCallback

use of org.bson.BSONCallback in project camel by apache.

the class MongoDbBasicConverters method fromInputStreamToDBObject.

@Converter
public static BasicDBObject fromInputStreamToDBObject(InputStream is, Exchange exchange) {
    BasicDBObject answer = null;
    try {
        byte[] input = IOConverter.toBytes(is);
        if (isBson(input)) {
            BSONCallback callback = new JSONCallback();
            new BasicBSONDecoder().decode(input, callback);
            answer = (BasicDBObject) callback.get();
        } else {
            answer = (BasicDBObject) JSON.parse(IOConverter.toString(input, exchange));
        }
    } catch (Exception e) {
        LOG.warn("String -> DBObject conversion selected, but the following exception occurred. Returning null.", e);
    } finally {
        // we need to make sure to close the input stream
        IOHelper.close(is, "InputStream", LOG);
    }
    return answer;
}
Also used : BasicDBObject(com.mongodb.BasicDBObject) JSONCallback(com.mongodb.util.JSONCallback) BSONCallback(org.bson.BSONCallback) BasicBSONDecoder(org.bson.BasicBSONDecoder) FileNotFoundException(java.io.FileNotFoundException) Converter(org.apache.camel.Converter) IOConverter(org.apache.camel.converter.IOConverter)

Example 3 with BSONCallback

use of org.bson.BSONCallback in project mongo-hadoop by mongodb.

the class BSONSplitterTest method testReadSplitsForFile.

@Test
public void testReadSplitsForFile() throws IOException {
    Configuration readSplitsConfig = new Configuration(conf);
    SPLITTER.setConf(readSplitsConfig);
    // Only one split if reading splits is disabled.
    MongoConfigUtil.setBSONReadSplits(readSplitsConfig, false);
    SPLITTER.readSplitsForFile(file);
    List<BSONFileSplit> splitsList = SPLITTER.getAllSplits();
    assertEquals(1, splitsList.size());
    BSONFileSplit theSplit = splitsList.get(0);
    assertOneSplit(theSplit);
    // Actually compute splits.
    MongoConfigUtil.setBSONReadSplits(readSplitsConfig, true);
    // Set split size to be really small so we get a lot of them.
    readSplitsConfig.set("mapreduce.input.fileinputformat.split.maxsize", "5000");
    SPLITTER.readSplitsForFile(file);
    splitsList = SPLITTER.getAllSplits();
    // Value found through manual inspection.
    assertEquals(40, splitsList.size());
    // Make sure that all splits start on document boundaries.
    FSDataInputStream stream = fs.open(file.getPath());
    BSONDecoder decoder = new BasicBSONDecoder();
    BSONCallback callback = new BasicBSONCallback();
    for (BSONFileSplit split : splitsList) {
        stream.seek(split.getStart());
        decoder.decode(stream, callback);
        BSONObject doc = (BSONObject) callback.get();
        assertTrue(doc.containsField("_id"));
    }
}
Also used : BasicBSONCallback(org.bson.BasicBSONCallback) BasicBSONDecoder(org.bson.BasicBSONDecoder) BSONDecoder(org.bson.BSONDecoder) Configuration(org.apache.hadoop.conf.Configuration) BSONFileSplit(com.mongodb.hadoop.input.BSONFileSplit) BasicBSONObject(org.bson.BasicBSONObject) BSONObject(org.bson.BSONObject) FSDataInputStream(org.apache.hadoop.fs.FSDataInputStream) BSONCallback(org.bson.BSONCallback) BasicBSONCallback(org.bson.BasicBSONCallback) BasicBSONDecoder(org.bson.BasicBSONDecoder) Test(org.junit.Test)

Example 4 with BSONCallback

use of org.bson.BSONCallback in project mongo-hadoop by mongodb.

the class MongoInputSplit method readFields.

@Override
public void readFields(final DataInput in) throws IOException {
    BSONCallback cb = new BasicBSONCallback();
    BSONObject spec;
    byte[] l = new byte[4];
    in.readFully(l);
    int dataLen = org.bson.io.Bits.readInt(l);
    byte[] data = new byte[dataLen + 4];
    System.arraycopy(l, 0, data, 0, 4);
    in.readFully(data, 4, dataLen - 4);
    _bsonDecoder.decode(data, cb);
    spec = (BSONObject) cb.get();
    setInputURI(new MongoClientURI((String) spec.get("inputURI")));
    if (spec.get("authURI") != null) {
        setAuthURI(new MongoClientURI((String) spec.get("authURI")));
    } else {
        setAuthURI((MongoClientURI) null);
    }
    setKeyField((String) spec.get("keyField"));
    BSONObject temp = (BSONObject) spec.get("fields");
    setFields(temp != null ? new BasicDBObject(temp.toMap()) : null);
    temp = (BSONObject) spec.get("query");
    setQuery(temp != null ? new BasicDBObject(temp.toMap()) : null);
    temp = (BSONObject) spec.get("sort");
    setSort(temp != null ? new BasicDBObject(temp.toMap()) : null);
    temp = (BSONObject) spec.get("min");
    setMin(temp != null ? new BasicDBObject(temp.toMap()) : null);
    temp = (BSONObject) spec.get("max");
    setMax(temp != null ? new BasicDBObject(temp.toMap()) : null);
    setLimit((Integer) spec.get("limit"));
    setSkip((Integer) spec.get("skip"));
    setNoTimeout((Boolean) spec.get("notimeout"));
}
Also used : BasicDBObject(com.mongodb.BasicDBObject) BasicBSONCallback(org.bson.BasicBSONCallback) MongoClientURI(com.mongodb.MongoClientURI) BSONObject(org.bson.BSONObject) BSONCallback(org.bson.BSONCallback) BasicBSONCallback(org.bson.BasicBSONCallback)

Example 5 with BSONCallback

use of org.bson.BSONCallback in project mongo-hadoop by mongodb.

the class MongoUpdateWritable method readFields.

/**
     * {@inheritDoc}
     *
     * @see Writable#readFields(DataInput)
     */
public void readFields(final DataInput in) throws IOException {
    BSONDecoder dec = new BasicBSONDecoder();
    BSONCallback cb = new BasicBSONCallback();
    // Read the BSON length from the start of the record
    byte[] l = new byte[4];
    try {
        in.readFully(l);
        int dataLen = Bits.readInt(l);
        byte[] data = new byte[dataLen + 4];
        System.arraycopy(l, 0, data, 0, 4);
        in.readFully(data, 4, dataLen - 4);
        dec.decode(data, cb);
        query = (BasicBSONObject) cb.get();
        in.readFully(l);
        dataLen = Bits.readInt(l);
        data = new byte[dataLen + 4];
        System.arraycopy(l, 0, data, 0, 4);
        in.readFully(data, 4, dataLen - 4);
        dec.decode(data, cb);
        modifiers = (BasicBSONObject) cb.get();
        upsert = in.readBoolean();
        multiUpdate = in.readBoolean();
        replace = in.readBoolean();
    } catch (Exception e) {
        /* If we can't read another length it's not an error, just return quietly. */
        // TODO - Figure out how to gracefully mark this as an empty
        LOG.info("No Length Header available." + e);
        query = new BasicDBObject();
        modifiers = new BasicDBObject();
    }
}
Also used : BasicDBObject(com.mongodb.BasicDBObject) BasicBSONCallback(org.bson.BasicBSONCallback) BasicBSONDecoder(org.bson.BasicBSONDecoder) BSONDecoder(org.bson.BSONDecoder) BSONCallback(org.bson.BSONCallback) BasicBSONCallback(org.bson.BasicBSONCallback) BasicBSONDecoder(org.bson.BasicBSONDecoder) IOException(java.io.IOException)

Aggregations

BSONCallback (org.bson.BSONCallback)5 BasicDBObject (com.mongodb.BasicDBObject)4 BasicBSONCallback (org.bson.BasicBSONCallback)4 BasicBSONDecoder (org.bson.BasicBSONDecoder)4 BSONDecoder (org.bson.BSONDecoder)3 IOException (java.io.IOException)2 BSONObject (org.bson.BSONObject)2 MongoClientURI (com.mongodb.MongoClientURI)1 BSONFileSplit (com.mongodb.hadoop.input.BSONFileSplit)1 JSONCallback (com.mongodb.util.JSONCallback)1 FileNotFoundException (java.io.FileNotFoundException)1 Converter (org.apache.camel.Converter)1 IOConverter (org.apache.camel.converter.IOConverter)1 Configuration (org.apache.hadoop.conf.Configuration)1 FSDataInputStream (org.apache.hadoop.fs.FSDataInputStream)1 BasicBSONObject (org.bson.BasicBSONObject)1 Test (org.junit.Test)1