Files
dolt/integration-tests/mysql-client-tests/node/concurrency.js
2022-09-22 16:16:46 -07:00

99 lines
2.6 KiB
JavaScript

const mysql = require('mysql2/promise');
const args = process.argv.slice(2);
const user = args[0];
const port = args[1];
const dbName = args[2];
async function createTable() {
const conn = await getConnection();
try {
await conn.execute("create table users (name varchar(20))");
} catch (err) {
console.error(`Error creating table:`, err);
process.exit(1);
} finally {
conn.end();
}
}
async function commitTable() {
const conn = await getConnection();
try {
await conn.execute(`call dolt_add('.')`);
await conn.execute(`call dolt_commit('-am', 'new table')`);
} catch (err) {
console.error(`Error committing table:`, err);
} finally {
conn.end();
}
}
const authors = [
'bob', 'john', 'mary', 'alice',
'bob2', 'john2', 'mary2', 'alice2',
'bob3', 'john3', 'mary3', 'alice3',
'bob4', 'john4', 'mary4', 'alice4',
'bob5', 'john5', 'mary5', 'alice5',
'bob6', 'john6', 'mary6', 'alice6',
'bob7', 'john7', 'mary7', 'alice7',
'bob8', 'john8', 'mary8', 'alice8',
'bob9', 'john9', 'mary9', 'alice9'
];
async function insertAuthor(name) {
const conn = await getConnection();
try {
await conn.execute('start transaction');
await conn.execute('INSERT INTO users (name) VALUES(?);', [name]);
await conn.execute(`call dolt_commit('-am', concat('created author', ?))`, [name]);
} catch (err) {
console.error(`Error committing ${name}:`, err);
process.exit(1)
} finally {
conn.end();
}
}
async function validateCommits(name) {
const conn = await getConnection();
var results;
try {
results = await conn.query(`select count(*) as c from dolt_log where message like 'created author%'`);
} catch (err) {
console.error(`Error:`, err);
process.exit(1)
} finally {
conn.end();
}
const count = results[0][0].c;
const expectedCount = authors.length;
if (count != expectedCount) {
console.error(`Unexpected number of commits: expected ${expectedCount}, was ${count}`);
process.exit(1)
}
}
async function getConnection() {
const connection = await mysql.createConnection({
host: '127.0.0.1',
port: port,
user: user,
database: dbName,
});
return connection;
}
// Regression test concurrent dolt_commit with node clients
// https://github.com/dolthub/dolt/issues/4361
async function main() {
await createTable();
await commitTable();
await Promise.all(authors.map(insertAuthor));
await validateCommits();
}
main();