diff --git a/libs/extenders.js b/libs/extenders.js index f0f9a068..0640663f 100644 --- a/libs/extenders.js +++ b/libs/extenders.js @@ -40,6 +40,11 @@ module.exports = function(s,config){ s.onTwoFactorAuthCodeNotificationExtensions.push(callback) } // + s.onStalePurgeLockExtensions = [] + s.onStalePurgeLock = function(callback){ + s.onStalePurgeLockExtensions.push(callback) + } + // s.cloudDiskUseStartupExtensions = {} ////// EVENTS ////// diff --git a/libs/monitor.js b/libs/monitor.js index f86aa449..39b97570 100644 --- a/libs/monitor.js +++ b/libs/monitor.js @@ -1035,9 +1035,10 @@ module.exports = function(s,config,lang){ s.group[e.ke].mon[e.id].spawn.stderr.on('data',function(d){ d=d.toString(); switch(true){ - // case checkLog(d,'No space left on device'): - // - // break; + case checkLog(d,'No space left on device'): + s.checkUserPurgeLock(e.ke) + s.purgeDiskForGroup(e) + break; case checkLog(d,'error while decoding'): s.userLog(e,{type:lang['Error While Decoding'],msg:lang.ErrorWhileDecodingText}); break; diff --git a/libs/user.js b/libs/user.js index 45e19136..5b627580 100644 --- a/libs/user.js +++ b/libs/user.js @@ -322,20 +322,22 @@ module.exports = function(s,config){ callback(notFound,preset) }) } + s.checkUserPurgeLock = function(groupKey){ + var userGroup = s.group[groupKey] + if(s.group[groupKey].usedSpace > s.group[groupKey].sizeLimit){ + s.group[groupKey].sizePurgeQueue = [] + s.group[groupKey].sizePurging = false + s.systemLog(lang.sizePurgeLockedText + ' : ' + groupKey) + s.onStalePurgeLockExtensions.forEach(function(extender){ + extender(groupKey,s.group[groupKey].usedSpace,s.group[groupKey].sizeLimit) + }) + } + } if(config.cron.deleteOverMax === true){ s.checkForStalePurgeLocks = function(){ var doCheck = function(){ Object.keys(s.group).forEach(function(groupKey){ - var userGroup = s.group[groupKey] - var monitorCount = 10 - if(userGroup.mon)monitorCount = Object.keys(userGroup.mon).length - var purgeRequestCount = userGroup.sizePurgeQueue.length - var isLocked = (userGroup.sizePurging === true) - if(isLocked && purgeRequestCount > monitorCount + 10){ - s.group[groupKey].sizePurgeQueue = [] - s.group[groupKey].sizePurging = false - s.systemLog(lang.sizePurgeLockedText + ' : ' + groupKey) - } + s.checkUserPurgeLock(groupKey) }) } clearTimeout(s.checkForStalePurgeLocksInterval)