@@ -556,6 +556,55 @@ protected PoolOutputBuffer createNew(){
556
556
557
557
};
558
558
559
+ /**
560
+ * Forces the master server to fsync the RAM data to disk
561
+ * This is done automatically by the server at intervals, but can be forced for better reliability.
562
+ * @param async if true, the fsync will be done asynchronously on the server.
563
+ * @return
564
+ */
565
+ public CommandResult fsync (boolean async ) {
566
+ DBObject cmd = new BasicDBObject ("fsync" , 1 );
567
+ if (async ) {
568
+ cmd .put ("async" , 1 );
569
+ }
570
+ return getDB ("admin" ).command (cmd );
571
+ }
572
+
573
+ /**
574
+ * Forces the master server to fsync the RAM data to disk, then lock all writes.
575
+ * The database will be read-only after this command returns.
576
+ * @return
577
+ */
578
+ public CommandResult fsyncAndLock () {
579
+ DBObject cmd = new BasicDBObject ("fsync" , 1 );
580
+ cmd .put ("lock" , 1 );
581
+ return getDB ("admin" ).command (cmd );
582
+ }
583
+
584
+ /**
585
+ * Unlocks the database, allowing the write operations to go through.
586
+ * This command may be asynchronous on the server, which means there may be a small delay before the database becomes writable.
587
+ * @return
588
+ */
589
+ public DBObject unlock () {
590
+ DB db = getDB ("admin" );
591
+ DBCollection col = db .getCollection ("$cmd.sys.unlock" );
592
+ return col .findOne ();
593
+ }
594
+
595
+ /**
596
+ * Returns true if the database is locked (read-only), false otherwise.
597
+ * @return
598
+ */
599
+ public boolean isLocked () {
600
+ DB db = getDB ("admin" );
601
+ DBCollection col = db .getCollection ("$cmd.sys.inprog" );
602
+ BasicDBObject res = (BasicDBObject ) col .findOne ();
603
+ if (res .containsField ("fsyncLock" )) {
604
+ return res .getInt ("fsyncLock" ) == 1 ;
605
+ }
606
+ return false ;
607
+ }
559
608
560
609
// -------
561
610
0 commit comments