Remove dead secrets from the connection recogniser.

This commit is contained in:
akwizgran
2012-10-24 20:13:00 +01:00
parent d940c637c2
commit 9b00a6f029

View File

@@ -76,8 +76,8 @@ class KeyManagerImpl extends TimerTask implements KeyManager, DatabaseListener {
try { try {
// Store any secrets that have been created // Store any secrets that have been created
if(!created.isEmpty()) db.addSecrets(created); if(!created.isEmpty()) db.addSecrets(created);
// Pass the current incoming secrets to the connection recogniser // Pass the current incoming secrets to the recogniser
// FIXME: This uses a separate database transaction for each secret // FIXME: This uses a separate database transaction per secret
for(TemporarySecret s : incomingOld.values()) for(TemporarySecret s : incomingOld.values())
recogniser.addSecret(s); recogniser.addSecret(s);
for(TemporarySecret s : incomingNew.values()) for(TemporarySecret s : incomingNew.values())
@@ -237,21 +237,27 @@ class KeyManagerImpl extends TimerTask implements KeyManager, DatabaseListener {
// Work out what phase of its lifecycle each secret is in // Work out what phase of its lifecycle each secret is in
long now = System.currentTimeMillis(); long now = System.currentTimeMillis();
Collection<TemporarySecret> dead = assignSecretsToMaps(now, secrets); Collection<TemporarySecret> dead = assignSecretsToMaps(now, secrets);
// Remove any dead secrets from the recogniser
for(TemporarySecret s : dead) {
ContactId c = s.getContactId();
TransportId t = s.getTransportId();
long period = s.getPeriod();
recogniser.removeSecret(c, t, period);
}
// Replace any dead secrets // Replace any dead secrets
Collection<TemporarySecret> created = replaceDeadSecrets(now, dead); Collection<TemporarySecret> created = replaceDeadSecrets(now, dead);
if(!created.isEmpty()) {
try { try {
// Store any secrets that have been created // Store any secrets that have been created
if(!created.isEmpty()) db.addSecrets(created); db.addSecrets(created);
// Pass the current incoming secrets to the connection recogniser // Pass any secrets that have been created to the recogniser
// FIXME: This uses a separate database transaction for each secret // FIXME: This uses a separate database transaction per secret
for(TemporarySecret s : incomingOld.values()) for(TemporarySecret s : created) recogniser.addSecret(s);
recogniser.addSecret(s);
for(TemporarySecret s : incomingNew.values())
recogniser.addSecret(s);
} catch(DbException e) { } catch(DbException e) {
if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString()); if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
} }
} }
}
public void eventOccurred(DatabaseEvent e) { public void eventOccurred(DatabaseEvent e) {
if(e instanceof ContactRemovedEvent) { if(e instanceof ContactRemovedEvent) {