Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- var oracledb = require('oracledb');
- console.log('start');
- watch();
- var numberOfTests = 0;
- var repeat = process.argv[2] || 1;
- for (var i = 1; i <= repeat; ++i) {
- dbTest(i);
- }
- setTimeout(function() {
- dbTest('confirm');
- }, 2500 * repeat);
- //
- function watch() {
- console.log('running');
- setTimeout(function() {
- if (numberOfTests === 0) {
- console.log('finished');
- return;
- }
- watch();
- }, 1000);
- }
- // DB
- var sqlLock = 'SELECT * FROM hr.employees WHERE employee_id = 100 FOR UPDATE';
- var sqlDelay = 'begin dbms_lock.sleep(1); end;';
- function dbTest(id) {
- ++numberOfTests;
- connect(function(conn) {
- delay(conn, function() {
- lock(conn, function() {
- delay(conn, function() {
- release(conn, function() {
- --numberOfTests;
- }, id);
- }, id);
- }, id);
- }, id);
- }, id);
- }
- function connect(callback, id) {
- console.log(id, 'connecting');
- oracledb.getConnection({
- user: 'hr',
- password: 'hr',
- connectString: '192.168.56.101',
- }, function(err, conn) {
- if (err) {
- console.error(id + ': ' + err.message);
- throw err;
- }
- callback.call({}, conn);
- });
- }
- function delay(conn, callback, id) {
- console.log(id, 'try to delay');
- conn.execute(sqlDelay, {}, function(err) {
- if (err) {
- console.error(id + ': ' + err.message);
- throw err;
- }
- console.log(id, 'delayed');
- callback.call();
- })
- }
- function lock(conn, callback, id) {
- console.log(id, 'try to lock');
- conn.execute(sqlLock, {}, function(err) {
- if (err) {
- console.error(id + ': ' + err.message);
- throw err;
- }
- console.log(id, 'locked');
- callback.call();
- })
- }
- function release(conn, callback, id) {
- console.log(id, 'try to release');
- conn.release(function(err) {
- if (err) {
- console.error(id + ': ' + err.message);
- throw err;
- }
- console.log(id, 'released');
- callback.call();
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement