perftest/jscrund_null.js (106 lines of code) (raw):

/* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ 'use strict'; var jones = require("database-jones"), ndb_bin_path = require("jones-ndb").config.binary, ndb_adapter = require(ndb_bin_path), os = require('os'), udebug = unified_debug.getLogger('jscrund_null.js'); function implementation() { var b = Buffer.alloc(4); this.inBatchMode = false; this.batch = null; this.buffers = null; this.properties = null; this.debug_msg = "debug message "; this.bounds_helper = [ b,1,true,b,1,false,0 ]; // Index Bounds Helper Spec }; implementation.prototype = { }; implementation.prototype.getConnectionProperties = function() { return { mysql_user : "root", // For CREATE TABLE database : "test", debug_messages : 0, // log_debug messages per operation debug_message_length : 20, // length of debug messages ndbapi_calls : 0, // NDB API calls per operation system_calls : 0, // System calls per operation new_buffers : 0, // Allocate node Buffers per operation new_buffer_size : 32, // Size of allocation }; }; implementation.prototype.close = function(callback) { callback(null); }; implementation.prototype.initialize = function(options, callback) { var n; jones.getDBServiceProvider("ndb"); // To call ndb_init() this.properties = options.properties; while(this.debug_msg.length < this.properties.debug_message_length) { this.debug_msg += "x"; } callback(null); }; implementation.prototype.execOneOperation = function(callback, value) { var b, n; /* Debug Messages */ for(n = 0 ; n < this.properties.debug_messages ; n++) { udebug.log(this.debug_msg); } /* NDBAPI calls */ /* Marshal/Unmarshal arguments and call into native code */ for(n = 0 ; n < this.properties.ndbapi_calls ; n++) { ndb_adapter.impl.IndexBound.create(this.bounds_helper); } /* System calls */ for(n = 0 ; n < this.properties.system_calls ; n++) { os.loadavg(); // calls sysctl() or sysinfo() } /* Buffers */ for(n = 0 ; n < this.properties.new_buffers ; n++) { b = Buffer.alloc(this.properties.new_buffer_size); if(this.inBatchMode) { this.buffers.push(b); } } /* Run operation or add it to batch */ if(this.inBatchMode) { this.batch.push({ 'cb': callback, 'val': value }); } else { setImmediate(callback, null, value); } }; implementation.prototype.persist = function(parameters, callback) { this.execOneOperation(callback); }; implementation.prototype.find = function(parameters, callback) { var object = { id : parameters.key.id, cint: parameters.key.id, clong: parameters.key.id, cfloat: parameters.key.id, cdouble: parameters.key.id } this.execOneOperation(callback, object); }; implementation.prototype.remove = function(parameters, callback) { this.execOneOperation(callback); }; implementation.prototype.createBatch = function(callback) { this.batch = []; this.buffers = []; this.inBatchMode = true; callback(null); }; implementation.prototype.executeBatch = function(callback) { var batch = this.batch; function runOperations() { var item; while((item = batch.pop())) { item.cb(null, item.val); } callback(null); } this.inBatchMode = false; setImmediate(runOperations); }; implementation.prototype.begin = function(callback) { callback(null); }; implementation.prototype.commit = function(callback) { callback(null); }; exports.implementation = implementation;