@Override public boolean insert(DatabaseDocument<MongoType> d, List<DocumentFile<MongoType>> attachments) { if(attachments == null || attachments.isEmpty()) { return insert(d); } d.putMetadataField(MongoDocument.COMMITTING_METADATA_FLAG, true); if (!insert(d)) { return false; }; if (!writeAttachments(d, attachments)) { delete(d); return false; } d.putMetadataField(MongoDocument.COMMITTING_METADATA_FLAG, false); return update(d); }
public void deleteAllFiles(DatabaseDocument<MongoType> d) { for(String fileName : getDocumentFileNames(d)) { deleteDocumentFile(d, fileName); } }
@Override public List<DatabaseDocument<MongoType>> getAndTag(DatabaseQuery<MongoType> query, int n, String ... tag) { ArrayList<DatabaseDocument<MongoType>> list = new ArrayList<DatabaseDocument<MongoType>>(); for(int i=0; i<n; i++) { MongoDocument d = getAndTag(query, tag); if(d==null) { break; } list.add(d); } return list; }
public static void main(String[] args) throws IOException, JsonException { MongoClient mongo = new MongoClient(new MongoClientURI(conf.getDatabaseUrl())); DB db = mongo.getDB(conf.getNamespace()); WriteConcern concern = mongo.getWriteConcern(); long documentsToKeep = conf.getOldMaxCount(); int oldDocsMaxSizeMB = conf.getOldMaxSize(); StatusUpdater updater = new StatusUpdater(new MongoConnector(conf)); GridFS documentFs = new GridFS(db); MongoDocumentIO io = new MongoDocumentIO(db, concern, documentsToKeep, oldDocsMaxSizeMB, updater, documentFs); io.prepare(); MongoDocument document = new MongoDocument(args[args.length-1]); io.insert(document); System.out.println("Added document"); }
pipelineStatus.setDiscardedToKeep(conf.getOldMaxCount()); documentIO = new MongoDocumentIO(db, concern, pipelineStatus.getNumberToKeep(), pipelineStatus.getDiscardedMaxSize(), statusUpdater, new GridFS(db, MongoDocumentIO.DOCUMENT_FS)); documentIO.prepare(); pipelineWriter.prepare(); documentIO = new MongoDocumentIO(db, concern, pipelineStatus.getNumberToKeep(), pipelineStatus.getDiscardedMaxSize(), statusUpdater, new GridFS(db,
@Override public MongoDocument getAndTag(DatabaseQuery<MongoType> query, String ... tag) { for(String t : tag) { ensureIndex(t); } MongoQuery mq = (MongoQuery)query; mq.requireMetadataFieldNotExists(Document.PENDING_METADATA_FLAG); /* The document must be fully committed (i.e. all attachments are committed) before we can fetch it * Using not equals to true here (instead of "equals false"), to allow for documents where committing * isn't set at all. */ mq.requireMetadataFieldNotEquals(Document.COMMITTING_METADATA_FLAG, true); for(String t : tag) { mq.requireMetadataFieldNotExists(DatabaseDocument.FETCHED_METADATA_TAG+"."+t); } DBObject update = new BasicDBObject(); for(String t : tag) { update.put(MongoDocument.METADATA_KEY+"."+DatabaseDocument.FETCHED_METADATA_TAG+"."+t, new Date()); } DBObject dbo = getUpdateObject(update); return findAndModify(mq.toDBObject(), dbo); }
private boolean markDone(final DatabaseDocument<MongoType> d, String stage, String stamp) { MongoQuery mq = new MongoQuery(); mq.requireID(d.getID()); DBObject doc = documents.findAndRemove(mq.toDBObject()); if(doc==null) { return false; } doc.putAll(((MongoDocument)d).toMap()); stampMetadataField(doc, stamp, stage); deleteAllFiles(d); return writeToOldDocuments(d, stage, doc); }
@Override public void prepare() { capIfNew(documents.getDB(), oldDocsSize, maxDocumentsToKeep); oldDocuments = documents.getDB().getCollection(OLD_DOCUMENT_COLLECTION); oldDocuments.setObjectClass(MongoDocument.class); }