mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2025-05-18 17:25:16 -04:00
Add support of saving note revision and improve app start and stop procedure to ensure data integrity
This commit is contained in:
parent
56b4739e6d
commit
dbc126b156
7 changed files with 366 additions and 24 deletions
|
@ -26,8 +26,7 @@ var realtime = {
|
|||
secure: secure,
|
||||
connection: connection,
|
||||
getStatus: getStatus,
|
||||
users: users,
|
||||
notes: notes
|
||||
isReady: isReady
|
||||
};
|
||||
|
||||
function onAuthorizeSuccess(data, accept) {
|
||||
|
@ -72,9 +71,8 @@ function emitCheck(note) {
|
|||
}
|
||||
|
||||
//actions
|
||||
var users, notes;
|
||||
realtime.users = users = {};
|
||||
realtime.notes = notes = {};
|
||||
var users = {};
|
||||
var notes = {};
|
||||
//update when the note is dirty
|
||||
var updater = setInterval(function () {
|
||||
async.each(Object.keys(notes), function (key, callback) {
|
||||
|
@ -152,6 +150,7 @@ function finishUpdateNote(note, _note, callback) {
|
|||
lastchangeAt: Date.now()
|
||||
};
|
||||
_note.update(values).then(function (_note) {
|
||||
saverSleep = false;
|
||||
return callback(null, _note);
|
||||
}).catch(function (err) {
|
||||
logger.error(err);
|
||||
|
@ -179,6 +178,18 @@ var cleaner = setInterval(function () {
|
|||
if (err) return logger.error('cleaner error', err);
|
||||
});
|
||||
}, 60000);
|
||||
var saverSleep = true;
|
||||
// save note revision in interval
|
||||
var saver = setInterval(function () {
|
||||
if (saverSleep) return;
|
||||
models.Revision.saveAllNotesRevision(function (err, notes) {
|
||||
if (err) return logger.error('revision saver failed: ' + err);
|
||||
if (notes.length <= 0) {
|
||||
saverSleep = true;
|
||||
return;
|
||||
}
|
||||
});
|
||||
}, 60000 * 5);
|
||||
|
||||
function getStatus(callback) {
|
||||
models.Note.count().then(function (notecount) {
|
||||
|
@ -233,6 +244,13 @@ function getStatus(callback) {
|
|||
});
|
||||
}
|
||||
|
||||
function isReady() {
|
||||
return realtime.io
|
||||
&& Object.keys(notes).length == 0 && Object.keys(users).length == 0
|
||||
&& connectionSocketQueue.length == 0 && !isConnectionBusy
|
||||
&& disconnectSocketQueue.length == 0 && !isDisconnectBusy;
|
||||
}
|
||||
|
||||
function extractNoteIdFromSocket(socket) {
|
||||
if (!socket || !socket.handshake || !socket.handshake.headers) {
|
||||
return false;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue