mirror of
https://github.com/nodemailer/wildduck.git
synced 2024-09-20 15:26:03 +08:00
Allow disabling retention
This commit is contained in:
parent
e5d739d84f
commit
81fb8e38fd
|
@ -48,7 +48,9 @@ module.exports = {
|
|||
//key: '/path/to/server/key.pem'
|
||||
//cert: '/path/to/server/cert.pem'
|
||||
host: '0.0.0.0',
|
||||
maxMB: 5
|
||||
maxMB: 5,
|
||||
// if true then do not autodelete expired messages
|
||||
disableRetention: false
|
||||
},
|
||||
|
||||
pop3: {
|
||||
|
|
18
imap.js
18
imap.js
|
@ -22,7 +22,10 @@ const packageData = require('./package.json');
|
|||
const BULK_BATCH_SIZE = 150;
|
||||
|
||||
// how often to clear expired messages
|
||||
const GC_INTERVAL = 60 * 60 * 1000;
|
||||
const GC_INTERVAL = 10 * 60 * 1000;
|
||||
|
||||
// artificail delay between deleting next expired message in ms
|
||||
const GC_DELAY_DELETE = 100;
|
||||
|
||||
// Setup server
|
||||
const serverOptions = {
|
||||
|
@ -1971,7 +1974,7 @@ function clearExpiredMessages() {
|
|||
let startTime = Date.now();
|
||||
|
||||
// First, acquire the lock. This prevents multiple connected clients for deleting the same messages
|
||||
gcLock.acquireLock('gc_expired', 3 * 60 * 60 * 1000 /* Lock expires after 3 hours if not released */, (err, lock) => {
|
||||
gcLock.acquireLock('gc_expired', Math.round(GC_INTERVAL * 1.2) /* Lock expires if not released */, (err, lock) => {
|
||||
if (err) {
|
||||
server.logger.error(
|
||||
{
|
||||
|
@ -2007,6 +2010,11 @@ function clearExpiredMessages() {
|
|||
});
|
||||
};
|
||||
|
||||
if (config.imap.disableRetention) {
|
||||
// delete all attachments that do not have any active links to message objects
|
||||
return deleteOrphanedAttachments(() => done(null, true));
|
||||
}
|
||||
|
||||
let cursor = db.database
|
||||
.collection('messages')
|
||||
.find({
|
||||
|
@ -2074,7 +2082,11 @@ function clearExpiredMessages() {
|
|||
return cursor.close(() => done(err));
|
||||
}
|
||||
deleted++;
|
||||
setTimeout(processNext, 100);
|
||||
if (GC_DELAY_DELETE) {
|
||||
setTimeout(processNext, GC_DELAY_DELETE);
|
||||
} else {
|
||||
setImmediate(processNext);
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue