diff --git a/doxbee-sequential/safejs.js b/doxbee-sequential/safejs.js new file mode 100644 index 0000000..4ed6b3e --- /dev/null +++ b/doxbee-sequential/safejs.js @@ -0,0 +1,52 @@ +require('../lib/fakes'); +var safe = require("safe"); + +module.exports = function upload(stream, idOrPath, tag, done) { + var blob = blobManager.create(account); + var tx = db.begin(); + function backoff(err) { + tx.rollback(); + return done(err); + } + blob.put(stream, safe.sure(done, function (blobId) { + self.byUuidOrPath(idOrPath).get(safe.sure(done, function (file) { + var previousId = file ? file.version : null; + var version = { + userAccountId: userAccount.id, + date: new Date(), + blobId: blobId, + creatorId: userAccount.id, + previousId: previousId, + }; + version.id = Version.createHash(version); + Version.insert(version).execWithin(tx, safe.sure(backoff,function () { + if (!file) { + var splitPath = idOrPath.split('/'); + var fileName = splitPath[splitPath.length - 1]; + var newId = uuid.v1(); + self.createQuery(idOrPath, { + id: newId, + userAccountId: userAccount.id, + name: fileName, + version: version.id + }, safe.sure(backoff, function (q) { + q.execWithin(tx, safe.sure(backoff, function () { + afterFileExists(newId); + })); + })) + } + else return afterFileExists(null, file.id); + })); + function afterFileExists(fileId) { + FileVersion.insert({fileId: fileId,versionId: version.id}) + .execWithin(tx, safe.sure(backoff, function (err) { + File.whereUpdate({id: fileId}, { + version: version.id + }).execWithin(tx, safe.sure(backoff, function () { + tx.commit(done); + })); + })) + } + })); + })); +} diff --git a/madeup-parallel/safejs.js b/madeup-parallel/safejs.js new file mode 100644 index 0000000..c8f8906 --- /dev/null +++ b/madeup-parallel/safejs.js @@ -0,0 +1,26 @@ +require('../lib/fakes'); +var safe = require("safe"); + +module.exports = function upload(stream, idOrPath, tag, done) { + var tx = db.begin(); + var current = 0; + var total = global.parallelQueries; + + function cb() { + tx.rollback(); + done(err); + } + + + for( var i = 0; i < total; ++i ) { + FileVersion.insert({index: i}).execWithin(tx, safe.sure(cb, function onComplete() { + if (onComplete.called) return; + onComplete.called = true; + current++; + if( current === total ) { + tx.commit(); + done(); + } + })); + } +} diff --git a/package.json b/package.json index a006cce..e560d28 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "async": "^2.3.0", "bluebird": "^3.5.0", "optimist": "^0.6.1", + "safe": "^0.4.6", "text-table": "^0.2.0" }, "devDependencies": {},