Skip to content

Commit 6dc4d3b

Browse files
committed
feat(statemanager): add first edition of state manager
refers to #538 Signed-off-by: Tobias Gurtzick <[email protected]>
1 parent 1013c84 commit 6dc4d3b

File tree

4 files changed

+45
-23
lines changed

4 files changed

+45
-23
lines changed

lib/commands/create-migration.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ const optimist = require('optimist');
99
const util = require('util');
1010

1111
async function createMigrationDir (dir) {
12-
const res = await stat(dir).catch(err => ({ err: true }));
12+
const res = await stat(dir).catch(_ => {
13+
return { err: true };
14+
});
1315
if (res && res.err === true) {
1416
return mkdirp(dir);
1517
}

lib/methods/v2/statetravel.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class StateTravel {
2929

3030
Object.keys(DEFAULT).forEach(m => {
3131
StateTravel.prototype[m] = async function (...args) {
32-
await State.step(this.driver, this._counter++, this.internals);
32+
await State.step(this.driver, ++this._counter, this.internals);
3333
return State.update(
3434
this.driver,
3535
this.file,

lib/state.js

Lines changed: 40 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,10 @@
11
const MSTATE = '__dbmigrate_state__';
2+
const log = require('db-migrate-shared').log;
23

34
module.exports = {
4-
init: function (driver, internals) {
5-
if (internals.dryRun) {
6-
return Promise.resolve();
7-
}
8-
9-
return driver._createKV(internals.migrationState);
10-
},
11-
12-
startMigration: async function (driver, file, internals) {
13-
let state = await driver._getKV(internals.migrationState, MSTATE);
14-
15-
if (internals.dryRun) {
16-
return Promise.resolve();
17-
}
18-
5+
lockState: async function (driver, state, internals) {
196
if (!state) {
20-
await driver._insertKV(
7+
return driver._insertKV(
218
internals.migrationState,
229
MSTATE,
2310
JSON.stringify({
@@ -29,15 +16,36 @@ module.exports = {
2916
})
3017
);
3118
} else {
19+
state = state.value;
3220
state = JSON.parse(state);
3321
state.s.date = new Date();
34-
await driver._updateKV(
22+
return driver._updateKV(
3523
internals.migrationState,
3624
MSTATE,
3725

3826
JSON.stringify(state)
3927
);
4028
}
29+
},
30+
31+
init: async function (driver, internals) {
32+
await driver._createKV(internals.migrationState);
33+
if (!internals.dryRun) {
34+
let state = await driver._getKV(internals.migrationState, MSTATE);
35+
return module.exports.lockState(driver, state, internals);
36+
}
37+
38+
return Promise.resolve();
39+
},
40+
41+
startMigration: async function (driver, file, internals) {
42+
let state = await driver._getKV(internals.migrationState, MSTATE);
43+
44+
if (internals.dryRun) {
45+
return Promise.resolve();
46+
}
47+
48+
await module.exports.lockState(driver, state, internals);
4149

4250
return driver._insertKV(
4351
internals.migrationState,
@@ -47,7 +55,9 @@ module.exports = {
4755
},
4856

4957
update: function (driver, file, state, internals) {
58+
console.log('called');
5059
if (internals.dryRun) {
60+
log.info(`[state] update state`);
5161
return Promise.resolve();
5262
}
5363

@@ -59,7 +69,10 @@ module.exports = {
5969
return Promise.resolve();
6070
}
6171

62-
let state = await driver._getKV(internals.migrationState, MSTATE);
72+
let { value: state } = await driver._getKV(
73+
internals.migrationState,
74+
MSTATE
75+
);
6376
state = JSON.parse(state);
6477
state.s.date = new Date();
6578
return driver._updateKV(
@@ -70,11 +83,15 @@ module.exports = {
7083
},
7184

7285
step: async function (driver, step, internals) {
86+
log.verbose(`[state] proceeded to step ${step}`);
7387
if (internals.dryRun) {
7488
return Promise.resolve();
7589
}
7690

77-
let state = await driver._getKV(internals.migrationState, MSTATE);
91+
let { value: state } = await driver._getKV(
92+
internals.migrationState,
93+
MSTATE
94+
);
7895
state = JSON.parse(state);
7996
state.s.date = new Date();
8097
state.s.step = step;
@@ -90,7 +107,10 @@ module.exports = {
90107
return Promise.resolve();
91108
}
92109

93-
let state = await driver._getKV(internals.migrationState, MSTATE);
110+
let { value: state } = await driver._getKV(
111+
internals.migrationState,
112+
MSTATE
113+
);
94114
state = JSON.parse(state);
95115
state.s.date = new Date();
96116
state.s.fin = 1;

lib/walker.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ const Walker = function (driver, directory, mode, intern, prefix) {
4848

4949
Walker.prototype = {
5050
createTables: async function () {
51-
await State.init(this._driver, this.internals.migrationState);
51+
await State.init(this._driver, this.internals);
5252
return this._driver._createList(this.internals.migrationTable);
5353
},
5454

0 commit comments

Comments
 (0)