Attach the IDs of expired messages to MessageExpiredEvent.

This commit is contained in:
akwizgran
2013-03-15 16:34:38 +00:00
parent 3fd23830c9
commit 8b6bbd77ab
2 changed files with 21 additions and 8 deletions

View File

@@ -1,9 +1,22 @@
package net.sf.briar.api.db.event;
import java.util.Collection;
import net.sf.briar.api.messaging.MessageId;
/**
* An event that is broadcast when one or messages expire from the database,
* potentially changing the database's retention time.
*/
public class MessageExpiredEvent extends DatabaseEvent {
private final Collection<MessageId> expired;
public MessageExpiredEvent(Collection<MessageId> expired) {
this.expired = expired;
}
public Collection<MessageId> getMessageIds() {
return expired;
}
}

View File

@@ -1895,20 +1895,19 @@ DatabaseCleaner.Callback {
* removed.
*/
private boolean expireMessages(int size) throws DbException {
boolean removed = false;
Collection<MessageId> expired;
messageLock.writeLock().lock();
try {
retentionLock.writeLock().lock();
try {
T txn = db.startTransaction();
try {
Collection<MessageId> old = db.getOldMessages(txn, size);
if(!old.isEmpty()) {
for(MessageId m : old) removeMessage(txn, m);
expired = db.getOldMessages(txn, size);
if(!expired.isEmpty()) {
for(MessageId m : expired) removeMessage(txn, m);
db.incrementRetentionVersions(txn);
removed = true;
if(LOG.isLoggable(INFO))
LOG.info("Expired " + old.size() + " messages");
LOG.info("Expired " + expired.size() + " messages");
}
db.commitTransaction(txn);
} catch(DbException e) {
@@ -1921,8 +1920,9 @@ DatabaseCleaner.Callback {
} finally {
messageLock.writeLock().unlock();
}
if(removed) callListeners(new MessageExpiredEvent());
return removed;
if(expired.isEmpty()) return false;
callListeners(new MessageExpiredEvent(expired));
return true;
}
/**