From 20402accfad5f68cfb0a0d9756be65cdd25a47c8 Mon Sep 17 00:00:00 2001 From: hns Date: Wed, 30 Oct 2002 11:56:59 +0000 Subject: [PATCH] Fixed bug where a node deleted by replication was left in the cache via secondary key without being marked as invalid. (bug 147) --- src/helma/objectmodel/db/NodeManager.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/helma/objectmodel/db/NodeManager.java b/src/helma/objectmodel/db/NodeManager.java index a48d5f54..1cdef7cc 100644 --- a/src/helma/objectmodel/db/NodeManager.java +++ b/src/helma/objectmodel/db/NodeManager.java @@ -171,7 +171,7 @@ public final class NodeManager { deleteNode (db, tx.txn, node); } } - } + } /** @@ -1197,7 +1197,8 @@ public final class NodeManager { */ public void replicateCache (Vector add, Vector delete) { if (logReplication) - app.logEvent ("Received cache replication event: "+add.size()+" added, "+delete.size()+" deleted"); + app.logEvent ("Received cache replication event: "+add.size()+ + " added, "+delete.size()+" deleted"); synchronized (cache) { for (Enumeration en=add.elements(); en.hasMoreElements(); ) { Node n = (Node) en.nextElement (); @@ -1210,14 +1211,17 @@ public final class NodeManager { cache.put (n.getKey(), n); } for (Enumeration en=delete.elements(); en.hasMoreElements(); ) { + // NOTE: it would be more efficient to transfer just the keys + // of nodes that are to be deleted. Node n = (Node) en.nextElement (); DbMapping dbm = app.getDbMapping (n.getPrototype ()); if (dbm != null) dbm.notifyDataChange (); n.setDbMapping (dbm); n.nmgr = safe; - cache.put (n.getKey(), n); - evictNode (n); + Node oldNode = (Node) cache.get (n.getKey()); + if (oldNode != null) + evictNode (oldNode); } } }