Socket
Socket
Sign inDemoInstall

aerospike

Package Overview
Dependencies
Maintainers
3
Versions
135
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

aerospike - npm Package Compare versions

Comparing version 1.0.57 to 2.0.0-alpha.1

.vagrant/machines/default/virtualbox/action_provision

2

benchmarks/config.json

@@ -45,3 +45,1 @@ {

}

@@ -242,3 +242,3 @@ // *****************************************************************************

if (!argv.silent) {
logger.info('host: ' + argv.host + ' port: ' + argv.port + ', namespace: ' + argv.namespace + ', set: ' + argv.set + ', worker processes: ' + argv.processes +
logger.info('namespace: ' + argv.namespace + ', set: ' + argv.set + ', worker processes: ' + argv.processes +
', keys: ' + keyrange + ', read: ' + ROPSPCT + '%, write: ' + WOPSPCT + '%')

@@ -245,0 +245,0 @@ }

@@ -37,3 +37,3 @@ // *****************************************************************************

var trans = { total: { count: 0, min: Infinity, max: 0 } }
var trans = { total: { count: 0, min_tps: Infinity, max_tps: 0 } }

@@ -168,2 +168,28 @@ var start_time

function print_env_table (print, prefix) {
var envTable = new Table({
chars: TABLE_CHARS,
style: TABLE_STYLE
})
envTable.push({'Node.js Version': process.versions.node})
envTable.push({'UV_THREADPOOL_SIZE': process.env.UV_THREADPOOL_SIZE || '-'})
print_table(envTable, print, prefix)
}
function print_config_table (config, print, prefix) {
var configTable = new Table({
chars: TABLE_CHARS,
style: TABLE_STYLE
})
configTable.push({'operations': config.operations})
configTable.push({'iterations': config.iterations === undefined ? 'undefined' : config.iterations})
configTable.push({'processes': config.processes})
configTable.push({'time': config.time === undefined ? 'undefined' : time_units(config.time)})
print_table(configTable, print, prefix)
}
function print_transactions (transactions, print, prefix) {

@@ -194,3 +220,3 @@ var thead = []

row = columns.map(function (col) {
return number_format(transactions[col]['min'], 0)
return number_format(transactions[col]['min_tps'], 0)
})

@@ -200,3 +226,3 @@ table.push({'Min TPS': row})

row = columns.map(function (col) {
return number_format(transactions[col]['max'], 0)
return number_format(transactions[col]['max_tps'], 0)
})

@@ -247,6 +273,6 @@ table.push({'Max TPS': row})

function aggregate_interval_stats (stat_name, tx) {
var stats = trans[stat_name] = trans[stat_name] || { count: 0, max: 0, min: Infinity }
var stats = trans[stat_name] = trans[stat_name] || { count: 0, max_tps: 0, min_tps: Infinity }
stats['count'] += tx
if (tx > stats['max']) stats['max'] = tx
if (tx < stats['min']) stats['min'] = tx
if (tx > stats['max_tps']) stats['max_tps'] = tx
if (tx < stats['min_tps']) stats['min_tps'] = tx
}

@@ -265,22 +291,14 @@

function report_final (argv, print) {
calculate_tps(trans)
if (!argv.json) {
var configTable = new Table({
chars: TABLE_CHARS,
style: TABLE_STYLE
})
calculate_tps(trans)
configTable.push({'operations': argv.operations})
configTable.push({'iterations': argv.iterations === undefined ? 'undefined' : argv.iterations})
configTable.push({'processes': argv.processes})
configTable.push({'time': argv.time === undefined ? 'undefined' : time_units(argv.time)})
print()
print('SUMMARY')
print()
print(' Environment')
print_env_table(print)
print()
print(' Configuration')
print_table(configTable, print)
print_config_table(argv, print)
print()
print(' Transactions / TPS')
print(' Transactions')
print_transactions(trans, print)

@@ -296,2 +314,6 @@ print()

var output = {
env: {
nodejs: process.versions.node,
'UV_THREADPOOL_SIZE': process.env.UV_THREADPOOL_SIZE || null
},
configuration: {

@@ -302,2 +324,3 @@ operations: argv.operations,

},
duration: total_duration,
transactions: trans,

@@ -304,0 +327,0 @@ durations: time_hist,

@@ -101,5 +101,7 @@ // *****************************************************************************

client.connect(function (err) {
if (err.code !== 0) {
if (err) {
logger.error('Aerospike server connection error: ', err)
process.exit(1)
} else {
logger.info('worker connected: ' + client.config.hosts.map(function (host) { return host.addr + ':' + host.port }))
}

@@ -162,3 +164,4 @@ })

var time_end = process.hrtime()
done(_error.code, time_start, time_end, READ)
var status = (_error && _error.code) || 0
done(status, time_start, time_end, READ)
})

@@ -176,3 +179,4 @@ }

var time_end = process.hrtime()
done(_error.code, time_start, time_end, WRITE)
var status = (_error && _error.code) || 0
done(status, time_start, time_end, WRITE)
})

@@ -179,0 +183,0 @@ }

@@ -253,3 +253,3 @@ # Client Class

### batchSelect(keys, policy=null, callback)
### batchSelect(keys, bins, policy=null, callback)

@@ -695,3 +695,3 @@ Reads a subset of bins for a batch of records from the database cluster.

Wait until an index create command succeeds in aerospike cluster. This function returns
Wait until an index create command succeeds in aerospike cluster. This function returns
only when index is ready to be queried.

@@ -749,3 +749,3 @@

default list.
Example:

@@ -752,0 +752,0 @@

@@ -381,3 +381,3 @@ # LargeList Class

```js
llist.range('begin', 'end', function (error, response){
llist.findRange('begin', 'end', function (error, response){
if (error && error.code !== status.AEROSPIKE_OK) {

@@ -420,3 +420,3 @@ // handle failure

var filter = {module: 'udf_module', funcname: 'udf_function', args: ['abc', 123, 4.5]}
llist.range('begin', 'end', filter, function (error, response){
llist.findRange('begin', 'end', filter, function (error, response){
if (error && error.code !== status.AEROSPIKE_OK) {

@@ -423,0 +423,0 @@ // handle failure

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -120,9 +113,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -132,9 +119,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -148,8 +131,4 @@ password: argv.password

function run (client) {
var key = {
ns: argv.namespace,
set: argv.set,
key: keyv
}
function run (client, done) {
var key = new Aerospike.Key(argv.namespace, argv.set, keyv + iteration.current())

@@ -161,32 +140,13 @@ var bins = {

client.add(key, bins, function (err) {
if (isError(err)) {
process.exit(1)
} else {
!argv.quiet && console.log('OK.')
iteration.next(run, client)
}
if (err) throw err
!argv.quiet && console.log('OK. Updated key ' + key.key + '.')
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -120,9 +113,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -132,9 +119,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -148,45 +131,21 @@ password: argv.password

function run (client) {
var key = {
ns: argv.namespace,
set: argv.set,
key: keyv
}
function run (client, done) {
var key = new Aerospike.Key(argv.namespace, argv.set, keyv + iteration.current())
var bins = {
s: 'appendS'
s: '#append'
}
client.append(key, bins, function (err) {
if (isError(err)) {
process.exit(1)
} else {
!argv.quiet && console.log('OK.')
iteration.next(run, client)
}
if (err) throw err
!argv.quiet && console.log('OK. Updated key ' + key.key + '.')
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -100,7 +93,3 @@ },

var keys = argv._.map(function (key) {
return {
ns: argv.namespace,
set: argv.set,
key: key
}
return new Aerospike.Key(argv.namespace, argv.set, key)
})

@@ -127,9 +116,3 @@

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -139,9 +122,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -155,28 +134,15 @@ password: argv.password

function run (client) {
function run (client, done) {
client.batchExists(keys, function (err, results) {
if (isError(err)) {
process.exit(1)
} else {
!argv.quiet && console.log(JSON.stringify(results, null, ' '))
iteration.next(run, client)
}
if (err) throw err
!argv.quiet && console.log(JSON.stringify(results, null, ' '))
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
console.error('Error: ' + err.message)
return true
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -100,7 +93,3 @@ },

var keys = argv._.map(function (key) {
return {
ns: argv.namespace,
set: argv.set,
key: key
}
return new Aerospike.Key(argv.namespace, argv.set, key)
})

@@ -127,9 +116,3 @@

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -139,9 +122,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -155,34 +134,15 @@ password: argv.password

function run (client) {
function run (client, done) {
client.batchGet(keys, function (err, results) {
if (isError(err)) {
process.exit(1)
} else {
!argv.quiet && console.log(JSON.stringify(results, null, ' '))
iteration.next(run, client)
}
if (err) throw err
!argv.quiet && console.log(JSON.stringify(results, null, ' '))
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -83,3 +76,3 @@ },

alias: 'b',
default: undefined,
default: 'i,s',
describe: 'Bins to select in the batch Call'

@@ -106,7 +99,3 @@ },

var keys = argv._.map(function (key) {
return {
ns: argv.namespace,
set: argv.set,
key: key
}
return new Aerospike.Key(argv.namespace, argv.set, key)
})

@@ -133,9 +122,3 @@

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -145,9 +128,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -161,35 +140,17 @@ password: argv.password

function run (client) {
var bins = ['i', 's']
function run (client, done) {
var bins = argv.bins.split(',')
client.batchSelect(keys, bins, function (err, results) {
if (isError(err)) {
process.exit(1)
}
if (err) throw err
!argv.quiet && console.log(JSON.stringify(results, null, ' '))
iteration.next(run, client)
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -137,9 +130,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -149,9 +136,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -165,8 +148,4 @@ password: argv.password

function run (client) {
var key = {
ns: argv.namespace,
set: argv.set,
key: keyv
}
function run (client, done) {
var key = new Aerospike.Key(argv.namespace, argv.set, keyv + iteration.current())

@@ -186,31 +165,13 @@ var udf = {

client.execute(key, udf, function (err, value) {
if (isError(err)) {
process.exit(1)
} else {
!argv.quiet && console.log(JSON.stringify(value, null, ' '))
iteration.next(run, client)
}
if (err) throw err
!argv.quiet && console.log(JSON.stringify(value, null, ' '))
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (err && err.code !== Status.AEROSPIKE_OK) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('../')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -135,9 +128,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -147,8 +134,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
user: argv.user,

@@ -162,38 +146,22 @@ password: argv.password

function run (client) {
var key = {
ns: argv.namespace,
set: argv.set,
key: keyv
}
function run (client, done) {
var key = new Aerospike.Key(argv.namespace, argv.set, keyv + iteration.current())
client.exists(key, function (err, bins, metadata, key) {
if (isError(err)) {
process.exit(1)
client.exists(key, function (err) {
if (!err) {
!argv.quiet && console.log('Key ' + key.key + ' exists.')
} else if (err.code === Aerospike.status.AEROSPIKE_ERR_RECORD_NOT_FOUND) {
!argv.quiet && console.log('Key ' + key.key + ' does not exist.')
} else {
throw err
}
iteration.next(run, client)
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -135,9 +128,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -147,9 +134,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -163,55 +146,34 @@ password: argv.password

function run (client) {
var key = {
ns: argv.namespace,
set: argv.set,
key: keyv + iteration.current()
}
function run (client, done) {
var key = new Aerospike.Key(argv.namespace, argv.set, keyv + iteration.current())
client.get(key, function (err, bins, metadata, key) {
if (isError(err)) {
process.exit(1)
} else {
client.get(key, function (err, bins, metadata) {
if (!err) {
var record = {}
if (argv['key']) {
record.key = key
}
if (argv['metadata']) {
record.metadata = metadata
}
if (argv['bins']) {
record.bins = bins
}
!argv.quiet && console.log('Found key ' + key.key + '.')
!argv.quiet && console.log(JSON.stringify(record, null, ' '))
} else if (err.code === Aerospike.status.AEROSPIKE_ERR_RECORD_NOT_FOUND) {
!argv.quiet && console.log('Key ' + key.key + ' not found.')
} else {
throw err
}
iteration.next(run, client)
}
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (err && err.code !== Status.AEROSPIKE_OK) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -151,9 +144,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -163,9 +150,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -179,3 +162,3 @@ password: argv.password

function run (client) {
function run (client, done) {
var options = {

@@ -191,7 +174,4 @@ ns: argv.namespace,

client.createIntegerIndex(options, function (err) {
if (isError(err)) {
process.exit(1)
} else {
isIndexCreated(client, argv.namespace, index, 1000)
}
if (err) throw err
isIndexCreated(client, argv.namespace, index, 1000, done)
})

@@ -201,7 +181,4 @@ break

client.createStringIndex(options, function (err) {
if (isError(err)) {
process.exit(1)
} else {
isIndexCreated(client, argv.namespace, index, 1000)
}
if (err) throw err
isIndexCreated(client, argv.namespace, index, 1000, done)
})

@@ -215,34 +192,15 @@ break

function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.log(err)
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
function isIndexCreated (client, namespace, index, pollInterval) {
function isIndexCreated (client, namespace, index, pollInterval, done) {
client.indexCreateWait(namespace, index, pollInterval, function (err) {
if (isError(err)) {
process.exit(1)
} else {
!argv.quiet && console.log('Index Created - %s', index)
}
if (err) throw err
!argv.quiet && console.log('Index Created - %s', index)
done()
})
}
aerospike.client(config).connect(function (err, client) {
if (err && err.code !== Status.AEROSPIKE_OK) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -135,9 +128,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -147,9 +134,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -163,33 +146,15 @@ password: argv.password

function run (client) {
function run (client, done) {
client.indexRemove(argv.namespace, index, function (err) {
if (isError(err)) {
process.exit(1)
} else {
!argv.quiet && console.log('OK.')
}
if (err) throw err
!argv.quiet && console.log('OK.')
done()
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (err && err.code !== Status.AEROSPIKE_OK) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -113,9 +106,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -125,9 +112,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -141,35 +124,21 @@ password: argv.password

function run (client) {
client.info(request, {
addr: argv.host,
port: argv.port
}, function (err, response, host) {
if (isError(err)) {
process.exit(1)
} else {
var res = {
host: host,
response: response
}
!argv.quiet && console.log(JSON.stringify(res, null, ' '))
iteration.next(run, client)
function run (client, done) {
var host = client.config.hosts[0]
client.info(request, host, function (err, response, host) {
if (err) throw err
var res = {
host: host,
response: response
}
!argv.quiet && console.log(JSON.stringify(res, null, ' '))
}, function () {
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
console.error('Error: ' + err.message)
return true
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const fs = require('fs')
const Aerospike = require('aerospike')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,10 +45,5 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {

@@ -63,3 +56,3 @@ alias: 't',

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -113,9 +106,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -125,9 +112,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -141,32 +124,20 @@ password: argv.password

function run (client) {
function run (client, done) {
client.info(request, function (err, response, host) {
if (isError(err)) {
process.exit(1)
} else {
var res = {
host: host,
response: response
}
!argv.quiet && console.log(JSON.stringify(res, null, ' '))
iteration.next(run, client)
if (err) throw err
var res = {
host: host,
response: response
}
!argv.quiet && console.log(JSON.stringify(res, null, ' '))
}, function () {
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
console.error('Error: ' + err.message)
return true
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -16,8 +16,8 @@ var count = 0

function next (fn, arg) {
function next (fn, arg, done) {
count++
if (count >= limit) {
process.exit(0)
if (count < limit) {
fn(arg, done)
} else {
fn(arg)
done()
}

@@ -24,0 +24,0 @@ }

@@ -21,8 +21,6 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
var Status = aerospike.status
// *****************************************************************************

@@ -41,13 +39,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -57,3 +50,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -99,9 +92,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -111,14 +98,8 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// modlua userpath
modlua: {
userPath: __dirname
},
// authentication
user: argv.user,

@@ -133,4 +114,4 @@ password: argv.password

var checkError = function (err, msg) {
if (err.code !== Status.AEROSPIKE_OK) {
console.log(err)
if (err) {
console.error(err)
} else {

@@ -141,24 +122,8 @@ console.log(msg)

var client = aerospike.client(config)
if (client == null) {
console.error('Error: Client object not initialized')
process.exit(1)
}
client.connect(function (err, client) {
if (err.code !== Status.AEROSPIKE_OK) {
console.error('Error: Aerospike server connection error. ', err.message)
process.exit(1)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
// Get a largelist object from client.
var listkey = {
ns: argv.namespace,
set: argv.set,
key: 'ldt_list_key'
}
var policy = {
timeout: 1000
}
var listkey = new Aerospike.Key(argv.namespace, argv.set, 'ldt_list_key')
var policy = { timeout: 1000 }
var list = client.LargeList(listkey, 'ldt_list_bin', policy)

@@ -171,3 +136,3 @@

list.add(val, function (err, val) {
checkError(err, 'Added a single value ')
checkError(err, 'Added a single value')
})

@@ -178,3 +143,3 @@

list.update(updateVal, function (err, val) {
checkError(err, 'Updated a single value ')
checkError(err, 'Updated a single value')
})

@@ -233,3 +198,3 @@

list.getConfig(function (err, val) {
if (err && err.code !== Status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
console.log(val)

@@ -239,2 +204,3 @@ // destroy the llist completely.

checkError(err, 'The list is destroyed')
client.close()
})

@@ -241,0 +207,0 @@ })

@@ -39,8 +39,6 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
var status = aerospike.status
// *****************************************************************************

@@ -59,13 +57,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -111,32 +104,2 @@ },

// *****************************************************************************
// Establish a connection to the cluster.
// *****************************************************************************
var config = {
hosts: [{
addr: argv.host,
port: argv.port
}],
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,
password: argv.password
}
var client = aerospike.client(config).connect(function (err, client) {
if (err.code !== status.AEROSPIKE_OK) {
console.log('Aerospike server connection Error: %j', err)
return
}
if (client === null) {
console.error('Error: Client not initialized.')
return
}
})
// *****************************************************************************
// Perform the operation

@@ -146,3 +109,3 @@ // *****************************************************************************

function header (message) {
return function (callback) {
return function (client, callback) {
console.log('')

@@ -158,3 +121,3 @@ console.log('********************************************************************************')

function get (key) {
return function (callback) {
return function (client, callback) {
console.log('*** get')

@@ -168,3 +131,3 @@ client.get(key, function (err, record, metadata, key) {

function put (key, rec) {
return function (callback) {
return function (client, callback) {
console.log('*** put')

@@ -178,3 +141,3 @@ client.put(key, rec, function (err, key) {

function log (level, file) {
return function (callback) {
return function (client, callback) {
var fd

@@ -198,7 +161,3 @@ if (file) {

var key = {
ns: argv.namespace,
set: argv.set,
key: 'abc'
}
var key = new Aerospike.Key(argv.namespace, argv.set, 'abc')

@@ -226,7 +185,29 @@ var operations = [

operations.reduceRight(function (r, l) {
return function (err) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
l(r)
}
}, function () {})()
function run (client, done) {
operations.reduceRight(function (r, l) {
return function (err) {
if (err) err
l(client, r)
}
}, done)()
}
// *****************************************************************************
// Establish a connection to the cluster.
// *****************************************************************************
var config = {
host: argv.host,
policies: {
timeout: argv.timeout
},
user: argv.user,
password: argv.password
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,8 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Operator = aerospike.operator
var Status = aerospike.status
var Operator = Aerospike.operator

@@ -48,13 +47,8 @@ // *****************************************************************************

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -64,3 +58,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -121,9 +115,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -133,9 +121,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -149,8 +133,4 @@ password: argv.password

function run (client) {
var key = {
ns: argv.namespace,
set: argv.set,
key: keyv
}
function run (client, done) {
var key = new Aerospike.Key(argv.namespace, argv.set, keyv + iteration.current())

@@ -165,47 +145,31 @@ var ops = [

client.operate(key, ops, function (err, bins, metadata, key) {
if (isError(err)) {
process.exit(1)
} else {
client.operate(key, ops, function (err, bins, metadata) {
if (!err) {
var record = {}
if (!argv['no-key']) {
record.key = key
}
if (!argv['no-metadata']) {
record.metadata = metadata
}
if (!argv['no-bins']) {
record.bins = bins
}
!argv.quiet && console.log('Found key ' + key.key + '.')
!argv.quiet && console.log(JSON.stringify(record, null, ' '))
iteration.next(run, client)
} else if (err.code === Aerospike.status.AEROSPIKE_ERR_RECORD_NOT_FOUND) {
!argv.quiet && console.log('Key ' + key.key + ' not found.')
} else {
throw err
}
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -120,9 +113,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -132,9 +119,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -148,47 +131,21 @@ password: argv.password

function run (client) {
var key = {
ns: argv.namespace,
set: argv.set,
key: keyv
}
function run (client, done) {
var key = new Aerospike.Key(argv.namespace, argv.set, keyv + iteration.current())
var bins = {
s: 'prependS'
s: 'prepend#'
}
if (argv.profile) {
console.time('add')
}
client.prepend(key, bins, function (err, bins, metadata, key) {
if (isError(err)) {
process.exit(1)
} else {
!argv.quiet && console.log('OK.')
iteration.next(run, client)
}
client.prepend(key, bins, function (err, bins, metadata) {
if (err) throw err
!argv.quiet && console.log('OK. Updated key ' + key.key + '.')
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,8 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
var Double = aerospike.Double
var Double = Aerospike.Double

@@ -48,13 +47,8 @@ // *****************************************************************************

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -64,3 +58,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -121,9 +115,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -133,8 +121,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
user: argv.user,

@@ -148,11 +133,7 @@ password: argv.password

function run (client) {
var key = {
ns: argv.namespace,
set: argv.set,
key: keyv + iteration.current()
}
function run (client, done) {
var key = new Aerospike.Key(argv.namespace, argv.set, keyv + iteration.current())
var bins = {
i: 1152921504606846976.456,
i: 123,
d: 456.78,

@@ -177,32 +158,13 @@ x: Double(123.00),

client.put(key, bins, metadata, function (err, key) {
if (isError(err)) {
process.exit(1)
} else {
!argv.quiet && console.log('OK.')
iteration.next(run, client)
}
if (err) throw err
!argv.quiet && console.log('Wrote key ' + key.key + '.')
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,8 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const fs = require('fs')
const Aerospike = require('aerospike')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
var filter = aerospike.filter
const filter = Aerospike.filter

@@ -48,13 +47,8 @@ // *****************************************************************************

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -64,3 +58,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -113,9 +107,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -125,13 +113,8 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
modlua: {
userPath: __dirname
},
// authentication
user: argv.user,

@@ -145,3 +128,3 @@ password: argv.password

function run (client) {
function run (client, done) {
var options = {

@@ -163,26 +146,15 @@ aggregationUDF: {

stream.on('error', function (err) {
console.error(err)
process.exit(1)
throw err
})
stream.on('end', function () {
iteration.next(run, client)
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
console.error('Error: ' + err.message)
return true
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,9 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
var Status = aerospike.status
var filter = aerospike.filter
var GeoJSON = aerospike.GeoJSON
const status = Aerospike.status
const filter = Aerospike.filter
const GeoJSON = Aerospike.GeoJSON

@@ -43,13 +43,8 @@ // *****************************************************************************

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -59,3 +54,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -101,8 +96,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [
{ addr: argv.host, port: argv.port }
],
// log configuration
host: argv.host,
log: {

@@ -112,28 +102,16 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// modlua userpath
modlua: {
userPath: __dirname
}
},
user: argv.user,
password: argv.password
}
if (argv.user !== null) {
config.user = argv.user
}
if (argv.password !== null) {
config.password = argv.password
}
var g_nkeys = 20
var g_bin = 'loc'
var g_index = 'points-loc-index'
function execute_query (client) {
function execute_query (client, done) {
var count = 0

@@ -149,3 +127,3 @@ var region = {

var options = { filters: [filter.geoWithin('loc', JSON.stringify(region))] }
var options = { filters: [filter.geoWithin('loc', new GeoJSON(region))] }

@@ -164,3 +142,3 @@ var q = client.query(argv.namespace, argv.set, options)

console.log(err)
cleanup(client, process.exit)
cleanup(client, done)
})

@@ -170,12 +148,12 @@

console.log('RECORDS FOUND:', count)
cleanup(client, process.exit)
cleanup(client, done)
})
}
function insert_records (client, ndx, end) {
function insert_records (client, ndx, end, done) {
if (ndx >= end) {
return execute_query(client)
return execute_query(client, done)
}
var key = { ns: argv.namespace, set: argv.set, key: ndx }
var key = new Aerospike.Key(argv.namespace, argv.set, ndx)

@@ -186,31 +164,23 @@ var lng = -122 + (0.1 * ndx)

var loc = { type: 'Point', coordinates: [lng, lat] }
var bins = {}
bins[g_bin] = GeoJSON(JSON.stringify(loc))
var bins = {
loc: new GeoJSON(loc)
}
client.put(key, bins, function (err, key) {
if (err.code !== Status.AEROSPIKE_OK) {
console.error('insert_records: put failed: ', err.message)
process.exit(1)
}
insert_records(client, ndx + 1, end)
if (err) throw err
insert_records(client, ndx + 1, end, done)
})
}
function create_index (client) {
function create_index (client, done) {
var options = {
ns: argv.namespace,
set: argv.set,
bin: g_bin,
bin: 'loc',
index: g_index
}
client.createGeo2DSphereIndex(options, function (err) {
if (err.code !== Status.AEROSPIKE_OK) {
console.log('index create failed: ', err)
process.exit(1)
}
if (err) throw err
client.indexCreateWait(options.ns, g_index, 100, function (err) {
if (err.code !== Status.AEROSPIKE_OK) {
console.log('index create failed: ', err)
process.exit(1)
}
insert_records(client, 0, g_nkeys)
if (err) throw err
insert_records(client, 0, g_nkeys, done)
})

@@ -220,39 +190,31 @@ })

function remove_index (client, complete) {
function remove_index (client, done) {
client.indexRemove(argv.namespace, g_index, function (err) {
if (err && !(err.code === Status.AEROSPIKE_OK || err.code === Status.AEROSPIKE_ERR_RECORD_NOT_FOUND)) {
throw new Error(err.message)
}
complete(client)
if (err && err.code !== status.AEROSPIKE_ERR_RECORD_NOT_FOUND) throw err
done(client)
})
}
function remove_records (client, ndx, end, complete) {
function remove_records (client, ndx, end, done) {
if (ndx >= end) {
return remove_index(client, complete)
return remove_index(client, done)
}
var key = { ns: argv.namespace, set: argv.set, key: ndx }
var key = new Aerospike.Key(argv.namespace, argv.set, ndx)
client.remove(key, function (err, key) {
if (err && !(err.code === Status.AEROSPIKE_OK || err.code === Status.AEROSPIKE_ERR_RECORD_NOT_FOUND)) {
throw new Error(err.message)
}
remove_records(client, ndx + 1, end, complete)
if (err && err.code !== status.AEROSPIKE_ERR_RECORD_NOT_FOUND) throw err
remove_records(client, ndx + 1, end, done)
})
}
function cleanup (client, complete) {
remove_records(client, 0, g_nkeys, complete)
function cleanup (client, done) {
remove_records(client, 0, g_nkeys, done)
}
aerospike.client(config).connect(function (err, client) {
if (err.code === Status.AEROSPIKE_OK) {
// FIXME - when we can wait after index deletion do this instead.
// cleanup(client, create_index)
create_index(client)
} else {
console.error('Error: Aerospike server connection error. ', err.message)
process.exit(1)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
create_index(client, function () {
client.close()
})
})

@@ -21,9 +21,8 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
var filter = aerospike.filter
var filter = Aerospike.filter

@@ -51,10 +50,5 @@ // *****************************************************************************

},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -64,3 +58,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -113,9 +107,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -125,13 +113,8 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// modlua userpath
modlua: {
userPath: __dirname
},
user: argv.user,

@@ -145,5 +128,5 @@ password: argv.password

function run (client) {
function run (client, done) {
var options = {
filters: [filter.equal('i', 492)]
filters: [filter.range('i', 100, 500)]
}

@@ -163,21 +146,11 @@

stream.on('end', function () {
iteration.next(run, client)
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
console.error('Error: ' + err.message)
return true
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -38,7 +38,8 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const deasync = require('deasync')
var Status = aerospike.status
const Status = Aerospike.status

@@ -58,13 +59,8 @@ // *****************************************************************************

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -74,3 +70,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -128,9 +124,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -140,9 +130,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -156,7 +142,4 @@ password: argv.password

aerospike.client(config).connect(function (err, client) {
if (err.code !== Status.AEROSPIKE_OK) {
console.error('Error: Aerospike server connection error. ', err.message)
process.exit(1)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err

@@ -167,2 +150,5 @@ //

const max_concurrent = 200
var in_flight = 0
function exists_done (client, start, end, skip) {

@@ -180,12 +166,8 @@ var total = end - start + 1

return function (err, metadata, key, skippy) {
in_flight--
if (skippy === true) {
console.log('SKIP - ', key)
skipped++
} else {
} else if (err) {
switch (err.code) {
case Status.AEROSPIKE_OK:
console.log('OK - ', key, metadata)
success++
break
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:

@@ -199,2 +181,5 @@ console.log('NOT_FOUND - ', key)

}
} else {
console.log('OK - ', key, metadata)
success++
}

@@ -220,7 +205,3 @@

for (; i <= end; i++) {
var key = {
ns: argv.namespace,
set: argv.set,
key: i
}
var key = new Aerospike.Key(argv.namespace, argv.set, i)

@@ -233,2 +214,4 @@ if (skip !== 0 && ++s >= skip) {

in_flight++
deasync.loopWhile(function () { return in_flight > max_concurrent })
client.exists(key, done)

@@ -235,0 +218,0 @@ }

@@ -37,7 +37,8 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const deasync = require('deasync')
var Status = aerospike.status
const Status = Aerospike.status

@@ -57,13 +58,8 @@ // *****************************************************************************

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -73,3 +69,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -127,9 +123,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -139,9 +129,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -155,4 +141,4 @@ password: argv.password

aerospike.client(config).connect(function (err, client) {
if (err.code !== Status.AEROSPIKE_OK) {
Aerospike.connect(config, function (err, client) {
if (err) {
console.error('Error: Aerospike server connection error. ', err.message)

@@ -166,2 +152,5 @@ process.exit(1)

const max_concurrent = 200
var in_flight = 0
function get_done (client, start, end, skip) {

@@ -179,12 +168,8 @@ var total = end - start + 1

return function (err, record, metadata, key, skippy) {
in_flight--
if (skippy === true) {
console.log('SKIP - ', key)
skipped++
} else {
} else if (err) {
switch (err.code) {
case Status.AEROSPIKE_OK:
console.log('OK - ', key, metadata, record)
success++
break
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:

@@ -198,2 +183,5 @@ console.log('NOT_FOUND - ', key)

}
} else {
console.log('OK - ', key, metadata, record)
success++
}

@@ -219,7 +207,3 @@

for (; i <= end; i++) {
var key = {
ns: argv.namespace,
set: argv.set,
key: i
}
var key = new Aerospike.Key(argv.namespace, argv.set, i)

@@ -232,2 +216,4 @@ if (skip !== 0 && ++s >= skip) {

in_flight++
deasync.loopWhile(function () { return in_flight > max_concurrent })
client.get(key, done)

@@ -234,0 +220,0 @@ }

@@ -37,8 +37,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
const fs = require('fs')
const Aerospike = require('aerospike')
const yargs = require('yargs')
const deasync = require('deasync')
var Status = aerospike.status
// *****************************************************************************

@@ -57,13 +56,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -73,3 +67,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -127,9 +121,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -139,9 +127,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -155,4 +139,4 @@ password: argv.password

aerospike.client(config).connect(function (err, client) {
if (err.code !== Status.AEROSPIKE_OK) {
Aerospike.connect(config, function (err, client) {
if (err) {
console.error('Error: Aerospike server connection error. ', err.message)

@@ -166,2 +150,5 @@ process.exit(1)

const max_concurrent = 200
var in_flight = 0
function put_done (client, start, end, skip) {

@@ -178,15 +165,12 @@ var total = end - start + 1

return function (err, key, skippy) {
in_flight--
if (skippy === true) {
console.log('SKIP - ', key)
skipped++
} else if (err) {
console.log('ERR - ', err, key)
failure++
} else {
switch (err.code) {
case Status.AEROSPIKE_OK:
console.log('OK - ', key)
success++
break
default:
console.log('ERR - ', err, key)
failure++
}
console.log('OK - ', key)
success++
}

@@ -212,7 +196,3 @@

for (; i <= end; i++) {
var key = {
ns: argv.namespace,
set: argv.set,
key: i
}
var key = new Aerospike.Key(argv.namespace, argv.set, i)

@@ -237,2 +217,4 @@ if (skip !== 0 && ++s >= skip) {

in_flight++
deasync.loopWhile(function () { return in_flight > max_concurrent })
client.put(key, record, metadata, done)

@@ -239,0 +221,0 @@ }

@@ -37,7 +37,8 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
const fs = require('fs')
const Aerospike = require('aerospike')
const yargs = require('yargs')
const deasync = require('deasync')
var Status = aerospike.status
const Status = Aerospike.status

@@ -57,13 +58,8 @@ // *****************************************************************************

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -73,3 +69,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -127,9 +123,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -139,9 +129,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -155,4 +141,4 @@ password: argv.password

aerospike.client(config).connect(function (err, client) {
if (err.code !== Status.AEROSPIKE_OK) {
Aerospike.connect(config, function (err, client) {
if (err) {
console.error('Error: Aerospike server connection error. ', err.message)

@@ -166,2 +152,5 @@ process.exit(1)

const max_concurrent = 200
var in_flight = 0
function remove_done (client, start, end, skip) {

@@ -179,11 +168,8 @@ var total = end - start + 1

return function (err, key, skippy) {
in_flight--
if (skippy === true) {
console.log('SKIP - ', key)
skipped++
} else {
} else if (err) {
switch (err.code) {
case Status.AEROSPIKE_OK:
console.log('OK - ', key)
success++
break
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:

@@ -197,2 +183,5 @@ console.log('NOT_FOUND - ', key)

}
} else {
console.log('OK - ', key)
success++
}

@@ -218,7 +207,3 @@

for (; i <= end; i++) {
var key = {
ns: argv.namespace,
set: argv.set,
key: i
}
var key = new Aerospike.Key(argv.namespace, argv.set, i)

@@ -231,2 +216,4 @@ if (skip !== 0 && ++s >= skip) {

in_flight++
deasync.loopWhile(function () { return in_flight > max_concurrent })
client.remove(key, done)

@@ -233,0 +220,0 @@ }

@@ -37,8 +37,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const deasync = require('deasync')
var Status = aerospike.status
// *****************************************************************************

@@ -57,13 +56,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -73,3 +67,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -123,9 +117,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -135,9 +123,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -151,4 +135,4 @@ password: argv.password

aerospike.client(config).connect(function (err, client) {
if (err.code !== Status.AEROSPIKE_OK) {
Aerospike.connect(config, function (err, client) {
if (err) {
console.error('Error: Aerospike server connection error. ', err.message)

@@ -162,2 +146,5 @@ process.exit(1)

const max_concurrent = 200
var in_flight = 0
function put_done (client, start, end) {

@@ -171,8 +158,7 @@ var total = end - start + 1

return function (err, key) {
switch (err.code) {
case Status.AEROSPIKE_OK:
console.log('OK - ', key)
break
default:
console.log('ERR - ', err, key)
in_flight--
if (err) {
console.log('ERR - ', err, key)
} else {
console.log('OK - ', key)
}

@@ -194,8 +180,3 @@

for (i = start; i <= end; i++) {
var key = {
ns: argv.namespace,
set: argv.set,
key: i
}
var key = new Aerospike.Key(argv.namespace, argv.set, i)
var record = {

@@ -207,3 +188,2 @@ k: i,

}
var metadata = {

@@ -214,2 +194,4 @@ ttl: 10000,

in_flight++
deasync.loopWhile(function () { return in_flight > max_concurrent })
client.put(key, record, metadata, done)

@@ -227,22 +209,21 @@ }

return function (err, record, metadata, key) {
switch (err.code) {
case Status.AEROSPIKE_OK:
if (record.k !== key.key) {
console.log('INVALID - ', key, metadata, record)
console.log(' - record.k != key.key')
} else if (record.i !== record.k * 1000 + 123) {
console.log('INVALID - ', key, metadata, record)
console.log(' - record.i != record.k * 1000 + 123')
} else if (record.b[0] === 0xa && record.b[0] === 0xb && record.b[0] === 0xc) {
console.log('INVALID - ', key, metadata, record)
console.log(' - record.b != [0xa,0xb,0xc]')
} else {
console.log('VALID - ', key, metadata, record)
}
break
default:
console.log('ERR - ', err, key)
in_flight--
done++
if (err) {
console.log('ERR - ', err, key)
} else {
if (record.k !== key.key) {
console.log('INVALID - ', key, metadata, record)
console.log(' - record.k != key.key')
} else if (record.i !== record.k * 1000 + 123) {
console.log('INVALID - ', key, metadata, record)
console.log(' - record.i != record.k * 1000 + 123')
} else if (record.b[0] === 0xa && record.b[0] === 0xb && record.b[0] === 0xc) {
console.log('INVALID - ', key, metadata, record)
console.log(' - record.b != [0xa,0xb,0xc]')
} else {
console.log('VALID - ', key, metadata, record)
}
}
done++
if (done >= total) {

@@ -261,8 +242,5 @@ console.timeEnd(timeLabel)

for (i = start; i <= end; i++) {
var key = {
ns: argv.namespace,
set: argv.set,
key: i
}
var key = new Aerospike.Key(argv.namespace, argv.set, i)
in_flight++
deasync.loopWhile(function () { return in_flight > max_concurrent })
client.get(key, done)

@@ -269,0 +247,0 @@ }

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -120,9 +113,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -132,9 +119,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -148,40 +131,22 @@ password: argv.password

function run (client) {
var key = {
ns: argv.namespace,
set: argv.set,
key: keyv + iteration.current
}
function run (client, done) {
var key = new Aerospike.Key(argv.namespace, argv.set, keyv + iteration.current())
client.remove(key, function (err) {
if (isError(err)) {
process.exit(1)
if (!err) {
!argv.quiet && console.log('OK.')
} else if (err.code === Aerospike.status.AEROSPIKE_ERR_RECORD_NOT_FOUND) {
!argv.quiet && console.log('Key ' + key.key + ' not found.')
} else {
!argv.quiet && console.log('OK.')
iteration.next(run, client)
throw err
}
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -112,9 +105,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -124,13 +111,8 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
modlua: {
userPath: __dirname
},
// authentication
user: argv.user,

@@ -144,3 +126,3 @@ password: argv.password

function run (client) {
function run (client, done) {
var options = {

@@ -166,21 +148,11 @@ aggregationUDF: {

stream.on('end', function () {
iteration.next(run, client)
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
console.error('Error: ' + err.message)
return true
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,10 +21,9 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var sleep = require('sleep')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const sleep = require('sleep')
const iteration = require('./iteration')
var Status = aerospike.status
var scanStatus = aerospike.scanStatus
const scanStatus = Aerospike.scanStatus

@@ -49,13 +48,8 @@ // *****************************************************************************

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -65,3 +59,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -109,9 +103,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -121,13 +109,8 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
modllua: {
userPath: __dirname
},
// authentication
user: argv.user,

@@ -141,7 +124,4 @@ password: argv.password

aerospike.client(config).connect(function (err, client) {
if (err.code !== Status.AEROSPIKE_OK) {
console.error('Error: Aerospike server connection error. ', err.message)
process.exit(1)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err

@@ -179,5 +159,7 @@ //

var infoCallback = function (scanJobStats, scanId) {
if (!checkStatus(scanJobStats)) {
sleep.sleep(1)
scanBackground.Info(scanId, infoCallback)
if (checkStatus(scanJobStats)) {
client.close()
} else {
sleep.usleep(100 * 1000)
scanBackground.info(scanId, infoCallback)
}

@@ -187,5 +169,6 @@ }

var info = function (scanId) {
scanBackground.Info(scanId, infoCallback)
console.log('ScanID:', scanId)
scanBackground.info(scanId, infoCallback)
}
scanStream.on('end', info)
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -42,13 +40,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -58,3 +51,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -111,9 +104,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -123,9 +110,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -139,23 +122,14 @@ password: argv.password

function run (client) {
client.query(argv.namespace, argv.set).Info(scanId, function (res) {
function run (client, done) {
client.query(argv.namespace, argv.set).info(scanId, function (res) {
!argv.quiet && console.log(JSON.stringify(res, null, ' '))
done()
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
console.error('Error: ' + err.message)
return true
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -112,9 +105,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -124,9 +111,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -140,3 +123,3 @@ password: argv.password

function run (client) {
function run (client, done) {
var options = {

@@ -159,21 +142,11 @@ nobins: false,

stream.on('end', function () {
iteration.next(run, client)
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
console.error('Error: ' + err.message)
return true
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -20,10 +20,7 @@ // *****************************************************************************

// *****************************************************************************
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +44,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +55,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -143,9 +135,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -155,9 +141,5 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// authentication
user: argv.user,

@@ -171,55 +153,33 @@ password: argv.password

function run (client) {
var key = {
ns: argv.namespace,
set: argv.set,
key: keyv
}
function run (client, done) {
var key = new Aerospike.Key(argv.namespace, argv.set, keyv + iteration.current())
client.select(key, bins, function (err, bins, metadata, key) {
if (isError(err)) {
process.exit(1)
} else {
client.select(key, bins, function (err, bins, metadata) {
if (!err) {
var record = {}
if (argv['key']) {
record.key = key
}
if (argv['metadata']) {
record.metadata = metadata
}
if (argv['bins']) {
record.bins = bins
}
!argv.quiet && console.log('Found key ' + key.key + '.')
!argv.quiet && console.log(JSON.stringify(record, null, ' '))
iteration.next(run, client)
} else if (err.code === Aerospike.status.AEROSPIKE_ERR_RECORD_NOT_FOUND) {
!argv.quiet && console.log('Key ' + key.key + ' does not exist.')
} else {
throw err
}
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
switch (err.code) {
case Status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
console.error('Error: Not Found.')
return true
default:
console.error('Error: ' + err.message)
return true
}
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (isError(err)) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -120,9 +113,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -132,13 +119,8 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// modlua userpath
modlua: {
userPath: __dirname
},
user: argv.user,

@@ -152,33 +134,18 @@ password: argv.password

function run (client) {
function run (client, done) {
client.udfRegister(file, function (err) {
if (isError(err)) {
process.exit(1)
} else {
client.udfRegisterWait(file, 1000, function (err) {
if (isError(err)) {
process.exit(1)
} else {
!argv.quiet && console.log('UDF Registration Successful - %s', file)
}
})
}
if (err) throw err
client.udfRegisterWait(file, 1000, function (err) {
if (err) throw err
!argv.quiet && console.log('UDF Registration Successful - %s', file)
done()
})
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
console.error('Error: ' + err.message)
return true
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (err && err.code !== Status.AEROSPIKE_OK) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -21,9 +21,7 @@ // *****************************************************************************

var fs = require('fs')
var aerospike = require('aerospike')
var yargs = require('yargs')
var iteration = require('./iteration')
const Aerospike = require('aerospike')
const fs = require('fs')
const yargs = require('yargs')
const iteration = require('./iteration')
var Status = aerospike.status
// *****************************************************************************

@@ -47,13 +45,8 @@ // Options parsing

alias: 'h',
default: '127.0.0.1',
default: process.env.AEROSPIKE_HOSTS || 'localhost:3000',
describe: 'Aerospike database address.'
},
port: {
alias: 'p',
default: 3000,
describe: 'Aerospike database port.'
},
timeout: {
alias: 't',
default: 10,
default: 1000,
describe: 'Timeout in milliseconds.'

@@ -63,3 +56,3 @@ },

alias: 'l',
default: aerospike.log.INFO,
default: Aerospike.log.INFO,
describe: 'Log level [0-5]'

@@ -120,9 +113,3 @@ },

var config = {
// the hosts to attempt to connect with.
hosts: [{
addr: argv.host,
port: argv.port
}],
// log configuration
host: argv.host,
log: {

@@ -132,13 +119,8 @@ level: argv['log-level'],

},
// default policies
policies: {
timeout: argv.timeout
},
// modlua userpath
modlua: {
userPath: __dirname
},
user: argv.user,

@@ -152,28 +134,15 @@ password: argv.password

function run (client) {
function run (client, done) {
client.udfRemove(module, function (err) {
if (isError(err)) {
process.exit(1)
} else {
!argv.quiet && console.log('OK.')
iteration.next(run, client)
}
if (err) throw err
!argv.quiet && console.log('OK.')
iteration.next(run, client, done)
})
}
function isError (err) {
if (err && err.code !== Status.AEROSPIKE_OK) {
console.error('Error: ' + err.message)
return true
} else {
return false
}
}
aerospike.client(config).connect(function (err, client) {
if (err && err.code !== Status.AEROSPIKE_OK) {
process.exit(1)
} else {
run(client)
}
Aerospike.connect(config, function (err, client) {
if (err) throw err
run(client, function () {
client.close()
})
})

@@ -0,1 +1,51 @@

v2.0.0-alpha.1 / 2016-03-28
===========================
* **Improvements**
* Use asynchronous client commands of the new Aerospike C/C++ client library
version 4.0.
* Follow Node.js error-first callback conventions: The client now returns
null as the first parameter (`error`) in most callbacks when the command
was executed successfully. See
[backward incompatible API changes](https://github.com/aerospike/aerospike-client-nodejs/blob/master/docs/api-changes.md)
for more details. [#105](https://github.com/aerospike/aerospike-client-nodejs/issues/105),
[PR #106](https://github.com/aerospike/aerospike-client-nodejs/pull/106). Thanks to
[@eljefedelrodeodeljefe](https://github.com/eljefedelrodeodeljefe)!
* Add support for pluggable callback handler logic for backwards
compatibility with legacy error callback semantics.
* The `Key`, `Double` and `GeoJSON` functions can be used as
Constructors now to create instances of the respective data types, e.g.
`var key = new Key(ns, set, 'mykey1')`. Use of the `Double` and `GeoJSON`
functions as well as the `key` function as regular functions without the `new`
keyword is deprecated but still supported for backwards compatibility.
* The new `batchRead` command was added to support reading different
namespaces/bins for each key in a batch. This method requires Aerospike
server version >= 3.6.0. The batchGet/batchExists/batchSelect client
commands deprecated but still supported for backwards compatibility.
* Added `isConnected` client method to check cluster connection status.
* Improvements to the client's mocha test suite, incl. performance
improvements by re-using a single client connection for all tests.
* Add missing status codes to `Aerospike.status`.
* Added support for set compression threshold policy for write operations,
retry policy for read operations, and ttl policy for apply operations.
* **Fixes**
* Node segfault when trying to query the aerospike client after closing the
connection. [#88](https://github.com/aerospike/aerospike-client-nodejs/issues/88)
* **Changes**
* Drop support for Node.js v0.10. The Aerospike Node.js client now requires
Node.js v0.12 or later.
* The `add` client command was renamed to `incr`; the `add` function
is maintained as an alias for the new `incr` function for backwards
compatibility but is deprecated.
* The `execute` client command was renamed to `apply`; the `execute` function
is maintained as an alias for the new `apply` function for backwards
compatibility but is deprecated.
* **Documentation**
* JSDoc-style annotations have been added throughout the library code and new
API documentation is generated from the source code using JSDoc v3. This is
work-in-progress and will be completed before v2.0.0-final is released.
1.0.57 / 2016-03-18

@@ -2,0 +52,0 @@ ===================

@@ -17,493 +17,536 @@ // *****************************************************************************

'use strict'
/**
* @module aerospike
*
* @description The Aerospike module is the main entry point for the Aerospike
* Node.js Client API. It provides methods for creating new client instances
* that connect to a specific Aerospike server cluster.
*
* # Data Model
*
* ## Record
*
* A record is how the data is represented and stored in the database. A record
* is represented as an object. The keys of the object are the names of the fields
* (bins) of a record. The values for each field can either be Number, String,
* Array, Buffer or an Object itself. Aerospike supports integer, double,
* string, bytes, array and map data types.
*
* Note: Array can contain an array or an object as a value in it. Similarly
* the object can contain an array or an object as a value in it. Essentially
* nesting of arrays in an object, and nesting of objects in an array is
* allowed.
*
* Example of a record with 5 fields:
*
* ```js
* var record = {
* int_bin: 123,
* str_bin: 'xyz',
* buff_bin: new Buffer('hello world!'),
* arr_bin: [1, 2, 3],
* obj_bin: {num: 123, str: 'abc', buff: new Buffer([0xa, 0xb, 0xc])}
* }
* ```
*
* ### Unsupported Data Types
*
* Aerospike does currently not support a boolean data type. To store boolean
* values in the database the application needs to convert them to a supported
* data type as the client does not do any automatica data type conversions.
* Attempting to store a boolean value in a record bin will lead to a parameter
* error being returned by the client.
*
* ## Metadata
*
* Some operations allow you to provide metadata with a record, including:
*
* - `gen` – (optional) The generation (version) of the record. Must be an Integer.
* - `ttl` – (optional) The time-to-live in seconds (expiration) of the record. Must be an Integer.
*
* Example:
*
* ```js
* var metadata = {
* gen: 1,
* ttl: 6000
* }
* ```
*
* @example
*
* const Aerospike = require('aerospike')
* const Key = Aerospike.Key
*
* const config = {
* hosts: '192.168.0.1:3000',
* policies: {
* timeout: 50
* }
* }
*
* Aerospike.connect(config, (error, client) => {
* if (error) throw error
* var key = new Key('test', 'demo', 'key1')
* client.get(key, (error, record, meta) => {
* if (error) {
* switch (error.code) {
* case Aerospike.status.AEROSPIKE_ERR_RECORD_NOT_FOUND:
* console.error('record ' + key.key + ' does not exist')
* break;
* default:
* throw error
* }
* } else {
* console.log(record, meta)
* }
* client.close()
* })
* })
*/
var as = require('../build/Release/aerospike.node')
var LargeList = require('./llist.js')
var stream = require('stream')
var inherits = require('util').inherits
const as = require('../build/Release/aerospike.node')
// ****************************************************************************
// RecordStream - used for Scan and Query operations
// ****************************************************************************
const Client = require('./client.js')
const dataTypes = require('./data_types.js')
const filter = require('./filter.js')
const operator = require('./operator.js')
function RecordStream () {}
/**
* Whether event loop resources have been released
*
* @type {boolean}
* @private
*/
var _eventLoopReleased = false
inherits(RecordStream, stream)
RecordStream.prototype.writable = false
RecordStream.prototype.readable = true
RecordStream.prototype._read = function () {}
// ****************************************************************************
// Streaming Scan Operation
// ****************************************************************************
// wrapper function around query_foreach function.
// This wrapper receives results from V8 layer and emits 'data' event
// to node.js layer.
// On error, emits 'error' event.
// When all the results are consumed it emits 'end' event.
var execute = function execute () {
var self = this
var rs = new RecordStream()
var onResult = function onResult (res, key) {
rs.emit('data', res)
}
var onError = function onError (error) {
rs.emit('error', error)
}
var onEnd = function onEnd (end) {
if (!self.isQuery && self.hasUDF) {
self.scanId = end
rs.emit('end', end)
} else {
rs.emit('end')
}
}
if (self.isQuery) {
// it is a query request.
if (self.hasUDF) {
// query UDF is not supported currently.
throw new Error('Query UDF feature not supported')
} else {
// normal query and query aggregation is invoked here.
self.foreach(onResult, onError, onEnd)
}
} else {
// it is a scan request
if (self.hasUDF) {
// scan with a UDF - so background scan.
// background scan does not return records. callback for record is NULL.
self.foreach(null, onError, onEnd)
} else {
// it is a foreground scan or scan aggregation.
self.foreach(onResult, onError, onEnd)
}
}
return rs
/**
* @function module:aerospike.client
*
* @summary Creates a new {@link Client} instance.
*
* @param {Client~Config} config - The configuration for the client.
*/
function client (config) {
config = config || {}
return new Client(this, config)
}
var Info = function info (scanId, callback) {
var self = this
self.queryInfo(scanId, callback)
}
var query = function query (ns, set, options) {
if (typeof set !== 'string') {
set = ''
/**
* @function module:aerospike.connect
*
* @summary Creates a new {@link Client} instance and connects to the Aerospike cluster.
*
* @param {Client~Config} config - The configuration for the client.
* @param {Client~connectCallback} callback - The funcation to call, once the client is connected to the cluster successfully.
*/
function connect (config, callback) {
if (typeof config === 'function') {
callback = config
config = null
}
if (!options) {
options = null
}
var queryObj = this.createQuery(ns, set, options)
var queryProto = Object.getPrototypeOf(queryObj)
if (!queryProto.execute) {
queryProto.execute = execute
}
if (!queryProto.Info) {
queryProto.Info = Info
}
return queryObj
}
var createIntegerIndex = function createIntegerIndex (options, callback) {
var policy
var set
if (options && options.policy) {
policy = options.policy
}
if (options && options.set) {
set = options.set
}
this.indexCreate(
options.ns
, set
, options.bin
, options.index
, as.indexType.NUMERIC
, policy
, callback
)
}
var createStringIndex = function createStringIndex (options, callback) {
var policy
var set
if (options && options.policy) {
policy = options.policy
}
if (options && options.set) {
set = options.set
}
this.indexCreate(
options.ns
, set
, options.bin
, options.index
, as.indexType.STRING
, policy
, callback
)
}
var createGeo2DSphereIndex =
function createGeo2DSphereIndex (options, callback) {
var policy
var set
if (options && options.policy) {
policy = options.policy
}
if (options && options.set) {
set = options.set
}
this.indexCreate(
options.ns
, set
, options.bin
, options.index
, as.indexType.GEO2DSPHERE
, policy
, callback
)
}
var parseOperateArgs = function parseOperateArgs (args) {
var arglength = args.length
var options = {}
options.callback = args[arglength - 1]
if (arglength === 3) {
options.policy = undefined
options.metadata = undefined
} else if (arglength === 4) {
options.metadata = args[arglength - 2]
options.policy = undefined
} else if (arglength === 5) {
options.policy = args[arglength - 2]
options.metadata = args[arglength - 3]
}
return options
}
var add = function add (key, bins, metadata, policy, callback) {
var options = parseOperateArgs(arguments)
// populate ops from bins argument here
var ops = []
var prop
for (prop in bins) {
ops.push(aerospike.operator.incr(prop, bins[prop]))
}
this.operate(key, ops, options.metadata, options.policy, options.callback)
}
var append = function append (key, bins, metadata, policy, callback) {
var options = parseOperateArgs(arguments)
// populate ops from bins argument here
var ops = []
var prop
for (prop in bins) {
ops.push(aerospike.operator.append(prop, bins[prop]))
}
this.operate(key, ops, options.metadata, options.policy, options.callback)
}
var prepend = function prepend (key, bins, metadata, policy, callback) {
var options = parseOperateArgs(arguments)
// populate ops from bins argument here
var ops = []
var prop
for (prop in bins) {
ops.push(aerospike.operator.prepend(prop, bins[prop]))
}
this.operate(key, ops, options.metadata, options.policy, options.callback)
}
// ****************************************************************************
// `aerospike` shim
// ****************************************************************************
var aerospike = {
key: as.key,
status: as.status,
policy: as.policy,
language: as.language,
log: as.log,
scanPriority: as.scanPriority,
predicates: as.predicates,
indexType: as.indexType,
scanStatus: as.scanStatus,
Double: as.Double
}
aerospike.client = function client (config) {
config = config || {}
config.hosts = config.hosts || process.env.AEROSPIKE_HOSTS || 'localhost'
if (typeof config.hosts === 'string') {
config.hosts = parseHostsString(config.hosts)
}
var client = as.client(config)
if (client === null) {
throw new Error('Client object creation failed - null value returned')
}
client.config = config
var proto = Object.getPrototypeOf(client)
if (!proto.createQuery) {
proto.createQuery = proto.query
proto.query = query
}
if (!proto.createIntegerIndex) {
proto.createIntegerIndex = createIntegerIndex
}
if (!proto.createStringIndex) {
proto.createStringIndex = createStringIndex
}
if (!proto.createGeo2DSphereIndex) {
proto.createGeo2DSphereIndex = createGeo2DSphereIndex
}
if (!proto.LargeList) {
proto.LargeList = LargeList
}
if (!proto.add) {
proto.add = add
}
if (!proto.append) {
proto.append = append
}
if (!proto.prepend) {
proto.prepend = prepend
}
var client = this.client(config)
client.connect(callback)
return client
}
var populateOp = function populateOp (op, bin, props) {
var obj = {}
obj.operation = op
obj.bin = bin
for (var prop in props) {
obj[prop] = props[prop]
}
return obj
/**
* @function module:aerospike.key
*
* @summary Creates a new {@link Key} instance.
*
* @description Provided for backward compatibility. Use the {@link Key} class
* constructor instead.
*
* @param {string} ns - The Namespace to which the key belongs.
* @param {string} set - The Set to which the key belongs.
* @param {(string|number|Buffer)} value - The unique key value. Keys can be
* strings, integers or an instance of the Buffer class.
*
* @deprecated in v2.0
*/
function key (ns, set, key) {
return new dataTypes.Key(ns, set, key)
}
var populateCdtOp = function populateCdtOp (op, bin, props) {
var obj = {}
obj.cdtOperation = op
obj.bin = bin
for (var prop in props) {
obj[prop] = props[prop]
/**
* @function module:aerospike.releaseEventLoop
*
* @summary Release event loop resources.
*
* @description This method releases the event loop resources held by the
* Aerospike C client library. It is normally called automatically when the
* Aerospike Node.js client instance is closed. However, when the application
* needs to create multiple client instances, then the event loop resources
* need to be released explicitly by calling this method and `releaseEventLoop
* = false` needs to be passed in the {@link Client#close} method.
*
* @example <caption>Working with multiple client instances.</caption>
*
* const Aerospike = require('aerospike')
*
* // called one or more times to handle a new work request
* function handleRequest (request) {
* Aerospike.connect(function (err, client) {
* if (err) {
* // handle error
* }
* // handle request
* client.close(false) // do not release event loop
* })
* }
*
* // called when application shuts down
* function shutdown () {
* Aerospike.releaseEventLoop()
* }
*/
function releaseEventLoop () {
_eventLoopReleased = true
if (as.get_cluster_count() > 0) {
setTimeout(releaseEventLoop, 5)
} else {
as.release_as_event_loop()
}
return obj
}
var readOp = function read (bin) {
return populateOp(as.operations.READ, bin)
function eventLoopReleased () {
return _eventLoopReleased
}
var writeOp = function write (bin, value) {
return populateOp(as.operations.WRITE, bin, {value: value})
}
function Aerospike () {
// classes && data types
this.Client = Client
this.AerospikeError = dataTypes.AerospikeError
this.Double = dataTypes.Double
this.GeoJSON = dataTypes.GeoJSON
this.Key = dataTypes.Key
var incrOp = function incr (bin, value) {
return populateOp(as.operations.INCR, bin, {value: value})
}
// top-level methods exposed through Aerospike module
this.client = client
this.connect = connect
this.eventLoopReleased = eventLoopReleased
this.key = key
this.releaseEventLoop = releaseEventLoop
var appendOp = function append (bin, value) {
return populateOp(as.operations.APPEND, bin, {value: value})
}
// filter && operator commands
this.filter = filter
this.operator = operator
var prependOp = function prepend (bin, value) {
return populateOp(as.operations.PREPEND, bin, {value: value})
}
// enums imported from C client library
this.indexType = as.indexType
this.language = as.language
this.log = as.log
this.policy = as.policy
this.predicates = as.predicates
this.scanPriority = as.scanPriority
this.scanStatus = as.scanStatus
var touchOp = function touch (bin, ttl) {
return populateOp(as.operations.TOUCH, bin, {ttl: ttl})
/**
* @member {Object} status
* @readonly
*
* @description List of error status codes.
*
* @property {number} AEROSPIKE_ERR_INVALID_NODE - Node invalid or could not
* be found.
*
* @property {number} AEROSPIKE_ERR_NO_MORE_CONNECTIONS - Asynchronous
* connection error.
*
* @property {number} AEROSPIKE_ERR_ASYNC_CONNECTION - Asynchronous
* connection error.
*
* @property {number} AEROSPIKE_ERR_CLIENT_ABORT - Query or scan was aborted
* in user's callback.
*
* @property {number} AEROSPIKE_ERR_INVALID_HOST - Host name could not be
* found in DNS lookup.
*
* @property {number} AEROSPIKE_NO_MORE_RECORDS - No more records available
* when parsing batch, scan or query records.
*
* @property {number} AEROSPIKE_ERR_PARAM - Invalid client API parameter.
*
* @property {number} AEROSPIKE_ERR_CLIENT - Generic client API usage error.
*
* @property {number} AEROSPIKE_ERR - Generic client error (deprecated)
*
* @property {number} AEROSPIKE_OK - Generic success.
*
* @property {number} AEROSPIKE_ERR_SERVER - Generic error returned by the
* server.
*
* @property {number} AEROSPIKE_ERR_RECORD_NOT_FOUND - Record does not exist
* in database. May be returned by read, or write with policy
* `{ exists: Aerospike.policy.exists.UPDATE }`
*
* @property {number} AEROSPIKE_ERR_RECORD_GENERATION - Generation of record
* in database does not satisfy write policy.
*
* @property {number} AEROSPIKE_ERR_REQUEST_INVALID - Request protocol
* invalid, or invalid protocol field.
*
* @property {number} AEROSPIKE_ERR_RECORD_EXISTS - Record already exists.
* May be returned by write with policy
* `{ exists: Aerospike.policy.exists.CREATE }`.
*
* @property {number} AEROSPIKE_ERR_BIN_EXISTS - Bin already exists.
*
* @property {number} AEROSPIKE_ERR_CLUSTER_CHANGE - A cluster state change
* occurred during the request.
*
* @property {number} AEROSPIKE_ERR_SERVER_FULL - The server node is running
* out of memory and/or storage device space reserved for the specified
* namespace.
*
* @property {number} AEROSPIKE_ERR_TIMEOUT - Request timed out. Can be
* triggered by client or server.
*
* @property {number} AEROSPIKE_ERR_NO_XDR - XDR not available for the
* cluster.
*
* @property {number} AEROSPIKE_ERR_CLUSTER - Generic cluster discovery &
* connection error.
*
* @property {number} AEROSPIKE_ERR_BIN_INCOMPATIBLE_TYPE - Bin modification
* operation cannot be done on an existing bin due to its value type.
*
* @property {number} AEROSPIKE_ERR_RECORD_TOO_BIG - Record being
* (re-)written cannot fit in a storage write block.
*
* @property {number} AEROSPIKE_ERR_RECORD_BUSY - Too many concurrent
* requests for one record - a "hot key" situation.
*
* @property {number} AEROSPIKE_ERR_SCAN_ABORTED - Scan aborted by user.
*
* @property {number} AEROSPIKE_ERR_UNSUPPORTED_FEATURE - Sometimes our doc,
* or our customers' wishes, get ahead of us. We may have processed something
* that the server is not ready for (unsupported feature).
*
* @property {number} AEROSPIKE_ERR_BIN_NOT_FOUND - Bin-level replace-only
* supported on server but not on client.
*
* @property {number} AEROSPIKE_ERR_DEVICE_OVERLOAD - The server node's
* storage device(s) can't keep up with the write load.
*
* @property {number} AEROSPIKE_ERR_RECORD_KEY_MISMATCH - Record key sent
* with transaction did not match key stored on server.
*
* @property {number} AEROSPIKE_ERR_NAMESPACE_NOT_FOUND - Namespace in
* request not found on server.
*
* @property {number} AEROSPIKE_ERR_BIN_NAME - Sent too-long bin name (should
* be impossible in this client) or exceeded namespace's bin name quota.
*
* @property {number} AEROSPIKE_ERR_FAIL_FORBIDDEN - Operation not allowed at
* this time.
*
* @property {number} AEROSPIKE_QUERY_END - There are no more records left
* for query.
*
* @property {number} AEROSPIKE_SECURITY_NOT_SUPPORTED - Security
* functionality not supported by connected server.
*
* @property {number} AEROSPIKE_SECURITY_NOT_ENABLED - Security functionality
* not enabled by connected server.
*
* @property {number} AEROSPIKE_SECURITY_SCHEME_NOT_SUPPORTED - Security type
* not supported by connected server.
*
* @property {number} AEROSPIKE_INVALID_COMMAND - Administration command is
* invalid.
*
* @property {number} AEROSPIKE_INVALID_FIELD - Administration field is
* invalid.
*
* @property {number} AEROSPIKE_ILLEGAL_STATE - Security protocol not
* followed.
*
* @property {number} AEROSPIKE_INVALID_USER - User name is invalid.
*
* @property {number} AEROSPIKE_USER_ALREADY_EXISTS - User was previously
* created.
*
* @property {number} AEROSPIKE_INVALID_PASSWORD - Password is invalid.
*
* @property {number} AEROSPIKE_EXPIRED_PASSWORD - Password has expired.
*
* @property {number} AEROSPIKE_FORBIDDEN_PASSWORD - Forbidden password (e.g.
* recently used).
*
* @property {number} AEROSPIKE_INVALID_CREDENTIAL - Security credential is
* invalid.
*
* @property {number} AEROSPIKE_INVALID_ROLE - Role name is invalid.
*
* @property {number} AEROSPIKE_ROLE_ALREADY_EXISTS - Role name already
* exists.
*
* @property {number} AEROSPIKE_INVALID_PRIVILEGE - Privilege is invalid.
*
* @property {number} AEROSPIKE_NOT_AUTHENTICATED - User must be
* authenticated before performing database operations.
*
* @property {number} AEROSPIKE_ROLE_VIOLATION - User does not possess the
* required role to perform the database operation.
*
* @property {number} AEROSPIKE_ERR_UDF - Generic UDF error.
*
* @property {number} AEROSPIKE_ERR_LARGE_ITEM_NOT_FOUND - The requested item
* in a large collection was not found.
*
* @property {number} AEROSPIKE_ERR_BATCH_DISABLED - Batch functionality has
* been disabled.
*
* @property {number} AEROSPIKE_ERR_BATCH_MAX_REQUESTS_EXCEEDED - Batch max.
* requests have been exceeded.
*
* @property {number} AEROSPIKE_ERR_BATCH_QUEUES_FULL - All batch queues are
* full.
*
* @property {number} AEROSPIKE_ERR_GEO_INVALID_GEOJSON - Invalid/unsupported
* GeoJSON.
*
* @property {number} AEROSPIKE_ERR_INDEX_FOUND - Index found.
*
* @property {number} AEROSPIKE_ERR_INDEX_NOT_FOUND - Index not found.
*
* @property {number} AEROSPIKE_ERR_INDEX_OOM - Index is out of memory.
*
* @property {number} AEROSPIKE_ERR_INDEX_NOT_READABLE - Unable to read the
* index.
*
* @property {number} AEROSPIKE_ERR_INDEX - Generic secondary index error.
*
* @property {number} AEROSPIKE_ERR_INDEX_NAME_MAXLEN - Index name is too long.
*
* @property {number} AEROSPIKE_ERR_INDEX_MAXCOUNT - System alrady has
* maximum allowed indeces.
*
* @property {number} AEROSPIKE_ERR_QUERY_ABORTED - Query was aborted.
*
* @property {number} AEROSPIKE_ERR_QUERY_QUEUE_FULL - Query processing queue
* is full.
*
* @property {number} AEROSPIKE_ERR_QUERY_TIMEOUT - Secondary index query
* timed out on server.
*
* @property {number} AEROSPIKE_ERR_QUERY - Generic query error.
*
* @property {number} AEROSPIKE_ERR_UDF_NOT_FOUND - UDF does not exist.
*
* @property {number} AEROSPIKE_ERR_LUA_FILE_NOT_FOUND - LUA file does not exist.
*
* @property {number} AEROSPIKE_ERR_LDT_INTERNAL - Internal LDT error.
*
* @property {number} AEROSPIKE_ERR_LDT_NOT_FOUND - LDT item not found.
*
* @property {number} AEROSPIKE_ERR_LDT_UNIQUE_KEY - Unique key violation:
* Duplicated item inserted when 'unique key' was set.
*
* @property {number} AEROSPIKE_ERR_LDT_INSERT - General error during insert
* operation.
*
* @property {number} AEROSPIKE_ERR_LDT_SEARCH - General error during search
* operation.
*
* @property {number} AEROSPIKE_ERR_LDT_DELETE - General error during delete
* operation.
*
* @property {number} AEROSPIKE_ERR_LDT_INPUT_PARM - General input parameter
* error.
*
* @property {number} AEROSPIKE_ERR_LDT_TYPE_MISMATCH - LDT type mismatch for
* this bin.
*
* @property {number} AEROSPIKE_ERR_LDT_NULL_BIN_NAME - The supplied LDT bin
* name is null.
*
* @property {number} AEROSPIKE_ERR_LDT_BIN_NAME_NOT_STRING - The supplied
* LDT bin name must be a string.
*
* @property {number} AEROSPIKE_ERR_LDT_BIN_NAME_TOO_LONG - The supplied LDT
* bin name exceeded the 14 char limit.
*
* @property {number} AEROSPIKE_ERR_LDT_TOO_MANY_OPEN_SUBRECS - Internal
* Error: too many open records at one time.
*
* @property {number} AEROSPIKE_ERR_LDT_TOP_REC_NOT_FOUND - Internal Error:
* Top Record not found.
*
* @property {number} AEROSPIKE_ERR_LDT_SUB_REC_NOT_FOUND - Internal Error:
* Sub Record not found.
*
* @property {number} AEROSPIKE_ERR_LDT_BIN_DOES_NOT_EXIST - LDT Bin does not
* exist.
*
* @property {number} AEROSPIKE_ERR_LDT_BIN_ALREADY_EXISTS - Collision: LDT
* Bin already exists.
*
* @property {number} AEROSPIKE_ERR_LDT_BIN_DAMAGED - LDT control structures
* in the Top Record are damanged. Cannot proceed.
*
* @property {number} AEROSPIKE_ERR_LDT_SUBREC_POOL_DAMAGED - Internal Error:
* LDT Subrecord pool is damanged.
*
* @property {number} AEROSPIKE_ERR_LDT_SUBREC_DAMAGED - LDT control
* structure in the Sub Record are damaged. Cannot proceed.
*
* @property {number} AEROSPIKE_ERR_LDT_SUBREC_OPEN - Error encountered while
* opening a Sub Record.
*
* @property {number} AEROSPIKE_ERR_LDT_SUBREC_UPDATE - Error encountered
* while updating a Sub Record.
*
* @property {number} AEROSPIKE_ERR_LDT_SUBREC_CREATE - Error encountered
* while creating a Sub Record.
*
* @property {number} AEROSPIKE_ERR_LDT_SUBREC_DELETE - Error encountered
* while deleting a Sub Record.
*
* @property {number} AEROSPIKE_ERR_LDT_SUBREC_CLOSE - Error encountered
* while closing a Sub Record.
*
* @property {number} AEROSPIKE_ERR_LDT_TOPREC_UPDATE - Error encountered
* while updating a TOP Record.
*
* @property {number} AEROSPIKE_ERR_LDT_TOPREC_CREATE - Error encountered
* while creating a TOP Record.
*
* @property {number} AEROSPIKE_ERR_LDT_FILTER_FUNCTION_BAD - The filter
* function name was invalid.
*
* @property {number} AEROSPIKE_ERR_LDT_FILTER_FUNCTION_NOT_FOUND - The
* filter function was not found.
*
* @property {number} AEROSPIKE_ERR_LDT_KEY_FUNCTION_BAD - The function to
* extract the Unique Value from a complex object was invalid.
*
* @property {number} AEROSPIKE_ERR_LDT_KEY_FUNCTION_NOT_FOUND - The function
* to extract the Unique Value from a complex object was not found.
*
* @property {number} AEROSPIKE_ERR_LDT_TRANS_FUNCTION_BAD - The function to
* transform an object into a binary form was invalid.
*
* @property {number} AEROSPIKE_ERR_LDT_TRANS_FUNCTION_NOT_FOUND - The
* function to transform an object into a binary form was not found.
*
* @property {number} AEROSPIKE_ERR_LDT_UNTRANS_FUNCTION_BAD - The function
* to untransform an object from binary form to live form was invalid.
*
* @property {number} AEROSPIKE_ERR_LDT_UNTRANS_FUNCTION_NOT_FOUND - The
* function to untransform an object from binary form to live form was not
* found.
*
* @property {number} AEROSPIKE_ERR_LDT_USER_MODULE_BAD - The UDF user module
* name for LDT Overrides was invalid.
*
* @property {number} AEROSPIKE_ERR_LDT_USER_MODULE_NOT_FOUND - The UDF user
* module name for LDT Overrides was not found.
*/
this.status = as.status
}
module.exports = new Aerospike()
var listAppendOp = function listAppend (bin, value) {
return populateCdtOp(as.cdt_operations.LIST_APPEND, bin, {value: value})
}
var listAppendItemsOp = function listAppendItems (bin, list) {
return populateCdtOp(as.cdt_operations.LIST_APPEND_ITEMS, bin,
{list: list})
}
var listInsertOp = function listInsert (bin, index, value) {
return populateCdtOp(as.cdt_operations.LIST_INSERT, bin,
{index: index, value: value})
}
var listInsertItemsOp = function listInsertItems (bin, index, list) {
return populateCdtOp(as.cdt_operations.LIST_INSERT_ITEMS, bin,
{index: index, list: list})
}
var listPopOp = function listPop (bin, index) {
return populateCdtOp(as.cdt_operations.LIST_POP, bin, {index: index})
}
var listPopRangeOp = function listPopRange (bin, index, count) {
return populateCdtOp(as.cdt_operations.LIST_POP_RANGE, bin,
{index: index, count: count})
}
var listRemoveOp = function listRemove (bin, index) {
return populateCdtOp(as.cdt_operations.LIST_REMOVE, bin, {index: index})
}
var listRemoveRangeOp = function listRemoveRange (bin, index, count) {
return populateCdtOp(as.cdt_operations.LIST_REMOVE_RANGE, bin,
{index: index, count: count})
}
var listClearOp = function listClear (bin) {
return populateCdtOp(as.cdt_operations.LIST_CLEAR, bin)
}
var listSetOp = function listSet (bin, index, value) {
return populateCdtOp(as.cdt_operations.LIST_SET, bin,
{index: index, value: value})
}
var listTrimOp = function listTrim (bin, index, count) {
return populateCdtOp(as.cdt_operations.LIST_TRIM, bin,
{index: index, count: count})
}
var listGetOp = function listGet (bin, index) {
return populateCdtOp(as.cdt_operations.LIST_GET, bin, {index: index})
}
var listGetRangeOp = function listGetRange (bin, index, count) {
return populateCdtOp(as.cdt_operations.LIST_GET_RANGE, bin,
{index: index, count: count})
}
var listSizeOp = function listSize (bin) {
return populateCdtOp(as.cdt_operations.LIST_SIZE, bin)
}
aerospike.operator = {
read: readOp,
write: writeOp,
incr: incrOp,
append: appendOp,
prepend: prependOp,
touch: touchOp,
listAppend: listAppendOp,
listAppendItems: listAppendItemsOp,
listInsert: listInsertOp,
listInsertItems: listInsertItemsOp,
listPop: listPopOp,
listPopRange: listPopRangeOp,
listRemove: listRemoveOp,
listRemoveRange: listRemoveRangeOp,
listClear: listClearOp,
listSet: listSetOp,
listTrim: listTrimOp,
listGet: listGetOp,
listGetRange: listGetRangeOp,
listSize: listSizeOp
}
var equalFilter = function equalFilter (args) {
var obj = {}
obj.predicate = as.predicates.EQUAL
if (typeof arguments[1] === 'number') {
obj.type = as.indexType.NUMERIC
} else if (typeof arguments[1] === 'string') {
obj.type = as.indexType.STRING
}
obj.bin = arguments[0]
obj.val = arguments[1]
return obj
}
var rangeFilter = function rangeFilter (args) {
var obj = {}
obj.predicate = as.predicates.RANGE
obj.type = as.indexType.NUMERIC
obj.bin = arguments[0]
obj.min = arguments[1]
obj.max = arguments[2]
return obj
}
var geoWithinFilter = function geoWithinFilter (args) {
var obj = {}
obj.predicate = as.predicates.RANGE
obj.type = as.indexType.GEO2DSPHERE
obj.bin = arguments[0]
obj.val = arguments[1]
return obj
}
var geoContainsFilter = function geoContainsFilter (args) {
var obj = {}
obj.predicate = as.predicates.RANGE
obj.type = as.indexType.GEO2DSPHERE
obj.bin = arguments[0]
obj.val = arguments[1]
return obj
}
aerospike.filter = {
equal: equalFilter,
range: rangeFilter,
geoWithin: geoWithinFilter,
geoContains: geoContainsFilter
}
function GeoJSON (strval) {
if (this instanceof GeoJSON) {
this.str = strval
} else {
return new GeoJSON(strval)
}
}
aerospike.GeoJSON = GeoJSON
function parseHostsString (str) {
if (!str || !/^([a-z0-9-_\.]+(:\d+)?,?)+$/i.test(str)) {
throw new Error('Invalid aerospike connection string: ' + str)
}
return str
.split(',')
.filter(function (x) { return !!x })
.map(function (host) {
var temp = host.split(':')
return {
addr: temp[0] || 'localhost',
port: parseInt(temp[1], 10) || 3000
}
})
}
module.exports = aerospike
as.register_as_event_loop()

@@ -17,3 +17,3 @@ // *****************************************************************************

const STRACE_RE = /at ([\w.]+) \((.*):(\d+):(\d+)\)/ // pattern for parsing a line of a stack trace
const LLIST_STRACE_RE = /at LargeList\.(\w+) \((.*):(\d+):(\d+)\)/ // pattern for parsing a line of a stack trace

@@ -29,9 +29,7 @@ // Creates a new aerospike.error object with the given error code and message.

var line = strace.shift()
if (line.match(/LargeList\.instance/)) {
var match = line.match(STRACE_RE)
if (match) {
error.func = match[1].split('.').pop()
error.file = match[2]
error.line = match[3]
}
var match = LLIST_STRACE_RE.exec(line)
if (match && match[1] !== 'execute') {
error.func = match[1]
error.file = match[2]
error.line = match[3]
break

@@ -69,131 +67,388 @@ }

// Generic function to execute any LDT function.
// Invokes udf execute with the corresponding LDT
// function name, file name as llist - file in which
// all the LDT functions are implemented.
// some function applies an UDF/Filter on values returned by LDT.
// Those values are passed as {module:" ", funcname:" ", args: " "} object.
// Parse the above object format and populate UDFArgs accordingly.
// Position of the UDF arguments is passed to parse effectively.
var executeLDTFunction = function (ldtFunc, ldtargs, arglength, udfPosition) {
if (typeof udfPosition === 'undefined') {
udfPosition = -1
}
/**
* @class LargeList
* @classdesc Create and Manage a list within a single bin.
*
* @param {Key} key - The key used to locate the record in the cluster.
* @param {string} binName - Name of the LDT bin.
* @param {Client~ApplyPolicy} [policy] - The Apply Policy to use for this operation.
* @param {string} [createModule] - The LUA function name that initializes the
* list configuration parameters; pass <code>null</code> for default list.
*
* @example
*
* const Aerospike = require('aerospike')
* Aerospike.connect((error, client) => {
* if (error) throw error
* var key = new Aerospike.Key('test', 'demo', 'llistKey')
* var binName = 'LDTbin'
* var policy = { timeout: 1000 }
* var createModule = 'ListInitializer'
* var llist = client.LargeList(key, binName, policy, createModule)
* // operate on large list
* client.close()
* })
*
*/
function LargeList (client, key, binName, writePolicy, createModule) {
this.key = key
this.binName = binName
this.writePolicy = writePolicy
this.createModule = createModule
this.module = 'llist'
if (checkArgs(ldtargs, arglength) !== 0) {
return -1
}
var udfargs = [this.binName]
for (var i = 0; i < arglength - 1; i++) {
if (udfPosition === i) {
udfargs.push(ldtargs[i].module)
udfargs.push(ldtargs[i].funcname)
udfargs.push(ldtargs[i].args)
} else {
udfargs.push(ldtargs[i])
}
}
udfargs.push(this.createModule)
var udf = {
module: this.module,
funcname: ldtFunc,
args: udfargs
}
this.client.execute(this.key, udf, this.writePolicy, ldtargs[arglength - 1])
}
var self = this
var LargeList = function LargeList (key, binName, writePolicy, createModule) {
var instance = {}
instance.client = this
instance.key = key
instance.writePolicy = writePolicy
instance.binName = binName
instance.module = 'llist'
instance.createModule = createModule
instance.executeLDTFunction = executeLDTFunction
// Handle all the variations of add function.
// 1. val can be a single value
// 2. val can be an array of values
instance.add = function (val, callback) {
if (Array.isArray(arguments[0])) {
this.executeLDTFunction('add_all', arguments, 2)
} else {
this.executeLDTFunction('add', arguments, 2)
// Generic function to execute any LDT function.
// Invokes udf execute with the corresponding LDT function name, file name as
// llist - file in which all the LDT functions are implemented. Some function
// applies an UDF/Filter on values returned by LDT. Those values are passed
// as {module:" ", funcname:" ", args: " "} object. Parse the above object
// format and populate UDFArgs accordingly. Position of the UDF arguments is
// passed to parse effectively.
this.execute = function (ldtFunc, ldtargs, arglength, udfPosition) {
if (typeof udfPosition === 'undefined') {
udfPosition = -1
}
}
// Handle all the variations of update.
// same as add variations
instance.update = function (val, callback) {
if (Array.isArray(arguments[0])) {
this.executeLDTFunction('update_all', arguments, 2)
} else {
this.executeLDTFunction('update', arguments, 2)
if (checkArgs(ldtargs, arglength) !== 0) {
return -1
}
}
// Handle all the variations of remove.
// Same as add variations and the following
instance.remove = function (val, callback) {
if (Array.isArray(val)) {
this.executeLDTFunction('remove_all', arguments, 2)
} else {
this.executeLDTFunction('remove', arguments, 2)
var udfargs = [this.binName]
for (var i = 0; i < arglength - 1; i++) {
if (udfPosition === i) {
udfargs.push(ldtargs[i].module)
udfargs.push(ldtargs[i].funcname)
udfargs.push(ldtargs[i].args)
} else {
udfargs.push(ldtargs[i])
}
}
udfargs.push(this.createModule)
var udf = {
module: this.module,
funcname: ldtFunc,
args: udfargs
}
var callback = ldtargs[arglength - 1]
client.execute(self.key, udf, self.writePolicy, callback)
}
}
// Can pass a range to remove the values within the range (inclusive).
instance.removeRange = function (valBegin, valEnd, callback) {
this.executeLDTFunction('remove_range', arguments, 3)
/**
* @function LargeList#add
*
* @summary Adds a single value or an array of values to an existing Large
* List.
*
* @description
*
* The operation fails if the value's key exists and the list is configured for
* unique keys.
*
* If the value is a map, the key is identified by the <code>key</code> entry.
* Otherwise, the value is the key. If the large list does not exist, create it
* using the specified <code>userModule</code> configuration.
*
* @param {(*|Array.<*>)} value - Value(s) to add
* @param {LargeList~valueCallback} callback - The function to call when the operation completes with the result of the operation.
*
* @example <caption>Adding a single value</caption>
*
* llist.add({'key': 'ldt_key', 'value': 'ldtvalue'}, (error, response) => {
* if (error) throw error
* // handle success
* })
*
* @example <caption>Adding a list of values</caption>
*
* var valArray = [{'key': 'ldt_key', 'value': 'ldtvalue'}, {'key': 'ldt_array', 'value': 'ldtarrayvalue'}]
* llist.add(valArray, (error, response) => {
* if (error) throw error
* // handle success
* })
*/
LargeList.prototype.add = function (value, callback) {
if (Array.isArray(value)) {
this.execute('add_all', arguments, 2)
} else {
this.execute('add', arguments, 2)
}
}
instance.find = function find (val, filterArgs, callback) {
var arglength = arguments.length
if (arglength === 2) {
this.executeLDTFunction('find', arguments, 2)
} else if (arglength === 3) {
this.executeLDTFunction('find', arguments, 3, 1)
} else {
return
}
/**
* @function LargeList#update
*
* @summary Update/add a single value or array of values depending on if the key exists or not.
*
* @description
*
* If the value is a map, the key is identified by the <code>key</code> entry.
* Otherwise, the value is the key. If the large list does not exist, create it
* using the specified <code>userModule</code> configuration.
*
* @param {(*|Array.<*>)} value - Value(s) to update
* @param {LargeList~valueCallback} callback - The function to call when the operation completes with the result of the operation.
*
* @example <caption>Updating a single value</caption>
*
* llist.update({'key': 'ldt_key', 'value': 'ldtupdatedvalue'}, (error, response) => {
* if (error) throw error
* // handle success
* })
*
* @example <caption>Updating a list of values</caption>
*
* var valArray = [{'key': 'ldt_key', 'value': 'ldtupdatevalue'}, {'key': 'ldt_array', 'value': 'ldtarrayupdatedvalue'}]
* llist.update(valArray, (error, response) => {
* if (error) throw error
* // handle success
* })
*/
LargeList.prototype.update = function (value, callback) {
if (Array.isArray(value)) {
this.execute('update_all', arguments, 2)
} else {
this.execute('update', arguments, 2)
}
}
// apply filter - pass all elements through a filter and return all that qualify.
instance.filter = function (filterArgs, callback) {
this.executeLDTFunction('filter', arguments, 1, 0)
/**
* @function LargeList#remove
*
* @summary Deletes a single value or a list of values from the Large list.
*
* @param {(*|Array.<*>)} value - Value(s) to delete.
* @param {LargeList~valueCallback} callback - The function to call when the operation completes with the result of the operation.
*
* @example <caption>Removing a single value</caption>
*
* llist.remove({'key': 'ldt_key'}, (error, response) => {
* if (error) throw error
* // handle success
* })
*
* @example <caption>Removing a list of values</caption>
*
* var valArray = [{'key': 'ldt_key'}, {'key': 'ldt_array'}]
* llist.remove(valArray, (error, response) => {
* if (error) throw error
* // handle success
* })
*/
LargeList.prototype.remove = function (value, callback) {
if (Array.isArray(value)) {
this.execute('remove_all', arguments, 2)
} else {
this.execute('remove', arguments, 2)
}
}
instance.findRange = function (valBegin, valEnd, filterArgs, callback) {
var arglength = arguments.length
/**
* @function LargeList#removeRange
*
* @summary Removes values from the list between a given start and end value.
*
* @param {*} valBegin - Low value of the range (inclusive)
* @param {*} valEnd - High value of the range (inclusive)
* @param {LargeList~valueCallback} callback - The function to call when the operation completes with the result of the operation.
*
* @example
*
* llist.remove('begin', 'end', (error, response) => {
* if (error) throw error
* // handle success
* })
*/
LargeList.prototype.removeRange = function (valBegin, valEnd, callback) {
this.execute('remove_range', arguments, 3)
}
if (arglength === 3) {
this.executeLDTFunction('range', arguments, 3)
} else if (arglength === 4) {
this.executeLDTFunction('range', arguments, 4, 2)
} else {
return
}
/**
* @function LargeList#find
*
* @summary Select values from the list.
*
* @param {*} value - Value to select
* @param {Object} [filterArgs] - UDF arguments for specifying LUA file, function and function arguments.
* @param {LargeList~listCallback} callback - The function to call when the operation completes with the result of the operation.
*
* @example <caption>Selecting a single value</caption>
*
* llist.find('search_key', (error, response) => {
* if (error) throw error
* // handle success
* })
*
* @example <caption>Using a filter function</caption>
*
* var filter = {module: 'udf_module', funcname: 'udf_function', args: ['abc', 123, 4.5]}
* llist.find('search_key', filter, (error, response) => {
* if (error) throw error
* // handle success
* })
*/
LargeList.prototype.find = function find (val, filterArgs, callback) {
var arglength = arguments.length
if (arglength === 2) {
this.execute('find', arguments, 2)
} else if (arglength === 3) {
this.execute('find', arguments, 3, 1)
}
}
instance.scan = function (callback) {
this.executeLDTFunction('scan', arguments, 1)
}
/**
* @function LargeList#filter
*
* @summary Select values from the list and apply specified LUA filter.
*
* @param {Object} filterArgs - UDF arguments for specifying LUA file, function and function arguments.
* @param {LargeList~listCallback} callback - The function to call when the operation completes with the result of the operation.
*
* @example
*
* var udfargs = {module: 'udf_module', funcname: 'udf_function', args: ['abc', 123, 4.5]}
* llist.filter((error, response) => {
* if (error) throw error
* // handle success
* })
*/
LargeList.prototype.filter = function (filterArgs, callback) {
this.execute('filter', arguments, 1, 0)
}
instance.destroy = function (callback) {
this.executeLDTFunction('destroy', arguments, 1)
/**
* @function LargeList#findRange
*
* @summary Select a range of values from the Large List.
*
* @param {*} valBegin - Low value of the range (inclusive)
* @param {*} valEnd - High value of the range (inclusive)
* @param {Object} [filterArgs] - UDF arguments for specifying LUA file, function and function arguments.
* @param {LargeList~valueCallback} callback - The function to call when the operation completes with the result of the operation.
*
* @example <caption>Finding a range of values</caption>
*
* llist.findRange('begin', 'end', (error, response) => {
* if (error) throw error
* // handle success
* })
*
* @example <caption>Finding a range of values then applying a filter on it</caption>
*
* var filter = {module: 'udf_module', funcname: 'udf_function', args: ['abc', 123, 4.5]}
* llist.findRange('begin', 'end', filter, (error, response) => {
* if (error) throw error
* // handle success
* })
*/
LargeList.prototype.findRange = function (valBegin, valEnd, filterArgs, callback) {
var arglength = arguments.length
if (arglength === 3) {
this.execute('range', arguments, 3)
} else if (arglength === 4) {
this.execute('range', arguments, 4, 2)
} else {
return
}
}
instance.size = function (callback) {
this.executeLDTFunction('size', arguments, 1)
}
/**
* @function LargeList#scan
*
* @summary Select all the objects in the list.
*
* @param {LargeList~listCallback} callback - The function to call when the operation completes with the result of the operation.
*
* @example
*
* llist.scan((error, response) => {
* if (error) throw error
* // handle success
* })
*/
LargeList.prototype.scan = function (callback) {
this.execute('scan', arguments, 1)
}
instance.getConfig = function (callback) {
this.executeLDTFunction('config', arguments, 1)
}
/**
* @function LargeList#destroy
*
* @summary Destroy the bin containing the Large List.
*
* @param {LargeList~doneCallback} callback - The function to call when the operation completes with the result of the operation.
*
* @example
*
* llist.destroy((error, response) => {
* if (error) throw error
* // handle success
* })
*/
LargeList.prototype.destroy = function (callback) {
this.execute('destroy', arguments, 1)
}
return instance
/**
* @function LargeList#size
*
* @summary Retrieves the size of the list.
*
* @param {LargeList~valueCallback} callback - The function to call when the operation completes with the result of the operation.
*
* @example
*
* llist.size((error, respone) => {
* if (error) throw error
* // handle success
* })
*/
LargeList.prototype.size = function (callback) {
this.execute('size', arguments, 1)
}
/**
* @function LargeList#getConfig
*
* @summary Retrieves the list configuration parameters.
*
* @param {LargeList~valueCallback} callback - The function to call when the operation completes with the result of the operation.
*
* @example
*
* llist.getConfig((error, response) => {
* if (error) throw error
* // handle success
* })
*/
LargeList.prototype.getConfig = function (callback) {
this.execute('config', arguments, 1)
}
/**
* @callback LargeList~doneCallback
*
* @summary Callback function called when an operation has completed.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
*/
/**
* @callback LargeList~valueCallback
*
* @summary Callback function called when an operation has completed.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
* @param {*} response - Value returned by the UDF function.
*/
/**
* @callback LargeList~listCallback
*
* @summary Callback function called when an operation has completed.
*
* @param {?AerospikeError} error - The error code and message or <code>null</code> if the operation was successful.
* @param {Array.<*>} list - List of entries selected.
*/
module.exports = LargeList
{
"name": "aerospike",
"version": "1.0.57",
"version": "2.0.0-alpha.1",
"description": "Aerospike Client Library",

@@ -10,2 +10,5 @@ "tags": [

],
"publishConfig": {
"tag": "alpha"
},
"homepage": "https://github.com/aerospike/aerospike-client-nodejs",

@@ -15,3 +18,3 @@ "license": "Apache-2.0",

"engines": {
"node": ">=0.10"
"node": ">=0.12"
},

@@ -30,3 +33,4 @@ "os": [

"scripts": {
"test": "standard && mocha"
"test": "standard && ./scripts/shuffle_tests",
"apidocs": "jsdoc -c jsdoc.json"
},

@@ -37,8 +41,15 @@ "dependencies": {

"devDependencies": {
"expect.js": "0.2.x",
"expect.js": "^0.3",
"mocha": ">0",
"superagent": "0.15.x",
"yargs": "1.2.1",
"standard": "^5.4.1"
"standard": "^5.4.1",
"deasync": "^0.1.4",
"jsdoc": "^3.4.0",
"ink-docstrap": "^1.1.0"
},
"standard": {
"ignore": [
"apidocs"
]
}
}

@@ -31,42 +31,52 @@ [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](http://standardjs.com/)

```js
var aerospike = require('aerospike');
var status = aerospike.status;
const Aerospike = require('aerospike')
const op = Aerospike.operator
const Key = Aerospike.Key
const Double = Aerospike.Double
const GeoJSON = Aerospike.GeoJSON
// Connect to the cluster.
var client = aerospike.client({
hosts: [ { addr: '127.0.0.1', port: 3000 } ]
});
function connect_cb( err, client) {
if (err.code == status.AEROSPIKE_OK) {
console.log("Aerospike Connection Success")
}
const config = {
hosts: '192.168.33.10:3000'
}
Aerospike.connect(config, (error, client) => {
if (error) throw error
client.connect(connect_cb); // connect is synchronous
var key = new Key('test', 'demo', 'demo')
var record = {
i: 123,
s: 'hello',
b: new Buffer('world'),
d: new Double(3.1415),
g: new GeoJSON({type: 'Point', coordinates: [103.913, 1.308]}),
c: [1, 'a', {x: 'y'}]
}
var meta = { ttl: 10000 }
var policy = { exists: Aerospike.policy.exists.CREATE_OR_REPLACE }
// The key of the record we are reading.
var key = aerospike.key('test','demo','foo');
client.put(key, record, meta, policy, (error) => {
if (error) throw error
var bins = { i: 123, s: "str"}
var metadata = { ttl: 10000, gen: 1}
var ops = [
op.incr('i', 1),
op.listAppend('c', 'z'),
op.read('i')
]
// write a record to database.
client.put(key, bins, metadata, function(err, key){
client.operate(key, ops, (error, result) => {
if (error) throw error
console.log(result) // => { c: 4, i: 124 }
// Read the same record from database
client.get(key, function(err, rec, meta) {
// Check for errors
if ( err.code == status.AEROSPIKE_OK ) {
// The record was successfully read.
console.log(rec, meta);
}
else {
// An error occurred
console.error('error:', err);
}
});
});
client.get(key, (error, record, meta) => {
if (error) throw error
console.log(record) // => { i: 124,
// s: 'hello',
// b: <Buffer 77 6f 72 6c 64>,
// d: 3.1415,
// g: '{"type":"Point","coordinates":[103.913,1.308]}',
// c: [ 1, 'a', { x: 'y' }, 'z' ] }
client.close()
})
})
})
})
```

@@ -231,3 +241,3 @@

var aerospike = require('aerospike')
const Aerospike = require('aerospike')

@@ -268,3 +278,3 @@ <a name="Installing-via-Git-Repository"></a>

var aerospike = require('aerospike')
const Aerospike = require('aerospike')

@@ -288,3 +298,3 @@ #### Installing Locally

var aerospike = require('aerospike')
const Aerospike = require('aerospike')

@@ -397,2 +407,16 @@ <a name="Aerospike with Aggregation"></a>

<a name="Versioning"></a>
## API Versioning
The Aerospike Node.js client library follows [semantic versioning](http://semver.org/).
Changes which break backwards compatibility will be indicated by an increase in
the major version number. Minor and patch releases, which increment only the
second and third version number, will always be backwards compatible.
<a name="API-Changes"></a>
### Backward Incompatible Changes
The documentation contains a list of [backward incompatible changes](docs/api-changes.md)
to the API by release.
## License

@@ -399,0 +423,0 @@

@@ -17,8 +17,6 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')

@@ -31,3 +29,3 @@ const keygen = helper.keygen

const status = aerospike.status
const status = Aerospike.status

@@ -38,3 +36,2 @@ describe('client.batchExists()', function () {

it('should successfully find 10 records', function (done) {
this.timeout(3000)
// number of records

@@ -50,3 +47,3 @@ var nrecords = 10

// callback provides an array of written keys
putgen.put(client, nrecords, kgen, rgen, mgen, function (written) {
putgen.put(nrecords, kgen, rgen, mgen, function (written) {
var keys = Object.keys(written).map(function (key) {

@@ -60,16 +57,9 @@ return written[key].key

client.batchExists(keys, function (err, results) {
var result
var j
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(results.length).to.equal(len)
for (j = 0; j < results.length; j++) {
result = results[j]
expect(result.status).to.equal(status.AEROSPIKE_OK)
if (j === nrecords - 1) {
done()
}
for (var i = 0; i < results.length; i++) {
expect(results[i].status).to.equal(status.AEROSPIKE_OK)
}
done()
})

@@ -80,3 +70,2 @@ })

it('should fail finding 10 records', function (done) {
this.timeout(3000)
// number of records

@@ -90,21 +79,8 @@ var nrecords = 10

client.batchExists(keys, function (err, results) {
var result
var j
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(results.length).to.equal(nrecords)
for (j = 0; j < results.length; j++) {
result = results[j]
// This if-else check is introduced to handle test failures
// in backward compatibility issues. Should be removed when an official release
// of C client is done, with error code changes.
if (result.status !== 602) {
expect(result.status).to.equal(status.AEROSPIKE_ERR_RECORD_NOT_FOUND)
} else {
expect(result.status).to.equal(602)
}
for (var i = 0; i < results.length; i++) {
expect(results[i].status).to.equal(status.AEROSPIKE_ERR_RECORD_NOT_FOUND)
}
done()

@@ -115,3 +91,2 @@ })

it('should successfully find 1000 records', function (done) {
this.timeout(5000)
// number of records

@@ -128,3 +103,3 @@ var nrecords = 1000

// keys of the object are the record's keys.
putgen.put(client, nrecords, kgen, rgen, mgen, function (written) {
putgen.put(nrecords, kgen, rgen, mgen, function (written) {
var keys = Object.keys(written).map(function (key) {

@@ -138,14 +113,8 @@ return written[key].key

client.batchExists(keys, function (err, results) {
var result
var j
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(results.length).to.equal(len)
for (j = 0; j < results.length; j++) {
result = results[j]
expect(result.status).to.equal(status.AEROSPIKE_OK)
for (var i = 0; i < results.length; i++) {
expect(results[i].status).to.equal(status.AEROSPIKE_OK)
}
done()

@@ -152,0 +121,0 @@ })

@@ -17,8 +17,6 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')

@@ -31,3 +29,3 @@ const keygen = helper.keygen

const status = aerospike.status
const status = Aerospike.status

@@ -38,6 +36,4 @@ describe('client.batchGet()', function () {

it('should successfully read 10 records', function (done) {
// number of records
var nrecords = 10
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/batch_get/' + nrecords + '/', random: false})

@@ -47,6 +43,3 @@ var mgen = metagen.constant({ttl: 1000})

// writer using generators
// callback provides an object of written records, where the
// keys of the object are the record's keys.
putgen.put(client, nrecords, kgen, rgen, mgen, function (written) {
putgen.put(nrecords, kgen, rgen, mgen, function (written) {
var keys = Object.keys(written).map(function (key) {

@@ -63,4 +56,3 @@ return written[key].key

expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(results.length).to.equal(len)

@@ -101,4 +93,3 @@

expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(results.length).to.equal(nrecords)

@@ -119,9 +110,4 @@

it('should successfully read 1000 records', function (done) {
// this high for low-end hosts
this.timeout(5000)
// number of records
var nrecords = 1000
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/batch_get/1000/', random: false})

@@ -131,6 +117,5 @@ var mgen = metagen.constant({ttl: 1000})

// writer using generators
// callback provides an object of written records, where the
// keys of the object are the record's keys.
putgen.put(client, nrecords, kgen, rgen, mgen, function (written) {
putgen.put(nrecords, kgen, rgen, mgen, function (written) {
var keys = Object.keys(written).map(function (key) {

@@ -147,4 +132,3 @@ return written[key].key

expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(results.length).to.equal(len)

@@ -151,0 +135,0 @@

@@ -17,8 +17,6 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')

@@ -31,3 +29,3 @@ const keygen = helper.keygen

const status = aerospike.status
const status = Aerospike.status

@@ -49,3 +47,3 @@ describe('client.batchSelect()', function () {

// keys of the object are the record's keys.
putgen.put(client, 10, kgen, rgen, mgen, function (written) {
putgen.put(10, kgen, rgen, mgen, function (written) {
var keys = Object.keys(written).map(function (key) {

@@ -63,4 +61,3 @@ return written[key].key

expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(results.length).to.equal(len)

@@ -102,4 +99,3 @@

expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(results.length).to.equal(nrecords)

@@ -135,3 +131,3 @@

// keys of the object are the record's keys.
putgen.put(client, nrecords, kgen, rgen, mgen, function (written) {
putgen.put(nrecords, kgen, rgen, mgen, function (written) {
var keys = Object.keys(written).map(function (key) {

@@ -149,4 +145,3 @@ return written[key].key

expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(results.length).to.equal(len)

@@ -153,0 +148,0 @@

@@ -17,8 +17,6 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')

@@ -29,6 +27,6 @@ const keygen = helper.keygen

const status = aerospike.status
const op = aerospike.operator
const status = Aerospike.status
const op = Aerospike.operator
describe('client.operate()', function () {
describe('client.operate() - CDT List operations', function () {
var client = helper.client

@@ -50,3 +48,3 @@

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -57,11 +55,10 @@ op.listAppend('list', 99)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([1, 2, 3, 4, 5, 99])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -89,3 +86,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -96,11 +93,10 @@ op.listAppendItems('list', [99, 100])

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([1, 2, 3, 4, 5, 99, 100])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -128,3 +124,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -135,11 +131,10 @@ op.listInsert('list', 2, 99)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([1, 2, 99, 3, 4, 5])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -167,3 +162,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -174,11 +169,10 @@ op.listInsertItems('list', 2, [99, 100])

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([1, 2, 99, 100, 3, 4, 5])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -206,3 +200,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -213,12 +207,11 @@ op.listPop('list', 2)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(record1.list).to.eql(3)
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([1, 2, 4, 5])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -246,3 +239,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -253,12 +246,11 @@ op.listPopRange('list', 2, 2)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(record1.list).to.eql([3, 4])
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([1, 2, 5])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -284,3 +276,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -291,12 +283,11 @@ op.listPopRange('list', 2)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(record1.list).to.eql([3, 4, 5])
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([1, 2])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -324,3 +315,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -331,11 +322,10 @@ op.listRemove('list', 2)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([1, 2, 4, 5])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -363,3 +353,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -370,11 +360,10 @@ op.listRemoveRange('list', 2, 2)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([1, 2, 5])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -400,3 +389,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -407,11 +396,10 @@ op.listRemoveRange('list', 2)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([1, 2])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -439,3 +427,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -446,11 +434,10 @@ op.listClear('list')

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -478,3 +465,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -485,11 +472,10 @@ op.listSet('list', 2, 99)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([1, 2, 99, 4, 5])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -517,3 +503,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -524,11 +510,10 @@ op.listTrim('list', 1, 3)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record2.list).to.eql([2, 3, 4])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -556,3 +541,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -563,8 +548,7 @@ op.listGet('list', 2)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(record1.list).to.equal(3)
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -589,3 +573,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -599,4 +583,4 @@ op.listGet('list', 99)

client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
client.remove(key, function (err, key) {
if (err) { throw new Error(err.message) }
done()

@@ -623,3 +607,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -630,8 +614,7 @@ op.listGetRange('list', 1, 3)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(record1.list).to.eql([2, 3, 4])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -656,3 +639,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -663,8 +646,7 @@ op.listGetRange('list', 1)

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(record1.list).to.eql([2, 3, 4, 5])
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -691,3 +673,3 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var ops = [

@@ -698,8 +680,7 @@ op.listSize('list')

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(record1.list).to.equal(5)
client.remove(key1, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -706,0 +687,0 @@ })

@@ -17,8 +17,6 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')

@@ -30,3 +28,3 @@ const keygen = helper.keygen

const status = aerospike.status
const status = Aerospike.status

@@ -37,3 +35,2 @@ describe('client.exists()', function () {

it('should find the record', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/exists/'})

@@ -43,3 +40,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -49,10 +45,10 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
client.exists(key, function (err, metadata, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
client.put(key, record, meta, function (err) {
if (err) throw err
client.exists(key, function (err, metadata) {
expect(err).not.to.be.ok()
client.remove(key, function (err) {
if (err) throw err
done()

@@ -65,16 +61,8 @@ })

it('should not find the record', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/exists/fail/'})
// values
var key = kgen()
// write the record then check
client.exists(key, function (err, metadata, key) {
expect(err).to.be.ok()
if (err.code !== 602) {
expect(err.code).to.equal(status.AEROSPIKE_ERR_RECORD_NOT_FOUND)
} else {
expect(err.code).to.equal(602)
}
expect(err.code).to.equal(status.AEROSPIKE_ERR_RECORD_NOT_FOUND)
done()

@@ -81,0 +69,0 @@ })

@@ -17,5 +17,24 @@ // *****************************************************************************

var aerospike = require('../../build/Release/aerospike')
var status = aerospike.status
const Aerospike = require('../../lib/aerospike')
const helper = require('../test_helper')
const deasync = require('deasync')
// Throttles the number of concurrent calls to the function fn.
// fn is assumed to take a callback function as it's last paramter.
function throttle (max_concurrent, fn) {
var current = 0
var self = this
return function () {
current += 1
deasync.loopWhile(function () { return current > max_concurrent })
var args = Array.prototype.slice.call(arguments)
var cb = args.pop()
args.push(function () {
current -= 1
cb.apply(this, arguments)
})
fn.apply(self, args)
}
}
function put_done (total, done) {

@@ -25,17 +44,14 @@ var entries = {}

return function (_key, record, metadata) {
return function (err, key, skippy) {
switch (err.code) {
case status.AEROSPIKE_OK:
entries[key.key] = {
status: err.code,
key: key,
record: record,
metadata: metadata
}
break
default:
console.error('Error: ', err, key)
return function (key, record, metadata) {
return function (err) {
if (err) {
console.error('Error: ', err, key)
} else {
entries[key.key] = {
status: 0,
key: key,
record: record,
metadata: metadata
}
}
count++

@@ -49,7 +65,9 @@ if (count >= total) {

function put (client, n, keygen, recgen, metagen, done) {
function put (n, keygen, recgen, metagen, done) {
var client = helper.client
var d = put_done(n, done)
var i
var throttled = throttle.call(client, 200, client.put)
for (i = 0; i < n; i++) {
var policy = { exists: Aerospike.policy.exists.CREATE_OR_REPLACE }
for (var i = 0; i < n; i++) {
var key = keygen()

@@ -59,3 +77,3 @@ var metadata = metagen(key)

var callback = d(key, record, metadata)
client.put(key, record, metadata, callback)
throttled(key, record, metadata, policy, callback)
}

@@ -62,0 +80,0 @@ }

@@ -17,8 +17,6 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')

@@ -29,4 +27,4 @@ const keygen = helper.keygen

const status = aerospike.status
const policy = aerospike.policy
const status = Aerospike.status
const policy = Aerospike.policy

@@ -49,8 +47,7 @@ describe('client.get()', function () {

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
client.get(key, function (err, record, metadata, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -95,8 +92,7 @@ })

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
client.get(key, pol, function (err, record, metadata, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -103,0 +99,0 @@ })

@@ -17,11 +17,7 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')
const status = aerospike.status
describe('client.index()', function () {

@@ -36,4 +32,3 @@ var client = helper.client

client.createIntegerIndex(args, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
done()

@@ -47,4 +42,3 @@ })

client.createStringIndex(args, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
done()

@@ -54,2 +48,15 @@ })

it('should create a geospatial index', function (done) {
var args = {
ns: helper.namespace,
set: helper.set,
bin: 'geo_bin',
index: 'geo_index'
}
client.createGeo2DSphereIndex(args, function (err) {
expect(err).not.to.be.ok()
done()
})
})
it('should create an integer index with info policy', function (done) {

@@ -59,4 +66,3 @@ var args = { ns: helper.namespace, set: helper.set, bin: 'policy_bin',

client.createIntegerIndex(args, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
done()

@@ -68,4 +74,3 @@ })

client.indexRemove(helper.namespace, 'string_integer', function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
done()

@@ -81,7 +86,5 @@ })

client.createIntegerIndex(args, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.indexCreateWait(helper.namespace, 'integer_index_done', 1000, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
done()

@@ -98,7 +101,5 @@ })

client.createStringIndex(args, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.indexCreateWait(helper.namespace, 'string_index_done', 1000, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
done()

@@ -105,0 +106,0 @@ })

@@ -17,36 +17,58 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it, context */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')
const status = aerospike.status
describe('client.info()', function () {
var client = helper.client
var hosts = client.config.hosts
it('should get "objects" from all hosts in cluster', function (done) {
var responses = 0
client.info('objects', function (err, response, host) {
responses++
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(response.indexOf('objects')).to.eql(0)
if (responses === hosts.length) done()
context('querying a single node', function () {
var host = client.config.hosts[0]
it('should fetch object count from specific cluster node', function (done) {
client.info('objects', host, function (err, response, responding_host) {
expect(err).not.to.be.ok()
expect(responding_host).to.eql(host)
expect(response.indexOf('objects\t')).to.eql(0)
done()
})
})
it('should accept a string with the host address', function (done) {
var host_str = host.addr + ':' + host.port
client.info('objects', host_str, function (err, response, responding_host) {
expect(err).not.to.be.ok()
expect(responding_host).to.eql(host)
expect(response.indexOf('objects\t')).to.eql(0)
done()
})
})
})
it('should get "objects" from specific host in cluster', function (done) {
var host = hosts[0]
client.info('objects', host, function (err, response, responding_host) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(responding_host).to.eql(host)
expect(response.indexOf('objects\t')).to.eql(0)
context('querying all the nodes', function () {
it('should fetch object count from all cluster nodes', function (done) {
client.info('objects', function (err, response, host) {
expect(err).not.to.be.ok()
expect(response.indexOf('objects\t')).to.eql(0)
}, done)
})
})
it('should call the done callback after the info callback', function (done) {
var info_cb_called = 0
client.info(function () {
info_cb_called += 1
}, function () {
expect(info_cb_called).to.not.eql(0)
done()
})
})
it('should return a client error if the client is not connected', function (done) {
Aerospike.client(helper.config).info(function (err) {
expect(err.code).to.be(Aerospike.status.AEROSPIKE_ERR_CLIENT)
done()
})
})
})

@@ -17,25 +17,22 @@ // *****************************************************************************

/* global describe, it, before, after */
/* global expect, describe, it, before, after */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')
const valgen = helper.valgen
const status = aerospike.status
const policy = aerospike.policy
const status = Aerospike.status
const policy = Aerospike.policy
// A single Large List is created. All Large List operations are done in this single list to demonstrate the
// usage of LargeList API. The operations include adding an element,
// udpating an element, searching for an element and removing an element.
describe('client.LargeList()', function (done) {
var client = helper.client
// A single LList is created. All LList operations are done in this single list to demonstrate the
// usage of LList API.
// The operations include adding an element, udpating an element, searching for an element
// and removing an element.
// Get a largelist object from client.
var listkey = {ns: helper.namespace, set: helper.set, key: 'ldt_list_key'}
var writepolicy = {timeout: 1000, key: policy.key.SEND, commitLevel: policy.commitLevel.ALL}
var LList = client.LargeList(listkey, 'ldt_list_bin', writepolicy)
var llist = client.LargeList(listkey, 'ldt_list_bin', writepolicy)
var ldtEnabled = true

@@ -50,4 +47,4 @@

if (ldtEnabled) {
LList.destroy(function (err) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
llist.destroy(function (err) {
if (err) { throw new Error(err.message) }
done()

@@ -60,3 +57,3 @@ })

it('should add an element of type integer to the LList ', function (done) {
it('should add an element of type integer to the llist ', function (done) {
if (!ldtEnabled) { this.skip() }

@@ -67,9 +64,7 @@ var igen = valgen.integer()

// insert an integer value into the list.
LList.add(intval, function (err, retVal) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.add(intval, function (err, retVal) {
expect(err).not.to.be.ok()
// verify the inserted element in the list.
LList.find({'key': 'intvalue'}, function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.find({'key': 'intvalue'}, function (err, val) {
expect(err).not.to.be.ok()
expect(val[0].value).to.equal(listval)

@@ -81,3 +76,3 @@ done()

it('should add an element of type string to the LList ', function (done) {
it('should add an element of type string to the llist ', function (done) {
if (!ldtEnabled) { this.skip() }

@@ -88,9 +83,7 @@ var sgen = valgen.string()

// insert an string value into the list.
LList.add(strval, function (err, retVal) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.add(strval, function (err, retVal) {
expect(err).not.to.be.ok()
// verify the inserted element in the list.
LList.find({'key': 'stringvalue'}, function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.find({'key': 'stringvalue'}, function (err, val) {
expect(err).not.to.be.ok()
expect(val[0].value).to.equal(listval)

@@ -102,3 +95,3 @@ done()

it('should add an element of type bytes to the LList ', function (done) {
it('should add an element of type bytes to the llist ', function (done) {
if (!ldtEnabled) { this.skip() }

@@ -109,9 +102,7 @@ var bgen = valgen.bytes()

// insert a byte value into the list.
LList.add(bytesval, function (err, retVal) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.add(bytesval, function (err, retVal) {
expect(err).not.to.be.ok()
// verify the inserted element in the list.
LList.find({'key': 'bytesvalue'}, function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.find({'key': 'bytesvalue'}, function (err, val) {
expect(err).not.to.be.ok()
expect(val[0].value).to.eql(listval)

@@ -123,3 +114,3 @@ done()

it('should add an element of type array to the LList ', function (done) {
it('should add an element of type array to the llist ', function (done) {
if (!ldtEnabled) { this.skip() }

@@ -130,9 +121,7 @@ var agen = valgen.array()

// insert an array element into the list.
LList.add(bytesval, function (err, retVal) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.add(bytesval, function (err, retVal) {
expect(err).not.to.be.ok()
// verify the inserted element in the list.
LList.find({'key': 'arrayvalue'}, function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.find({'key': 'arrayvalue'}, function (err, val) {
expect(err).not.to.be.ok()
expect(val[0].value).to.eql(listval)

@@ -144,3 +133,3 @@ done()

it('should add an element of type map to the LList ', function (done) {
it('should add an element of type map to the llist ', function (done) {
if (!ldtEnabled) { this.skip() }

@@ -151,9 +140,7 @@ var mgen = valgen.map()

// insert a map element into the list.
LList.add(mapval, function (err, retVal) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.add(mapval, function (err, retVal) {
expect(err).not.to.be.ok()
// verify the inserted element in the list.
LList.find({'key': 'mapvalue'}, function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.find({'key': 'mapvalue'}, function (err, val) {
expect(err).not.to.be.ok()
expect(val[0].value).to.eql(listval)

@@ -165,3 +152,3 @@ done()

it('should add an array of values to LList ', function (done) {
it('should add an array of values to llist ', function (done) {
if (!ldtEnabled) { this.skip() }

@@ -174,3 +161,3 @@ var mgen = valgen.map()

// array of values to be inserted into the LList.
// array of values to be inserted into the llist.
var valList = [bgen(), igen(), agen(), mgen(), sgen()]

@@ -184,11 +171,9 @@

// array of values with key to be inserted into the LList.
// array of values with key to be inserted into the llist.
var arrayList = [mapval, arrayval, bytesval, stringval, integerval]
LList.add(arrayList, function (err, retVal) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.add(arrayList, function (err, retVal) {
expect(err).not.to.be.ok()
// verify the inserted element in the list.
LList.findRange('arraybytesvalue', 'arraystrvalue', function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.findRange('arraybytesvalue', 'arraystrvalue', function (err, val) {
expect(err).not.to.be.ok()
expect(val[0].value).to.eql(valList[0])

@@ -209,3 +194,3 @@ expect(val[1].value).to.equal(valList[1])

var intval = {'key': 'intvalue', 'value': listval}
LList.add(intval, undefined, function (err, retVal) {
llist.add(intval, undefined, function (err, retVal) {
expect(err).to.be.ok()

@@ -217,3 +202,3 @@ expect(err.func).to.equal('add')

it('should update an element in the LList ', function (done) {
it('should update an element in the llist ', function (done) {
if (!ldtEnabled) { this.skip() }

@@ -224,9 +209,7 @@ var igen = valgen.integer()

// update an integer value in the list.
LList.update(intval, function (err, retVal) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.update(intval, function (err, retVal) {
expect(err).not.to.be.ok()
// verify the updated element in the list.
LList.find({'key': 'intvalue'}, function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.find({'key': 'intvalue'}, function (err, val) {
expect(err).not.to.be.ok()
expect(val[0].value).to.equal(listval)

@@ -238,3 +221,3 @@ done()

it('should update an array of values in the LList ', function (done) {
it('should update an array of values in the llist ', function (done) {
if (!ldtEnabled) { this.skip() }

@@ -257,9 +240,7 @@ var mgen = valgen.map()

// update an array of elements in the list.
LList.update(arrayList, function (err, retVal) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.update(arrayList, function (err, retVal) {
expect(err).not.to.be.ok()
// verify the updated elements in the list.
LList.findRange('arraybytesvalue', 'arraystrvalue', function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.findRange('arraybytesvalue', 'arraystrvalue', function (err, val) {
expect(err).not.to.be.ok()
expect(val[0].value).to.eql(valList[0])

@@ -280,3 +261,3 @@ expect(val[1].value).to.equal(valList[1])

var intval = {'key': 'intvalue', 'value': listval}
LList.update(intval, undefined, function (err, retVal) {
llist.update(intval, undefined, function (err, retVal) {
expect(err).to.be.ok()

@@ -288,8 +269,7 @@ expect(err.func).to.equal('update')

it('should verify the find API of LList -finds an existing element', function (done) {
it('should verify the find API of llist -finds an existing element', function (done) {
if (!ldtEnabled) { this.skip() }
// find an element in the list.
LList.find({'key': 'intvalue'}, function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.find({'key': 'intvalue'}, function (err, val) {
expect(err).not.to.be.ok()
expect(val[0]).to.have.property('value')

@@ -300,6 +280,6 @@ done()

it('should verify the find API of LList -finds a non-existing element and fails', function (done) {
it('should verify the find API of llist -finds a non-existing element and fails', function (done) {
if (!ldtEnabled) { this.skip() }
// find an element in the list.
LList.find({'key': 'novalue'}, function (err, val) {
llist.find({'key': 'novalue'}, function (err, val) {
expect(err).to.be.ok()

@@ -311,7 +291,6 @@ expect(err.code).to.equal(status.AEROSPIKE_ERR_LARGE_ITEM_NOT_FOUND)

it('should verify the range API of LList- expected to find existing elements', function (done) {
it('should verify the range API of llist- expected to find existing elements', function (done) {
if (!ldtEnabled) { this.skip() }
LList.findRange('arraybytesvalue', 'arraystrvalue', function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.findRange('arraybytesvalue', 'arraystrvalue', function (err, val) {
expect(err).not.to.be.ok()
expect(val.length).to.equal(5)

@@ -322,7 +301,6 @@ done()

it('should verify the range API of LList- expected to not find any elements', function (done) {
it('should verify the range API of llist- expected to not find any elements', function (done) {
if (!ldtEnabled) { this.skip() }
LList.findRange('zbytesvalue', 'zstrvalue', function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.findRange('zbytesvalue', 'zstrvalue', function (err, val) {
expect(err).not.to.be.ok()
expect(val.length).to.eql(0)

@@ -333,7 +311,6 @@ done()

it('should verify the size API of LList ', function (done) {
it('should verify the size API of llist ', function (done) {
if (!ldtEnabled) { this.skip() }
LList.size(function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.size(function (err, val) {
expect(err).not.to.be.ok()
expect(val).to.equal(10)

@@ -346,3 +323,3 @@ done()

if (!ldtEnabled) { this.skip() }
LList.size(2, function (err, val) {
llist.size(2, function (err, val) {
expect(err).to.be.ok()

@@ -354,7 +331,6 @@ expect(err.func).to.equal('size')

it('should verify the scan API of LList ', function (done) {
it('should verify the scan API of llist ', function (done) {
if (!ldtEnabled) { this.skip() }
LList.scan(function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.scan(function (err, val) {
expect(err).not.to.be.ok()
expect(val.length).to.equal(10)

@@ -367,3 +343,3 @@ done()

if (!ldtEnabled) { this.skip() }
LList.scan('scan', function (err, val) {
llist.scan('scan', function (err, val) {
expect(err).to.be.ok()

@@ -375,16 +351,14 @@ expect(err.func).to.equal('scan')

it('should remove an element from the LList ', function (done) {
it('should remove an element from the llist ', function (done) {
if (!ldtEnabled) { this.skip() }
var intval = {'key': 'intvalue'}
// remove the integer value into the list.
LList.remove(intval, function (err, retVal) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.remove(intval, function (err, retVal) {
expect(err).not.to.be.ok()
// verify the removed element in the list.
LList.find({'key': 'intvalue'}, function (err, val) {
llist.find({'key': 'intvalue'}, function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_ERR_LARGE_ITEM_NOT_FOUND)
LList.size(function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.size(function (err, val) {
expect(err).not.to.be.ok()
expect(val).to.equal(9)

@@ -397,3 +371,3 @@ done()

it('should remove an array of elements from LList ', function (done) {
it('should remove an array of elements from llist ', function (done) {
if (!ldtEnabled) { this.skip() }

@@ -407,8 +381,6 @@ var bytesval = {key: 'bytesvalue'}

var arrayList = [ mapval, arrayval, bytesval, stringval ]
LList.remove(arrayList, function (err, retVal) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
LList.size(function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.remove(arrayList, function (err, retVal) {
expect(err).not.to.be.ok()
llist.size(function (err, val) {
expect(err).not.to.be.ok()
expect(val).to.equal(5)

@@ -423,3 +395,3 @@ done()

// remove an array of elements from the list.
LList.remove('list', 123, function (err, retVal) {
llist.remove('list', 123, function (err, retVal) {
expect(err).to.be.ok()

@@ -431,14 +403,11 @@ expect(err.func).to.equal('remove')

it('should verify removing a range of values in LList ', function (done) {
it('should verify removing a range of values in llist ', function (done) {
if (!ldtEnabled) { this.skip() }
LList.removeRange('arraybytesvalue', 'arraystrvalue', function (err, retVal) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
LList.findRange('arraybytesvalue', 'arraystrvalue', function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
llist.removeRange('arraybytesvalue', 'arraystrvalue', function (err, retVal) {
expect(err).not.to.be.ok()
llist.findRange('arraybytesvalue', 'arraystrvalue', function (err, val) {
expect(err).not.to.be.ok()
expect(val.length).to.equal(0)
LList.size(function (err, val) {
expect(err).to.be.ok()
expect(err.code).to.be.equal(status.AEROSPIKE_OK)
llist.size(function (err, val) {
expect(err).not.to.be.ok()
expect(val).to.equal(0)

@@ -453,3 +422,3 @@ done()

if (!ldtEnabled) { this.skip() }
LList.removeRange('list', 123, 345, function (err, retVal) {
llist.removeRange('list', 123, 345, function (err, retVal) {
expect(err).to.be.ok()

@@ -456,0 +425,0 @@ expect(err.func).to.equal('removeRange')

@@ -17,8 +17,7 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const Double = Aerospike.Double
const helper = require('./test_helper')
const expect = require('expect.js')

@@ -29,4 +28,4 @@ const keygen = helper.keygen

const status = aerospike.status
const op = aerospike.operator
const status = Aerospike.status
const op = Aerospike.operator

@@ -36,3 +35,3 @@ describe('client.operate()', function () {

describe('INCR operation', function () {
describe('operator.incr()', function () {
it('should increment bin with integer value', function (done) {

@@ -42,3 +41,3 @@ var key = keygen.string(helper.namespace, helper.set, {prefix: 'test/incr/int'})()

client.put(key, {i: 123}, function (err) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var ops = [

@@ -49,10 +48,10 @@ op.incr('i', 432)

client.operate(key, ops, function (err) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
expect(err).to.not.be.ok()
client.get(key, function (err, record2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
expect(record2['i']).to.equal(555)
client.remove(key, function (err) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -69,3 +68,3 @@ })

client.put(key, {f: 3.14159}, function (err) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var ops = [

@@ -76,10 +75,10 @@ op.incr('f', 2.71828)

client.operate(key, ops, function (err) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
expect(err).to.not.be.ok()
client.get(key, function (err, record2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
expect(record2['f']).to.equal(5.85987)
client.remove(key, function (err) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -92,20 +91,20 @@ })

it('should increment bin with aerospike.Double() value', function (done) {
it('should increment bin with Double value', function (done) {
var key = keygen.string(helper.namespace, helper.set, {prefix: 'test/incr/Double'})()
client.put(key, {f: 3.14159}, function (err) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var ops = [
op.incr('f', aerospike.Double(1.0))
op.incr('f', new Double(1.0))
]
client.operate(key, ops, function (err) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
expect(err).to.not.be.ok()
client.get(key, function (err, record2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
expect(record2['f']).to.equal(4.14159)
client.remove(key, function (err) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -120,3 +119,2 @@ })

it('should append a bin', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -126,3 +124,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -132,5 +129,4 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var ops = [

@@ -141,7 +137,6 @@ op.append('s', 'def')

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
expect(record['i']).to.equal(record2['i'])

@@ -151,3 +146,3 @@ expect(record['s'] + 'def').to.equal(record2['s'])

client.remove(key2, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -161,3 +156,2 @@ })

it('should prepend and read a bin', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -167,3 +161,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -173,5 +166,4 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var ops = [

@@ -183,4 +175,3 @@ op.prepend('s', 'def'),

client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).to.not.be.ok()
expect(record1['i']).to.equal(undefined)

@@ -190,3 +181,3 @@ expect('def' + record['s']).to.equal(record1['s'])

client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
expect(record['i']).to.equal(record2['i'])

@@ -196,3 +187,3 @@ expect('def' + record['s']).to.equal(record2['s'])

client.remove(key2, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -206,3 +197,2 @@ })

it('should touch a record(refresh ttl) ', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -212,3 +202,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -233,5 +222,4 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var ops = [

@@ -242,11 +230,10 @@ op.touch(2592000)

client.get(key, function (err, record3, metadata3, key3) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var ttl_diff = metadata3.ttl - meta.ttl
client.operate(key, ops, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).to.not.be.ok()
client.get(key1, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
expect(record['i']).to.equal(record2['i'])

@@ -258,3 +245,3 @@ expect(record['s']).to.equal(record2['s'])

client.remove(key2, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -269,3 +256,2 @@ })

it('should prepend using prepend API and verify the bin', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -275,3 +261,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -281,13 +266,11 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var bin = {s: 'def'}
client.prepend(key, bin, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
expect(record['i']).to.equal(record2['i'])

@@ -297,3 +280,3 @@ expect('def' + record['s']).to.equal(record2['s'])

client.remove(key2, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -307,3 +290,2 @@ })

it('should prepend using prepend API and verify the bin with metadata', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -313,3 +295,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -319,14 +300,11 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var bin = {s: 'def'}
client.prepend(key, bin, meta, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(record['i']).to.equal(record2['i'])

@@ -336,3 +314,3 @@ expect('def' + record['s']).to.equal(record2['s'])

client.remove(key2, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -346,3 +324,2 @@ })

it('should append a bin using append API and verify the bin', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -352,3 +329,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -358,13 +334,11 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var bin = {s: 'def'}
client.append(key, bin, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
expect(record['i']).to.equal(record2['i'])

@@ -374,3 +348,3 @@ expect(record['s'] + 'def').to.equal(record2['s'])

client.remove(key2, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -384,3 +358,2 @@ })

it('should append a bin using append API and verify the bin with metadata', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -390,3 +363,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -396,13 +368,11 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var bin = {s: 'def'}
client.append(key, bin, meta, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
expect(record['i']).to.equal(record2['i'])

@@ -412,3 +382,3 @@ expect(record['s'] + 'def').to.equal(record2['s'])

client.remove(key2, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -422,3 +392,2 @@ })

it('should add a value to a bin and verify', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -428,3 +397,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -434,13 +402,11 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var bin = {i: 432}
client.add(key, bin, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
expect(record['i'] + 432).to.equal(record2['i'])

@@ -450,3 +416,3 @@ expect(record['s']).to.equal(record2['s'])

client.remove(key2, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -460,3 +426,2 @@ })

it('should add a value to a bin with metadata and verify', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -466,3 +431,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -472,13 +436,11 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var bin = {i: 432}
client.add(key, bin, meta, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
expect(record['i'] + 432).to.equal(record2['i'])

@@ -488,3 +450,3 @@ expect(record['s']).to.equal(record2['s'])

client.remove(key2, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -498,3 +460,2 @@ })

it('should add a string value to a bin and expected fail', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -504,3 +465,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -510,9 +470,7 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var bin = {i: 'str'}
client.add(key, bin, meta, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_ERR_PARAM)

@@ -525,3 +483,2 @@ done()

it('should append a bin of type integer using append API and expected to fail', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -531,3 +488,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -537,9 +493,7 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var bin = {s: 123}
client.append(key, bin, meta, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_ERR_PARAM)

@@ -552,3 +506,2 @@ done()

it('should prepend an integer using prepend API and expect to fail', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -558,3 +511,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -564,9 +516,7 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var bin = {s: 123}
client.prepend(key, bin, meta, function (err, record1, metadata1, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_ERR_PARAM)

@@ -579,3 +529,2 @@ done()

it('should return a client error if any of the operations are invalid', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -585,3 +534,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -591,8 +539,7 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
var ops = [
op.incr('i', 432),
op.incr('i', 'str') // invalid increment with string value
op.incr('i', 'str')
]

@@ -605,3 +552,3 @@

client.get(key, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
expect(record2['i']).to.equal(123)

@@ -611,3 +558,3 @@ expect(record2['s']).to.equal('abc')

client.remove(key2, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) throw err
done()

@@ -614,0 +561,0 @@ })

@@ -17,8 +17,6 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')

@@ -30,4 +28,4 @@ const keygen = helper.keygen

var status = aerospike.status
var Double = aerospike.Double
const status = Aerospike.status
const Double = Aerospike.Double

@@ -55,7 +53,6 @@ describe('client.put()', function () {

client.put(key, record, meta, function (err, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, _record, _metadata, _key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(_record).to.eql(record)

@@ -88,10 +85,9 @@ count++

client.put(key, record, meta, function (err, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record, metadata, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -116,10 +112,9 @@ })

client.put(key, record, meta, function (err, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record, metadata, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -142,10 +137,9 @@ })

client.put(key, record, meta, function (err, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record, metadata, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -170,11 +164,10 @@ })

client.put(key, record, meta, function (err, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record1, metadata, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record1).to.eql(record)
client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -196,16 +189,16 @@ })

val: 123.45,
dval: Double(456.00)
dval: new Double(456.00)
}
// write the record and then check
client.put(key, record, meta, function (err, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).to.not.be.ok()
client.get(key, function (err, record1, metadata, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record1.val).to.equal(record.val)
expect(record1.dval).to.equal(record.dval.Double)
expect(record1.dval).to.equal(record.dval.value())
client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -230,11 +223,10 @@ })

client.put(key, record, meta, function (err, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record1, metadata, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(record1).to.eql(record)
client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -259,4 +251,3 @@ })

client.put(key, record, meta, function (err, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(key1).to.have.property('ns', key.ns)

@@ -267,3 +258,3 @@ expect(key1).to.have.property('set', key.set)

client.get(key1, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(key2).to.have.property('ns', key.ns)

@@ -280,4 +271,3 @@ expect(key2).to.have.property('set', key.set)

client.put(key3, record3, meta, function (err, key4) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(key4).to.have.property('ns', key.ns)

@@ -288,3 +278,3 @@ expect(key4).to.have.property('set', key.set)

client.get(key4, function (err, record5, metadata5, key5) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(key5).to.have.property('ns', key.ns)

@@ -298,3 +288,3 @@ expect(key5).to.have.property('set', key.set)

client.remove(key5, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -321,4 +311,3 @@ })

client.put(key, record, meta, function (err, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(key1).to.have.property('ns', key.ns)

@@ -329,3 +318,3 @@ expect(key1).to.have.property('set', key.set)

client.get(key1, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(key2).to.have.property('ns', key.ns)

@@ -337,3 +326,3 @@ expect(key2).to.have.property('set', key.set)

client.remove(key2, function (err, key3) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(key3).to.have.property('ns', key.ns)

@@ -348,4 +337,3 @@ expect(key3).to.have.property('set', key.set)

client.put(key, record, meta, function (err, key5) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(key5).to.have.property('ns', key.ns)

@@ -356,3 +344,3 @@ expect(key5).to.have.property('set', key.set)

client.get(key5, function (err, record6, metadata6, key6) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(key6).to.have.property('ns', key.ns)

@@ -365,3 +353,3 @@ expect(key6).to.have.property('set', key.set)

client.remove(key6, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -395,4 +383,3 @@ })

client.put(key, record, meta, function (err, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
expect(key1).to.have.property('ns', key.ns)

@@ -403,3 +390,3 @@ expect(key1).to.have.property('set', key.set)

client.get(key1, function (err, record2, metadata2, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(key2).to.have.property('ns', key.ns)

@@ -415,3 +402,3 @@ expect(key2).to.have.property('set', key.set)

client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -440,3 +427,2 @@ })

client.put(key, record, meta, function (err, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_ERR_PARAM)

@@ -466,7 +452,6 @@

client.put(key, record, meta, function (err, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key1, function (err, bins, meta, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(bins.m).to.eql({a: 1, b: 2})

@@ -476,3 +461,3 @@ expect(bins.l).to.eql([1, 2, 3])

client.remove(key2, function (err, key3) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -499,7 +484,6 @@ })

client.put(key, record, meta, function (err, key1) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key1, function (err, bins, meta, key2) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(bins.m).to.eql({a: 1, b: 2, c: null})

@@ -509,3 +493,3 @@ expect(bins.l).to.eql([1, 2, 3, null])

client.remove(key2, function (err, key3) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -540,3 +524,3 @@ })

// values
var key = aerospike.key(helper.namespace, helper.set, undefined)
var key = Aerospike.key(helper.namespace, helper.set, undefined)
var meta = mgen(key)

@@ -566,22 +550,20 @@ var record = { }

client.put(key, record, meta, function (err, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
// check the content of the record
client.get(key, function (err, record, metadata, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
var mgen = metagen.constant({gen: 1})
var meta = mgen(key)
var writePolicy = {gen: aerospike.policy.gen.EQ}
var writePolicy = {gen: Aerospike.policy.gen.EQ}
client.put(key, record, meta, writePolicy, function (err, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record, metadata, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
expect(metadata.gen).to.equal(2)
client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
done()

@@ -588,0 +570,0 @@ })

@@ -17,11 +17,8 @@ // *****************************************************************************

/* global describe, it, before, after */
/* global expect, describe, it, before, after */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')
const status = aerospike.status
const filter = aerospike.filter
const filter = Aerospike.filter

@@ -32,10 +29,6 @@ describe('client.query()', function () {

before(function (done) {
if (helper.options.run_aggregation) {
helper.udf.register('aggregate.lua')
}
helper.udf.register('aggregate.lua')
helper.index.create('queryIndexInt', 'test.query', 'queryBinInt', 'integer')
helper.index.create('queryIndexString', 'test.query', 'queryBinString', 'string')
helper.index.create('queryIndexInt', 'queryBinInt', 'integer')
helper.index.create('queryIndexString', 'queryBinString', 'string')
// load objects - to be queried in test case.
var total = 100

@@ -45,5 +38,4 @@ var count = 0

function iteration (i) {
// values
var key = {ns: helper.namespace, set: helper.set, key: 'test/query' + i.toString()}
var meta = {ttl: 10000, gen: 1}
var key = {ns: helper.namespace, set: 'test.query', key: 'test/query' + i.toString()}
var meta = {ttl: 20000}
var record = {queryBinInt: i, queryBinString: 'querystringvalue'}

@@ -53,7 +45,6 @@

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
client.get(key, function (err, _record, _metadata, _key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
count++

@@ -73,5 +64,5 @@ if (count >= total) {

after(function (done) {
if (helper.options.run_aggregation) {
helper.udf.remove('aggregate.lua')
}
helper.udf.remove('aggregate.lua')
helper.index.remove('queryIndexInt')
helper.index.remove('queryIndexString')
done()

@@ -81,8 +72,6 @@ })

it('should query on an integer index - filter by equality of bin value', function (done) {
// counters
var count = 0
var err = 0
var args = { filters: [filter.equal('queryBinInt', 100)] }
var query = client.query(helper.namespace, helper.set, args)
var query = client.query(helper.namespace, 'test.query', args)

@@ -96,8 +85,7 @@ var stream = query.execute()

})
stream.on('error', function (error) { // eslint-disable-line handle-callback-err
err++
stream.on('error', function (error) {
helper.fail(error)
})
stream.on('end', function (end) {
expect(count).to.be.equal(1)
expect(err).to.equal(0)
done()

@@ -108,9 +96,7 @@ })

it('should query on an integer index - filter by range of bin values', function (done) {
// counters
var total = 100
var count = 0
var err = 0
var args = { filters: [filter.range('queryBinInt', 1, 100)] }
var query = client.query(helper.namespace, helper.set, args)
var query = client.query(helper.namespace, 'test.query', args)

@@ -124,8 +110,7 @@ var stream = query.execute()

})
stream.on('error', function (error) { // eslint-disable-line handle-callback-err
err++
stream.on('error', function (error) {
helper.fail(error)
})
stream.on('end', function (end) {
expect(count).to.be.greaterThan(total - 1)
expect(err).to.equal(0)
done()

@@ -136,9 +121,7 @@ })

it('should query on a string index - filter by equality of bin value', function (done) {
// counters
var total = 100
var count = 0
var err = 0
var args = { filters: [filter.equal('queryBinString', 'querystringvalue')] }
var query = client.query(helper.namespace, helper.set, args)
var query = client.query(helper.namespace, 'test.query', args)

@@ -152,9 +135,7 @@ var stream = query.execute()

})
stream.on('error', function (error) { // eslint-disable-line handle-callback-err
err++
stream.on('error', function (error) {
helper.fail(error)
})
stream.on('end', function (end) {
stream.on('end', function () {
expect(count).to.be.greaterThan(total - 1)
expect(err).to.equal(0)
done()

@@ -165,54 +146,15 @@ })

it('should query on an index and apply aggregation user defined function', function (done) {
if (!helper.options.run_aggregation) { this.skip() }
// counters
var count = 0
var err = 0
var args = { filters: [filter.equal('queryBinString', 'querystringvalue')],
aggregationUDF: {module: 'aggregate', funcname: 'sum_test_bin'}}
var query = client.query(helper.namespace, helper.set, args)
var query = client.query(helper.namespace, 'test.query', args)
var stream = query.execute()
stream.on('data', function (result) {
expect(result).to.be.ok()
count++
})
stream.on('error', function (error) {
expect(error).to.be.ok()
expect(error.code).to.equal(status.AEROSPIKE_OK)
err++
})
stream.on('end', function (end) {
expect(count).to.be.equal(1)
expect(err).to.equal(0)
expect(result).to.be.equal(5050) // 1 + 2 + ... + 100 = (100 * 101) / 2 = 5050
done()
})
})
it('should scan aerospike database and apply aggregation user defined function', function (done) {
if (!helper.options.run_aggregation) { this.skip() }
// counters
var count = 0
var err = 0
var args = {aggregationUDF: {module: 'aggregate', funcname: 'sum_test_bin'}}
var query = client.query(helper.namespace, helper.set, args)
var stream = query.execute()
stream.on('data', function (result) {
expect(result).to.be.ok()
count++
})
stream.on('error', function (error) {
expect(error).to.be.ok()
err++
helper.fail(error)
})
stream.on('end', function (end) {
expect(count).to.be.equal(1)
expect(err).to.equal(0)
done()
})
})
})

@@ -17,8 +17,6 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')

@@ -30,3 +28,3 @@ const keygen = helper.keygen

const status = aerospike.status
const status = Aerospike.status

@@ -49,13 +47,11 @@ describe('client.remove()', function () {

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
client.get(key, function (err, record, metadata, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
client.remove(key, function (err, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
if (err) { throw new Error(err.message) }
client.get(key, function (err, record, metadata, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_ERR_RECORD_NOT_FOUND)

@@ -82,13 +78,11 @@ done()

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
client.get(key, function (err, record, metadata, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
client.remove(key, function (err, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.get(key, function (err, record, metadata, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_ERR_RECORD_NOT_FOUND)

@@ -102,2 +96,29 @@ done()

it('should apply the remove policy', function (done) {
var kgen = keygen.integer(helper.namespace, helper.set)
var mgen = metagen.constant({ttl: 1000, gen: 1})
var rgen = recgen.record({i: valgen.integer(), s: valgen.string(), b: valgen.bytes()})
var key = kgen()
var meta = mgen(key)
var record = rgen(key, meta)
client.put(key, record, meta, function (err) {
if (err) { throw new Error(err.message) }
var remove_policy = {
gen: Aerospike.policy.gen.EQ,
generation: 2
}
client.remove(key, remove_policy, function (err) {
expect(err.code).to.be(status.AEROSPIKE_ERR_RECORD_GENERATION)
client.exists(key, function (err) {
if (err) { throw new Error(err.message) }
done()
})
})
})
})
it('should not remove a non-existent key', function (done) {

@@ -111,3 +132,2 @@ // generators

client.remove(key, function (err, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_ERR_RECORD_NOT_FOUND)

@@ -114,0 +134,0 @@ done()

@@ -17,8 +17,6 @@ // *****************************************************************************

/* global describe, it, before, after */
/* global expect, describe, it, before, after, context */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')

@@ -29,4 +27,2 @@ const metagen = helper.metagen

const status = aerospike.status
describe('client.query() - without where clause(Scan)', function () {

@@ -39,2 +35,3 @@ const client = helper.client

helper.udf.register('scan.lua')
helper.udf.register('aggregate.lua')

@@ -48,3 +45,3 @@ // generators

// values
var key = {ns: helper.namespace, set: helper.set, key: 'test/scan/' + i.toString()}
var key = {ns: helper.namespace, set: 'test.scan', key: 'test/scan/' + i.toString()}
var meta = mgen(key)

@@ -55,7 +52,6 @@ var record = rgen(key, meta)

client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
if (err) { throw new Error(err.message) }
client.get(key, function (err, _record, _metadata, _key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
count++

@@ -76,26 +72,19 @@ if (count >= number_of_records) {

helper.udf.remove('scan.lua')
helper.udf.remove('aggregate.lua')
done()
})
it('should query all the records', function (done) {
this.timeout(5000)
// counters
var count = 0
var errors = 0
var query = client.query(helper.namespace, helper.set)
it('should scan all the records', function (done) {
var query = client.query(helper.namespace, 'test.scan')
var stream = query.execute()
var count = 0
stream.on('data', function (rec) {
count++
})
stream.on('error', function (error) { // eslint-disable-line handle-callback-err
errors++
stream.on('error', function (error) {
throw error
})
stream.on('end', function (end) {
// derive it as a percentage.
expect(count).to.not.be.lessThan(number_of_records)
expect(errors).to.equal(0)
done()

@@ -105,65 +94,81 @@ })

it('should query and select no bins', function (done) {
this.timeout(5000)
var count = 0
var errors = 0
context('with nobins set to true', function () {
it('should return only meta data', function (done) {
var args = {nobins: true}
var query = client.query(helper.namespace, 'test.scan', args)
var stream = query.execute()
var args = {nobins: true}
var query = client.query(helper.namespace, helper.set, args)
var count = 0
stream.on('data', function (rec) {
count++
})
stream.on('error', function (error) {
throw error
})
stream.on('end', function () {
expect(count).to.not.be.lessThan(number_of_records)
done()
})
})
})
var stream = query.execute()
context('with bin selection', function () {
it('should scan and select only few bins in the record', function (done) {
var args = {select: ['i', 's']}
var query = client.query(helper.namespace, 'test.scan', args)
var stream = query.execute()
stream.on('data', function (rec) {
count++
var count = 0
stream.on('data', function (rec) {
count++
})
stream.on('error', function (error) {
throw error
})
stream.on('end', function () {
expect(count).to.not.be.lessThan(number_of_records)
done()
})
})
stream.on('error', function (error) { // eslint-disable-line handle-callback-err
errors++
})
stream.on('end', function (end) {
expect(count).to.not.be.lessThan(number_of_records)
expect(errors).to.equal(0)
done()
})
})
it('should query and select only few bins in the record', function (done) {
this.timeout(5000)
var count = 0
var errors = 0
context('with stream UDF', function () {
it('should aggregate the results', function (done) {
var args = {aggregationUDF: {module: 'aggregate', funcname: 'sum_test_bin'}}
var query = client.query(helper.namespace, 'test.scan', args)
var args = {select: ['i', 's']}
var query = client.query(helper.namespace, helper.set, args)
var stream = query.execute()
stream.on('data', function (rec) {
count++
var stream = query.execute()
stream.on('error', function (error) {
throw error
})
stream.on('data', function (result) {
expect(result).to.be.equal(5050) // 1 + 2 + ... + 100 = (100 * 101) / 2 = 5050
})
stream.on('end', function () {
done()
})
})
stream.on('error', function (error) { // eslint-disable-line handle-callback-err
errors++
})
stream.on('end', function (end) {
expect(count).to.not.be.lessThan(number_of_records)
expect(errors).to.equal(0)
done()
})
})
it('should do a scan background and check for the status of scan job ', function (done) {
var args = {UDF: {module: 'scan', funcname: 'updateRecord'}}
var scanBackground = client.query(helper.namespace, helper.set, args)
context('background scans', function () {
it('should do a scan background and check for the status of scan job ', function (done) {
var args = {UDF: {module: 'scan', funcname: 'updateRecord'}}
var scanBackground = client.query(helper.namespace, 'test.scan', args)
var errors = 0
var stream = scanBackground.execute()
var infoCallback = function (scanJobStats, scanId) {
done()
}
stream.on('error', function (error) { // eslint-disable-line handle-callback-err
errors++
var stream = scanBackground.execute()
stream.on('error', function (error) {
helper.fail(error)
})
stream.on('end', function (scanId) {
var interval = setInterval(function () {
scanBackground.info(scanId, function (scanJobStats, scanId) {
if (scanJobStats.status === Aerospike.scanStatus.COMPLETED) {
clearInterval(interval)
done()
}
})
}, 100)
})
})
stream.on('end', function (scanId) {
scanBackground.Info(scanId, infoCallback)
})
})
})

@@ -17,8 +17,6 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../build/Release/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')

@@ -30,4 +28,4 @@ const keygen = helper.keygen

const status = aerospike.status
const policy = aerospike.policy
const status = Aerospike.status
const policy = Aerospike.policy

@@ -38,3 +36,2 @@ describe('client.select()', function () {

it('should read the record', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/select/'})

@@ -44,3 +41,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -51,9 +47,7 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
client.put(key, record, meta, function (err) {
if (err) throw err
client.select(key, bins, function (err, _record, metadata, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
client.select(key, bins, function (err, _record) {
expect(err).not.to.be.ok()
expect(_record).to.only.have.keys(bins)

@@ -65,4 +59,4 @@

client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
client.remove(key, function (err) {
if (err) throw err
done()

@@ -75,3 +69,2 @@ })

it('should fail - when a select is called without key ', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/select/'})

@@ -81,3 +74,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -88,13 +80,11 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key1) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
client.put(key, record, meta, function (err) {
if (err) throw err
var select_key = {ns: helper.namespace, set: helper.set}
client.select(select_key, bins, function (err, _record, metadata, key1) {
expect(err).to.be.ok()
client.select(select_key, bins, function (err, _record) {
expect(err.code).to.equal(status.AEROSPIKE_ERR_PARAM)
client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
client.remove(key, function (err) {
if (err) throw err
done()

@@ -107,3 +97,2 @@ })

it('should not find the record', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/not_found/'})

@@ -113,3 +102,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -120,5 +108,3 @@ var meta = mgen(key)

// write the record then check
client.select(key, bins, function (err, record, metadata, key) {
expect(err).to.be.ok()
client.select(key, bins, function (err, record) {
expect(err.code).to.equal(status.AEROSPIKE_ERR_RECORD_NOT_FOUND)

@@ -130,3 +116,2 @@ done()

it('should read the record w/ a key send policy', function (done) {
// generators
var kgen = keygen.string(helper.namespace, helper.set, {prefix: 'test/get/'})

@@ -136,3 +121,2 @@ var mgen = metagen.constant({ttl: 1000})

// values
var key = kgen()

@@ -144,9 +128,7 @@ var meta = mgen(key)

// write the record then check
client.put(key, record, meta, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
client.put(key, record, meta, function (err) {
if (err) throw err
client.select(key, bins, pol, function (err, _record, metadata, key) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
client.select(key, bins, pol, function (err, _record) {
expect(err).not.to.be.ok()
expect(_record).to.only.have.keys(bins)

@@ -158,4 +140,4 @@

client.remove(key, function (err, key) {
if (err && err.code !== status.AEROSPIKE_OK) { throw new Error(err.message) }
client.remove(key, function (err) {
if (err) throw err
done()

@@ -162,0 +144,0 @@ })

@@ -17,5 +17,10 @@ // *****************************************************************************

const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const options = require('./util/options')
const expect = require('expect.js')
const deasync = require('deasync')
const node_util = require('util')
global.expect = expect
exports.options = options

@@ -31,57 +36,65 @@ exports.namespace = options.namespace

const client = aerospike.client(options.getConfig())
const config = options.getConfig()
exports.config = config
const client = Aerospike.client(config)
exports.client = client
const check = function (err) {
if (err && err.code !== 0) throw new Error(err.message)
function UDFHelper (client) {
this.client = client
this.udfRegister = deasync(this.client.udfRegister).bind(client)
this.udfRegisterWait = deasync(this.client.udfRegisterWait).bind(client)
this.udfRemove = deasync(this.client.udfRemove).bind(client)
}
function UDFHelper () { }
UDFHelper.prototype.register = function (filename, cb) {
UDFHelper.prototype.register = function (filename, done) {
var script = __dirname + '/' + filename
client.udfRegister(script, function (err) {
check(err)
client.udfRegisterWait(filename, 50, function (err) {
check(err)
if (cb) cb()
})
})
this.udfRegister(script)
this.udfRegisterWait(filename, 50)
if (done) done()
}
UDFHelper.prototype.remove = function (filename, cb) {
client.udfRemove(filename, function (err) {
check(err)
if (cb) cb()
})
UDFHelper.prototype.remove = function (filename, done) {
try {
this.udfRemove(filename)
} catch (error) {
if (error.code !== Aerospike.status.AEROSPIKE_ERR_UDF) throw error
}
if (done) done()
}
function ServerInfoHelper () {
this.features = []
this.nsconfig = {}
this.cluster = []
function IndexHelper (client) {
this.client = client
this.createStringIndex = deasync(client.createStringIndex).bind(client)
this.createIntegerIndex = deasync(client.createIntegerIndex).bind(client)
this.indexCreateWait = deasync(client.indexCreateWait).bind(client)
this.indexRemove = deasync(client.indexRemove).bind(client)
}
function IndexHelper () { }
IndexHelper.prototype.create = function (index_name, bin_name, index_type) {
IndexHelper.prototype.create = function (index_name, set_name, bin_name, index_type, done) {
var index = {
ns: options.namespace,
set: options.set,
set: set_name,
bin: bin_name,
index: index_name
}
var builder
switch (index_type.toLowerCase()) {
case 'string': builder = client.createStringIndex; break
case 'integer': builder = client.createIntegerIndex; break
case 'string': this.createStringIndex(index); break
case 'integer': this.createIntegerIndex(index); break
}
builder.call(client, index, function (err) {
check(err)
client.indexCreateWait(index.ns, index.index, 100, function (err) {
check(err)
})
})
this.indexCreateWait(index.ns, index.index, 100)
if (done) done()
}
IndexHelper.prototype.remove = function (index_name, done) {
this.indexRemove(options.namespace, index_name, {})
if (done) done()
}
function ServerInfoHelper () {
this.features = []
this.nsconfig = {}
this.cluster = []
}
ServerInfoHelper.prototype.supports_feature = function (feature) {

@@ -96,25 +109,29 @@ return this.features.indexOf(feature) >= 0

ServerInfoHelper.prototype.fetch_info = function () {
var _this = this
var self = this
var done = false
client.info('features', function (err, result) {
check(err)
if (err) throw new Error(err)
var features = result.split('\n')[0].split('\t')[1]
_this.features = features.split(';')
})
self.features = features.split(';')
}, function () { done = true })
deasync.loopWhile(function () { return !done })
}
ServerInfoHelper.prototype.fetch_namespace_config = function (ns) {
var _this = this
var self = this
var done = false
client.info('namespace/' + ns, function (err, result) {
check(err)
if (err) throw new Error(err)
var config = result.split('\n')[0].split('\t')[1]
config.split(';').forEach(function (nv) {
nv = nv.split('=')
_this.nsconfig[nv[0]] = nv[1]
self.nsconfig[nv[0]] = nv[1]
})
})
}, function () { done = true })
deasync.loopWhile(function () { return !done })
}
var udf_helper = new UDFHelper()
var index_helper = new IndexHelper()
var server_info_helper = new ServerInfoHelper()
var udf_helper = new UDFHelper(client)
var index_helper = new IndexHelper(client)
var server_info_helper = new ServerInfoHelper(client)

@@ -125,8 +142,13 @@ exports.udf = udf_helper

exports.fail = function fail (message) {
if (typeof message !== 'string') {
message = node_util.inspect(message)
}
expect().fail(message)
}
/* global before */
before(function (done) {
client.connect(function (err) {
if (err && err.code !== aerospike.status.AEROSPIKE_OK) {
throw new Error(err.message)
}
if (err) throw err
server_info_helper.fetch_info()

@@ -133,0 +155,0 @@ server_info_helper.fetch_namespace_config(options.namespace)

@@ -17,11 +17,9 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../lib/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')
const status = aerospike.status
const language = aerospike.language
const status = Aerospike.status
const language = Aerospike.language

@@ -35,4 +33,3 @@ describe('client.udfRegister()', function (done) {

client.udfRegister(filename, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
done()

@@ -46,4 +43,3 @@ })

client.udfRegister(filename, language.LUA, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
done()

@@ -58,4 +54,3 @@ })

client.udfRegister(filename, infopolicy, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
done()

@@ -70,4 +65,3 @@ })

client.udfRegister(filename, language.LUA, infopolicy, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
done()

@@ -90,7 +84,5 @@ })

client.udfRegister(filename, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
client.udfRegisterWait('udf_test.lua', 1000, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
expect(err).not.to.be.ok()
done()

@@ -97,0 +89,0 @@ })

@@ -17,10 +17,8 @@ // *****************************************************************************

/* global describe, it */
/* global expect, describe, it */
// we want to test the built aerospike module
const aerospike = require('../build/Release/aerospike')
const Aerospike = require('../lib/aerospike')
const helper = require('./test_helper')
const expect = require('expect.js')
const status = aerospike.status
const status = Aerospike.status

@@ -31,12 +29,12 @@ describe('client.udfRemove()', function (done) {

it('should remove an UDF module with a info policy from aerospike cluster', function (done) {
var dir = __dirname
var filename = dir + '/udf_test.lua'
var script = 'udf_test.lua'
var filename = __dirname + '/' + script
var infopolicy = { timeout: 1000, send_as_is: true, check_bounds: false }
client.udfRegister(filename, infopolicy, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
client.udfRemove('udf_test.lua', infopolicy, function (err) {
expect(err).to.be.ok()
expect(err.code).to.equal(status.AEROSPIKE_OK)
done()
expect(err).not.to.be.ok()
client.udfRegisterWait(script, 50, function () {
client.udfRemove(script, infopolicy, function (err) {
expect(err).not.to.be.ok()
done()
})
})

@@ -43,0 +41,0 @@ })

@@ -76,6 +76,2 @@ // *****************************************************************************

describe: 'Password to connect to a secure cluster'
},
run_aggregation: {
default: false,
describe: 'Set this to true to run aggregation tests'
}

@@ -86,8 +82,14 @@ })

function baseDir () {
return __dirname.split('/').slice(0, -2).join('/')
}
options.getConfig = function () {
var test_dir = __dirname.split('/').slice(0, -1).join('/')
var config = {
log: {level: options.log, file: options.log_file},
policies: {timeout: options.timeout},
modlua: {userPath: test_dir}
modlua: {
userPath: baseDir() + '/test',
systemPath: baseDir() + '/aerospike-client-c/lua'
}
}

@@ -94,0 +96,0 @@ if (options.host !== null) {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc