From f6b2909aad803c4052a948df6fbfcf62fe53ced0 Mon Sep 17 00:00:00 2001 From: hns Date: Mon, 13 Jan 2003 11:59:57 +0000 Subject: [PATCH] Actually evict/invalidate nodes when invalidating child nodes via id/accessname, if they are present in the cache. Fixes bug 190, http://helma.org/bugs/show_bug.cgi?id=190 --- src/helma/objectmodel/db/Node.java | 4 ++-- src/helma/objectmodel/db/NodeManager.java | 20 ++++++++++++++++--- .../objectmodel/db/WrappedNodeManager.java | 4 ++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/helma/objectmodel/db/Node.java b/src/helma/objectmodel/db/Node.java index 148165fd..7ac96a79 100644 --- a/src/helma/objectmodel/db/Node.java +++ b/src/helma/objectmodel/db/Node.java @@ -435,9 +435,9 @@ public final class Node implements INode, Serializable { Relation rel = getDbMapping ().getSubnodeRelation (); if (rel != null) { if (rel.usesPrimaryKey()) { - nmgr.evictKey (new DbKey (getDbMapping().getSubnodeMapping(), key)); + nmgr.evictNodeByKey (new DbKey (getDbMapping().getSubnodeMapping(), key)); } else { - nmgr.evictKey (new SyntheticKey (getKey(), key)); + nmgr.evictNodeByKey (new SyntheticKey (getKey(), key)); } } } diff --git a/src/helma/objectmodel/db/NodeManager.java b/src/helma/objectmodel/db/NodeManager.java index f9cb1440..3d5f1495 100644 --- a/src/helma/objectmodel/db/NodeManager.java +++ b/src/helma/objectmodel/db/NodeManager.java @@ -360,8 +360,8 @@ public final class NodeManager { } /** - * Remove a node from the node cache. If at a later time it is accessed again, it will be - * refetched from the database. + * Remove a node from the node cache. If at a later time it is accessed again, + * it will be refetched from the database. */ public void evictNode (Node node) { node.setState (INode.INVALID); @@ -369,7 +369,21 @@ public final class NodeManager { } /** - * Used when a key stops being valid for a node. + * Remove a node from the node cache. If at a later time it is accessed again, + * it will be refetched from the database. + */ + public void evictNodeByKey (Key key) { + Node n = (Node) cache.remove (key); + if (n != null) { + n.setState (INode.INVALID); + if (!(key instanceof DbKey)) + cache.remove (n.getKey ()); + } + } + + /** + * Used when a key stops being valid for a node. The cached node itself + * remains valid, if it is present in the cache by other keys. */ public void evictKey (Key key) { cache.remove (key); diff --git a/src/helma/objectmodel/db/WrappedNodeManager.java b/src/helma/objectmodel/db/WrappedNodeManager.java index 5a425bac..0499b821 100644 --- a/src/helma/objectmodel/db/WrappedNodeManager.java +++ b/src/helma/objectmodel/db/WrappedNodeManager.java @@ -110,6 +110,10 @@ import java.util.Vector; nmgr.evictNode (node); } + public void evictNodeByKey (Key key) { + nmgr.evictNodeByKey (key); + } + public void evictKey (Key key) { nmgr.evictKey (key); }