checkFileExpire вынесена в отдельный файл.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/nodeJSProjects@65446 954022d7-b5bf-4e40-9824-e11837661b57
This commit is contained in:
Sergey.Konovalov
2015-10-26 13:25:38 +00:00
committed by Alexander.Trofimov
parent 8e3a227d4d
commit cb68121746
4 changed files with 49 additions and 36 deletions

View File

@ -103,7 +103,8 @@
"documents": 300,
"documentsCron": "0 5 * * * *",
"files": 604800,
"filesCron": "00 59 23 * * *"
"filesCron": "00 00 */1 * * *",
"filesremovedatonce": 10
}
}
},

View File

@ -57,8 +57,8 @@ var commonDefines = require('./../../Common/sources/commondefines');
var statsDClient = require('./../../Common/sources/statsdclient');
var config = require('config').get('services.CoAuthoring');
var sqlBase = require('./baseConnector');
var taskResult = require('./taskresult');
var canvasService = require('./canvasservice');
var checkExpire = require('./checkexpire');
var redis = require(config.get('redis.name'));
var pubsubService = require('./' + config.get('pubsub.name'));
var queueService = require('./../../Common/sources/' + configCommon.get('queue.name'));
@ -1811,39 +1811,10 @@ exports.install = function(server, callbackFunction) {
}
});
};
var checkFileExpire = function () {
utils.spawn(function*() {
try {
logger.debug('checkFileExpire start');
var removedCount = 0;
//если ввести LIMIT, тогда могут всегда отдавать одни и теже данные, которые не удаляются
var expired = yield taskResult.getExpired(cfgExpFiles);
for (var i = 0; i < expired.length; ++i) {
var docId = expired[i].tr_key;
//delete if no changes, participants
var participantCount = yield* getParticipantCount(docId);
if (!(participantCount > 0)) {
var puckerIndex = yield* getChangesIndex(docId);
if (!(puckerIndex > 0)) {
var removeRes = yield taskResult.remove(docId);
//если ничего не удалилось, значит это сделал другой процесс
if (removeRes.affectedRows > 0) {
removedCount++;
yield storage.deletePath(docId);
}
}
}
}
logger.debug('checkFileExpire end: expired = %d removedFiles = %d', expired.length, removedCount);
} catch (e) {
logger.error('checkFileExpire error:\r\n%s', e.stack);
}
});
};
//удаление файлов от которых не приходит heartbeat
var documentExpireJob = new cron.CronJob(cfgExpDocumentsCron, checkDocumentExpire);
documentExpireJob.start();
var fileExpireJob = new cron.CronJob(cfgExpFilesCron, checkFileExpire);
var fileExpireJob = new cron.CronJob(cfgExpFilesCron, checkExpire.checkFileExpire);
fileExpireJob.start();
//cache

View File

@ -0,0 +1,40 @@
var config = require('config').get('services.CoAuthoring');
var taskResult = require('./taskresult');
var storage = require('./../../Common/sources/storage-base');
var utils = require('./../../Common/sources/utils');
var logger = require('./../../Common/sources/logger');
var cfgExpFiles = config.get('expire.files');
var cfgExpFilesRemovedAtOnce = config.get('expire.filesremovedatonce');
//todo checkDocumentExpire
var checkFileExpire = function() {
utils.spawn(function*() {
try {
logger.debug('checkFileExpire start');
var expired;
var removedCount = 0;
var currentRemovedCount;
do {
currentRemovedCount = 0;
expired = yield taskResult.getExpired(cfgExpFilesRemovedAtOnce, cfgExpFiles);
console.log('expired.length' + expired.length);
for (var i = 0; i < expired.length; ++i) {
var docId = expired[i].tr_key;
//todo drop user
var removeRes = yield taskResult.remove(docId);
//если ничего не удалилось, значит это сделал другой процесс
if (removeRes.affectedRows > 0) {
currentRemovedCount++;
yield storage.deletePath(docId);
}
}
removedCount += currentRemovedCount;
} while (currentRemovedCount > 0);
logger.debug('checkFileExpire end: removedCount = %d', removedCount);
} catch (e) {
logger.error('checkFileExpire error:\r\n%s', e.stack);
}
});
};
exports.checkFileExpire = checkFileExpire;

View File

@ -166,15 +166,16 @@ function remove(docId) {
});
});
}
function getExpiredString(expireSeconds) {
function getExpiredString(maxCount, expireSeconds) {
var expireDate = new Date();
utils.addSeconds(expireDate, -expireSeconds);
var expireDateStr = sqlBase.baseConnector.sqlEscape(sqlBase.getDateTime(expireDate));
return 'SELECT * FROM task_result WHERE tr_last_open_date <= ' + expireDateStr + ';';
return 'SELECT * FROM task_result WHERE tr_last_open_date <= ' + expireDateStr +
' AND NOT EXISTS(SELECT dc_key FROM doc_changes WHERE dc_key = tr_key LIMIT 1) LIMIT ' + maxCount + ';';
}
function getExpired(expireSeconds) {
function getExpired(maxCount, expireSeconds) {
return new Promise(function(resolve, reject) {
var sqlCommand = getExpiredString(expireSeconds);
var sqlCommand = getExpiredString(maxCount, expireSeconds);
sqlBase.baseConnector.sqlQuery(sqlCommand, function(error, result) {
if (error) {
reject(error);