From 8b6bbd77ab6c2ba75e990be7f121c499855e7293 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Fri, 15 Mar 2013 16:34:38 +0000 Subject: [PATCH] Attach the IDs of expired messages to MessageExpiredEvent. --- .../briar/api/db/event/MessageExpiredEvent.java | 13 +++++++++++++ .../net/sf/briar/db/DatabaseComponentImpl.java | 16 ++++++++-------- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/briar-api/src/net/sf/briar/api/db/event/MessageExpiredEvent.java b/briar-api/src/net/sf/briar/api/db/event/MessageExpiredEvent.java index 5f130f78a7..1c1e11ef91 100644 --- a/briar-api/src/net/sf/briar/api/db/event/MessageExpiredEvent.java +++ b/briar-api/src/net/sf/briar/api/db/event/MessageExpiredEvent.java @@ -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; + } } diff --git a/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java b/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java index 67287cd99a..15c3013352 100644 --- a/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java +++ b/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java @@ -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; } /** -- GitLab