function runSetup () {
  "use strict";
  internal.debugClearFailAt();
  
  db._drop("UnitTestsRecovery");
  db._create("UnitTestsRecovery");

  db._executeTransaction({
    collections: {
      write: "UnitTestsRecovery"
    },
    action: function () {
      var db = require("org/arangodb").db;

      var i, c = db._collection("UnitTestsRecovery");
      for (i = 0; i < 100000; ++i) {
        c.save({ _key: "test" + i, value1: "test" + i, value2: i }, true); // wait for sync
      }
      for (i = 0; i < 100000; i += 2) {
        c.remove("test" + i, true);
      }
    }
  });

  internal.debugSegfault("crashing server");
}
Пример #2
0
    testEdges : function () {
      var v, e, doc, i;
      
      v = db._collection("UnitTestsVertices");  
      assertEqual(1000, v.count());
      for (i = 0; i < 1000; ++i) {
        assertEqual("some-name" + i, v.document("node" + i).name);
      }
      
      e = db._collection("UnitTestsEdges");  
      for (i = 0; i < 1000; ++i) {
        doc = e.document("edge" + i);
        assertEqual("some-value" + i, doc.what);
        assertEqual("UnitTestsVertices/node" + i, doc._from);
        assertEqual("UnitTestsVertices/node" + (i % 10), doc._to);
      }

      for (i = 0; i < 1000; ++i) {
        assertEqual(1, e.outEdges("UnitTestsVertices/node" + i).length);
        if (i >= 10) {
          assertEqual(0, e.inEdges("UnitTestsVertices/node" + i).length);
        }
        else {
          assertEqual(100, e.inEdges("UnitTestsVertices/node" + i).length);
        }
      }
    }
Пример #3
0
function runSetup () {
  "use strict";
  internal.debugClearFailAt();
  
  var appPath = fs.join(module.appPath(), ".."); 
  
  try {
    db._dropDatabase("UnitTestsRecovery1");
  }
  catch (err) {
  }

  db._createDatabase("UnitTestsRecovery1");

  fs.write(fs.join(appPath, "UnitTestsRecovery1", "foo.json"), "test");
  
  try {
    db._dropDatabase("UnitTestsRecovery2");
  }
  catch (err) {
  }

  db._createDatabase("UnitTestsRecovery2");
  
  fs.write(fs.join(appPath, "UnitTestsRecovery2", "bar.json"), "test");

  db._dropDatabase("UnitTestsRecovery2");

  internal.wait(1);
  internal.debugSegfault("crashing server");
}
Пример #4
0
Graph.prototype.initialize = function (name, vertices, edges) {
  var results;

  if (is.notExisty(vertices) && is.notExisty(edges)) {
    results = GraphAPI.getGraph(name);
  } else {
    if (typeof vertices === 'object' && typeof vertices.name === 'function') {
      vertices = vertices.name();
    }
    if (typeof edges === 'object' && typeof edges.name === 'function') {
      edges = edges.name();
    }

    results = GraphAPI.postGraph({
      _key: name,
      vertices: vertices,
      edges: edges
    });
  }

  this._properties = results.graph;
  this._vertices = arangodb.db._collection(this._properties.edgeDefinitions[0].from[0]);
  this._edges = arangodb.db._collection(this._properties.edgeDefinitions[0].collection);

  // and dictionary for vertices and edges
  this._verticesCache = {};
  this._edgesCache = {};

  // and store the cashes
  this.predecessors = {};
  this.distances = {};

  return this;
};
Пример #5
0
function runSetup () {
  internal.debugClearFailAt();
  var c;
  
  db._drop("UnitTestsRecovery");
  c = db._create("UnitTestsRecovery");

  c.save({ _key: "foo", value1: 1, value2: "test" }, true);

  internal.debugSegfault("crashing server");
}
Пример #6
0
    testCollectionUnload : function () {
      var c = db._collection("UnitTestsRecovery");
      c.unload();
      internal.wait(5);
      c = null;

      c = db._collection("UnitTestsRecovery");
      assertTrue(1, c.count());
      var doc = c.toArray()[0];
      assertEqual("foo", doc._key);
      assertEqual(1, doc.value1);
      assertEqual("test", doc.value2);
    }
Пример #7
0
function runSetup () {
  internal.debugClearFailAt();
  
  db._drop("UnitTestsRecovery");
  var c = db._create("UnitTestsRecovery"), i;

  c.save({ _key: "value", value: 42 });
  for (i = 0; i < 200000; ++i) {
    c.update("value", { value: i });
  }
  c.save({ _key: "crashme" }, true);

  internal.debugSegfault("crashing server");
}
Пример #8
0
function runSetup () {
  "use strict";
  internal.debugClearFailAt();

  db._drop("test");
  db._create("test");
  
  var i;
  for (i = 0; i < 5; ++i) {
    db._useDatabase("_system");

    try {
      db._dropDatabase("UnitTestsRecovery" + i);
    } 
    catch (err) {
      // ignore this error
    }

    db._createDatabase("UnitTestsRecovery" + i);
    db._useDatabase("UnitTestsRecovery" + i);
    db._create("test");
    db.test.save({ value: i });
  }

  db._useDatabase("_system");
    
  db.test.save({ _key: "crashme" }, true);

  internal.debugSegfault("crashing server");
}
Пример #9
0
  callback : function (req, res) {
    try {
      var body = actions.getJsonBody(req, res);

      if (body === undefined) {
        return;
      }

      if (req.requestType != actions.PUT) {
        actions.resultUnsupported(req, res);
      }
      else {
        var name = body.collection;
        var id = parseInt(name) || name;
        var collection = db._collection(id);

        if (collection === null) {
          actions.collectionNotFound(req, res, name);
        }
        else {
          var result = { document: collection.any() };

          actions.resultOk(req, res, actions.HTTP_OK, result);
        }
      }
    }
    catch (err) {
      actions.resultException(req, res, err);
    }
  }
Пример #10
0
function delete_api_collection (req, res) {
  if (req.suffix.length !== 1) {
    actions.resultBad(req, res, actions.ERROR_HTTP_BAD_PARAMETER,
                      "expected DELETE /" + API + "/<collection-name>");
  }
  else {
    var name = decodeURIComponent(req.suffix[0]);
    var collection = arangodb.db._collection(name);

    if (collection === null) {
      actions.collectionNotFound(req, res, name);
    }
    else {
      try {
        var result = {
          id : collection._id
        };

        collection.drop();

        actions.resultOk(req, res, actions.HTTP_OK, result);
      }
      catch (err) {
        actions.resultException(req, res, err);
      }
    }
  }
}
Пример #11
0
  _log: function (level, message, callee) {
    if (!this._logLevels.hasOwnProperty(level)) {
      throw new Error('Unknown log level: ' + level);
    }

    if (this._logLevels[level] < this._logLevel) {
      // Don't log this.
      return;
    }

    var doc = {
      mount: this._mount,
      level: level,
      levelNum: this._logLevels[level],
      time: Date.now(),
      message: message
    };

    if (this._tracing) {
      var e = new Error();
      Error.captureStackTrace(e, callee || this._log);
      e.stack = e.stack.replace(/\n+$/, '');
      doc.stack = ErrorStackParser.parse(e).slice(1);
    }

    if (!db._foxxlog) {
      db._create('_foxxlog', {isSystem: true});
      db._foxxlog.ensureSkiplist('mount');
      db._foxxlog.ensureSkiplist('mount', 'created');
      db._foxxlog.ensureSkiplist('mount', 'created', 'levelNum');
    }

    db._foxxlog.save(doc);
  },
Пример #12
0
  callback : function (req, res) {
    try {
      var body = actions.getJsonBody(req, res);
  
      if (body === undefined) {
        return;
      }

      if (req.requestType != actions.PUT) {
        actions.resultUnsupported(req, res);
      }
      else {
        var example = body.example;
        var name = body.collection;
        var collection = db._collection(name);
        var limit = body.limit || null;

        if (collection === null) {
          actions.collectionNotFound(req, res, name);
        }
        else if (typeof example !== "object" || Array.isArray(example)) {
          actions.badParameter(req, res, "example");
        }
        else {
          var result = collection.removeByExample(example, body.waitForSync, limit);
          actions.resultOk(req, res, actions.HTTP_OK, { deleted: result });
        }
      }
    }
    catch (err) {
      actions.resultException(req, res, err);
    }
  }
Пример #13
0
function get_api_collections (req, res) {
  var i;
  var list = [];
  var names = {};
  var excludeSystem;
  var collections = arangodb.db._collections();

  excludeSystem = false;
  if (req.parameters.hasOwnProperty('excludeSystem')) {
    var value = req.parameters.excludeSystem;
    if (value === 'true' || value === 'yes' || value === 'on' || value === 'y' || value === '1') {
      excludeSystem = true;
    }
  }

  for (i = 0;  i < collections.length;  ++i) {
    var collection = collections[i];
    var rep = collectionRepresentation(collection);

    // include system collections or exclude them?
    if (! excludeSystem || rep.name.substr(0, 1) !== '_') {
      list.push(rep);
      names[rep.name] = rep;
    }
  }

  var result = { collections : list, names : names };

  actions.resultOk(req, res, actions.HTTP_OK, result);
}
Пример #14
0
Users.prototype.updateData = function (identifier, data) {
  'use strict';
  var c = this.storage();

  identifier = this._validateIdentifier(identifier, true);

  db._executeTransaction({
    collections: {
      write: c.name()
    },
    action: function (params) {
      var c = db._collection(params.cn),
        u = c.firstExample({ identifier: params.identifier });

      if (u === null) {
        throw new Error("user not found");
      }
      c.update(u._key, params.data, true, false);
    },
    params: {
      cn: c.name(),
      identifier: identifier,
      data: data || {}
    }
  });

  return true;
};
Пример #15
0
Sessions.prototype.teardown = function () {
  'use strict';
  var c = db._collection(this._collectionName);

  if (c) {
    c.drop();
  }
};
Пример #16
0
    action: function (params) {
      var c = db._collection(params.cn),
        u = c.firstExample({ identifier: params.identifier });

      if (u === null) {
        throw new Error("user not found");
      }
      c.update(u._key, params.data, true, false);
    },
Пример #17
0
 testCreateDatabases : function () {
   var i;
   for (i = 0; i < 5; ++i) {
     db._useDatabase("UnitTestsRecovery" + i);
     var docs = db.test.toArray();
     assertEqual(1, docs.length);
     assertEqual(i, docs[0].value);
   }
 }
Пример #18
0
exports.CURRENT_VERSION = (function() {
  var v = db._version().replace(/-[a-zA-Z0-9_\-]*$/g, '').split('.');

  var major = parseFloat(v[0], 10) || 0;
  var minor = parseFloat(v[1], 10) || 0;
  var patch = parseFloat(v[2], 10) || 0;

  return (((major * 100) + minor) * 100) + patch;
}());
Пример #19
0
function runSetup () {
  internal.debugClearFailAt();
  
  var i, num = 9999999999;
  for (i = 0; i < 4; ++i) {
    var filename = fs.join(db._path(), "../../journals/logfile-" + num + ".db");
    num++;

    // save an empty file 
    fs.write(filename, "");
  }
  
  db._drop("UnitTestsRecovery");
  var c = db._create("UnitTestsRecovery"); 
  c.save({ _key: "crashme" }, true); // wait for sync

  internal.debugSegfault("crashing server");
}
Пример #20
0
Sessions.prototype.setup = function (options) {
  'use strict';
  var journalSize,
    createOptions;

  if (typeof options === 'object' && options.hasOwnProperty('journalSize')) {
    journalSize = options.journalSize;
  }

  createOptions = {
    journalSize : journalSize || 4 * 1024 * 1024
  };

  if (!db._collection(this._collectionName)) {
    db._create(this._collectionName, createOptions);
  }

  this.storage().ensureHashIndex("identifier");
};
Пример #21
0
    action: function (params) {
      var c = db._collection(params.cn),
        u = c.firstExample({ identifier: params.user.identifier });

      if (u === null) {
        c.save(params.user);
      } else {
        c.replace(u._key, params.user);
      }
    },
Пример #22
0
      .forEach(function (queue) {
        var numBusy = db._jobs.byExample({
          queue: queue._key,
          status: 'progress'
        }).count();

        if (numBusy >= queue.maxWorkers) {
          busy = true;
          return;
        }

        var jobs = db._createStatement({
          query: (
            qb.for('job').in('_jobs')
            .filter(
              qb('pending').eq('job.status')
              .and(qb.ref('@queue').eq('job.queue'))
              .and(qb.ref('@now').gte('job.delayUntil'))
            )
            .sort('job.delayUntil', 'ASC')
            .limit('@max')
            .return('job')
          ),
          bindVars: {
            queue: queue._key,
            now: Date.now(),
            max: queue.maxWorkers - numBusy
          }
        }).execute().toArray();

        if (jobs.length > 0) {
          busy = true;
        }

        jobs.forEach(function (job) {
          db._jobs.update(job._key, {status: 'progress'});
          tasks.register({
            command: function (cfg) {
              var db = require('org/arangodb').db;
              var initialDatabase = db._name();
              db._useDatabase(cfg.db);
              try {
                require('org/arangodb/foxx/queues/worker').work(cfg.job);
              } catch(e) {}
              db._useDatabase(initialDatabase);
            },
            offset: 1,
            isSystem: true,
            params: {
              job: _.extend({}, job, {status: 'progress'}),
              db: db._name()
            }
          });
        });
      });
Пример #23
0
    testResumeRecoverySimple : function () {
      var c = db._collection("UnitTestsRecovery"), doc;
      var idx = c.getIndexes()[1];
        
      assertEqual(1, c.count());

      doc = c.document("test");
      assertEqual(1, doc.foo);
      assertEqual(2, doc.bar);
      assertEqual(1, c.byExampleHash(idx.id, { foo: 1, bar: 2 }).toArray().length);
    }
Пример #24
0
      action: function () {
        var db = require("org/arangodb").db;

        var i, c = db._collection("UnitTestsRecovery");
        for (i = 0; i < 10000; ++i) {
          c.save({ _key: "test" + i, value1: "test" + i, value2: i }, true); // wait for sync
        }
        for (i = 0; i < 10000; i += 2) {
          c.remove("test" + i, true);
        }
      }
Пример #25
0
    testCollectorOom : function () {
      var i, c = db._collection("UnitTestsRecovery");
        
      assertEqual(10000, c.count());
      for (i = 0; i < 10000; ++i) {
        var doc = c.document("test" + i);

        assertEqual("test" + i, doc.value1);
        assertEqual(i, doc.value2);
      }
    }
Пример #26
0
    testCorruptWalMarkerSingle : function () {
      var doc;
      var c = db._collection("UnitTestsRecovery"), i;

      assertEqual(100, c.count());
      for (i = 0; i < 100; ++i) {
        doc = c.document("test" + i);
        assertEqual("test" + i, doc.value);
        assertEqual("test" + i, doc._key);
      }
    }
Пример #27
0
 var isExported = function(mount) {
   var dbname = arangodb.db._name();
   if (!exportCache.hasOwnProperty(dbname)) {
     exportCache[dbname] = {};
     return false;
   }
   if (!exportCache[dbname].hasOwnProperty(mount)) {
     return false;
   }
   return true;
 };
Пример #28
0
(function() {
  "use strict";

  var db = require("org/arangodb").db,
    todos = applicationContext.collectionName("todos"),
    collection = db._collection(todos);

  if (collection !== null) {
    collection.drop();
  }
}());
    testNoShutdownInfoMultipleLogs : function () {
      var c = db._collection("UnitTestsRecovery");
      
      assertEqual(200000, c.count());

      var i;
      for (i = 0; i < 200000; ++i) {
        assertEqual(i, c.document("test" + i).value1);
        assertEqual("foobarbaz" + i, c.document("test" + i).value2);
      }
    }
Пример #30
0
  databases.forEach(function (database) {
    try {
      db._useDatabase(database);
      global.KEYSPACE_CREATE('queue-control', 1, true);
      var delayUntil = global.KEY_GET('queue-control', 'delayUntil') || 0;

      if (delayUntil > Date.now() || delayUntil === -1) {
        return;
      }

      var queues = db._collection('_queues');
      var jobs = db._collection('_jobs');

      if (!queues || !jobs || !queues.count() || !jobs.count()) {
        global.KEY_SET('queue-control', 'delayUntil', -1);
      } else {
        runInDatabase();
      }
    } catch (e) {}
  });