package org.rrd4j.core;
import java.io.IOException;
import org.rrd4j.core.RrdMongoDBBackendFactory.MongoWrapper;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
/**
* <p>RrdMongoDBBackend class.</p>
*
* @author Mathias Bogaert
*/
public class RrdMongoDBBackend extends RrdByteArrayBackend {
private final MongoWrapper wrapper;
private volatile boolean dirty = false;
/**
* <p>Constructor for RrdMongoDBBackend.</p>
*
* @param path a {@link java.lang.String} object.
* @param wrapper a {@link MongoWrapper} object.
*/
public RrdMongoDBBackend(String path, MongoWrapper wrapper) {
super(path);
this.wrapper = wrapper;
BasicDBObject query = new BasicDBObject("path", path);
DBObject rrdObject = wrapper.get(query);
if (rrdObject != null) {
buffer = (byte[]) rrdObject.get("rrd");
}
}
/**
* <p>write.</p>
*
* @param offset a long.
* @param bytes an array of byte.
* @throws java.io.IOException if any.
*/
protected synchronized void write(long offset, byte[] bytes) throws IOException {
super.write(offset, bytes);
dirty = true;
}
/** {@inheritDoc} */
@Override
public void close() throws IOException {
if (dirty) {
BasicDBObject query = new BasicDBObject("path", getPath());
wrapper.save(query, buffer);
}
}
}