You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2014/11/17 13:37:30 UTC

svn commit: r1640151 - /jackrabbit/oak/trunk/oak-run/src/main/js/oak-mongo.js

Author: mreutegg
Date: Mon Nov 17 12:37:30 2014
New Revision: 1640151

URL: http://svn.apache.org/r1640151
Log:
OAK-1990: Utility js methods to manage Oak data in Mongo

Add methods to manage checkpoints in MongoDB

Modified:
    jackrabbit/oak/trunk/oak-run/src/main/js/oak-mongo.js

Modified: jackrabbit/oak/trunk/oak-run/src/main/js/oak-mongo.js
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/js/oak-mongo.js?rev=1640151&r1=1640150&r2=1640151&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/js/oak-mongo.js (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/js/oak-mongo.js Mon Nov 17 12:37:30 2014
@@ -188,6 +188,55 @@ var oak = (function(global){
         return {nRemoved : count};
     }
 
+    /**
+     * List all checkpoints.
+     */
+    api.listCheckpoints = function() {
+        var result = {};
+        var doc = db.settings.findOne({_id:"checkpoint"});
+        if (doc == null) {
+            print("No checkpoint document found.");
+            return;
+        }
+        var data = doc.data;
+        var r;
+        for (r in data) {
+            var rev = new Revision(r);
+            var exp = data[r];
+            result[r] = {created:rev.asDate(), expires:new Date(parseInt(exp, 10))};
+        }
+        return result;
+    }
+
+    /**
+     * Removes all checkpoints older than a given Revision.
+     */
+    api.removeCheckpointsOlderThan = function(rev) {
+        if (rev === undefined) {
+            print("No revision specified");
+            return;
+        }
+        var r = new Revision(rev);
+        var unset = {};
+        var cps = api.listCheckpoints();
+        var x;
+        var num = 0;
+        for (x in cps) {
+            if (r.isNewerThan(new Revision(x))) {
+                unset["data." + x] = "";
+                num++;
+            }
+        }
+        if (num > 0) {
+            var update = {};
+            update["$inc"] = {_modCount: 1};
+            update["$unset"] = unset;
+            return db.settings.update({_id:"checkpoint"}, update);
+        } else {
+            print("No checkpoint older than " + rev);
+        }
+    }
+
     //~--------------------------------------------------< internal >
 
     var checkOrFixLastRevs = function(path, clusterId, dryRun) {
@@ -260,7 +309,11 @@ var oak = (function(global){
     }
 
     Revision.prototype.toReadableString = function () {
-        return this.rev + " (" + new Date(this.timestamp).toString() + ")"
+        return this.rev + " (" + this.asDate().toString() + ")"
+    }
+
+    Revision.prototype.asDate = function() {
+        return new Date(this.timestamp);
     }
 
     var pathDepth = function(path){