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; 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, * An event that is broadcast when one or messages expire from the database,
* potentially changing the database's retention time. * potentially changing the database's retention time.
*/ */
public class MessageExpiredEvent extends DatabaseEvent { 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. * removed.
*/ */
private boolean expireMessages(int size) throws DbException { private boolean expireMessages(int size) throws DbException {
boolean removed = false; Collection<MessageId> expired;
messageLock.writeLock().lock(); messageLock.writeLock().lock();
try { try {
retentionLock.writeLock().lock(); retentionLock.writeLock().lock();
try { try {
T txn = db.startTransaction(); T txn = db.startTransaction();
try { try {
Collection<MessageId> old = db.getOldMessages(txn, size); expired = db.getOldMessages(txn, size);
if(!old.isEmpty()) { if(!expired.isEmpty()) {
for(MessageId m : old) removeMessage(txn, m); for(MessageId m : expired) removeMessage(txn, m);
db.incrementRetentionVersions(txn); db.incrementRetentionVersions(txn);
removed = true;
if(LOG.isLoggable(INFO)) if(LOG.isLoggable(INFO))
LOG.info("Expired " + old.size() + " messages"); LOG.info("Expired " + expired.size() + " messages");
} }
db.commitTransaction(txn); db.commitTransaction(txn);
} catch(DbException e) { } catch(DbException e) {
@@ -1921,8 +1920,9 @@ DatabaseCleaner.Callback {
} finally { } finally {
messageLock.writeLock().unlock(); messageLock.writeLock().unlock();
} }
if(removed) callListeners(new MessageExpiredEvent()); if(expired.isEmpty()) return false;
return removed; callListeners(new MessageExpiredEvent(expired));
return true;
} }
/** /**