Revert "add volume support"

This reverts commit b8bb69f730.

Revert this for now, we will try a simpler non-object volume first
This commit is contained in:
Girish Ramakrishnan
2020-04-27 22:55:43 -07:00
parent cc8509f8eb
commit 2cdf68379b
20 changed files with 38 additions and 864 deletions

View File

@@ -1,111 +0,0 @@
/* jslint node:true */
'use strict';
exports = module.exports = {
add,
get,
list,
update,
del,
clear,
getAppMounts
};
const assert = require('assert'),
BoxError = require('./boxerror.js'),
database = require('./database.js');
const VOLUMES_FIELDS = [ 'id', 'name', 'hostPath', 'creationTime' ].join(',');
const APP_VOLUMES_FIELDS = [ 'appId', 'volumeId', 'readOnly' ].join(',');
function get(id, callback) {
assert.strictEqual(typeof id, 'string');
assert.strictEqual(typeof callback, 'function');
database.query(`SELECT ${VOLUMES_FIELDS} FROM volumes WHERE id=?`, [ id ], function (error, result) {
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error));
if (result.length === 0) return callback(new BoxError(BoxError.NOT_FOUND, 'Volume not found'));
callback(null, result[0]);
});
}
function list(callback) {
database.query(`SELECT ${VOLUMES_FIELDS} FROM volumes ORDER BY name`, function (error, results) {
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error));
callback(null, results);
});
}
function add(id, name, hostPath, callback) {
assert.strictEqual(typeof id, 'string');
assert.strictEqual(typeof name, 'string');
assert.strictEqual(typeof hostPath, 'string');
assert.strictEqual(typeof callback, 'function');
database.query('INSERT INTO volumes (id, name, hostPath) VALUES (?, ?, ?)', [ id, name, hostPath ], function (error) {
if (error && error.code === 'ER_DUP_ENTRY' && error.sqlMessage.indexOf('name') !== -1) return callback(new BoxError(BoxError.ALREADY_EXISTS, 'name already exists'));
if (error && error.code === 'ER_DUP_ENTRY' && error.sqlMessage.indexOf('hostPath') !== -1) return callback(new BoxError(BoxError.ALREADY_EXISTS, 'hostPath already exists'));
if (error && error.code === 'ER_DUP_ENTRY' && error.sqlMessage.indexOf('PRIMARY') !== -1) return callback(new BoxError(BoxError.ALREADY_EXISTS, 'id already exists'));
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error));
callback(null);
});
}
function update(id, data, callback) {
assert.strictEqual(typeof id, 'string');
assert.strictEqual(typeof data, 'object');
assert.strictEqual(typeof callback, 'function');
var args = [ ], fields = [ ];
for (var k in data) {
fields.push(k + ' = ?');
args.push(data[k]);
}
args.push(id);
database.query('UPDATE volumes SET ' + fields.join(', ') + ' WHERE id=?', args, function (error, result) {
if (error && error.code === 'ER_DUP_ENTRY') return callback(new BoxError(BoxError.ALREADY_EXISTS, error.message));
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error));
if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND, 'App not found'));
callback(null);
});
}
function del(id, callback) {
assert.strictEqual(typeof id, 'string');
assert.strictEqual(typeof callback, 'function');
database.query('DELETE FROM volumes WHERE id=?', [ id ], function (error, result) {
if (error && error.code === 'ER_NO_REFERENCED_ROW_2') return callback(new BoxError(BoxError.CONFLICT, 'Volume is in use'));
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error));
if (result.affectedRows !== 1) return callback(new BoxError(BoxError.NOT_FOUND, 'Volume not found'));
callback(null);
});
}
function clear(callback) {
database.query('DELETE FROM volumes', function (error) {
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error));
callback(error);
});
}
function getAppMounts(appId, callback) {
assert.strictEqual(typeof appId, 'string');
assert.strictEqual(typeof callback, 'function');
database.query(`SELECT ${APP_VOLUMES_FIELDS},${VOLUMES_FIELDS} FROM volumes INNER JOIN appVolumes ON volumes.id = appVolumes.volumeId WHERE appId=?`, [ appId ], function (error, result) {
if (error) return callback(new BoxError(BoxError.DATABASE_ERROR, error));
result.forEach(r => r.readOnly = !!r.readOnly); // make it bool
callback(null, result);
});
}