[Zope] Preventing duplicates in ZCatalog

Oliver Bleutgen myzope@gmx.net
Wed, 23 Apr 2003 13:41:17 +0200


Wankyu Choi wrote:
> I found that this problem only occurs with CMF instances + virtual host
> monster. 
> 
> Normal Zope folders cause no such problem. Only CMF and Plone instances
> cause this problem when virtual host monster maps a domain to their paths.
> 
> It's not even a CatalogAwareness problem either since a simple call to an
> object's getPhysicalPath() via urls can demonstrate what's happening
> internally:
> 
> - Add a CMF site named 'CMF'.
> 
> - Add and set up a virtual host monster in such a way that a certain domain,
> www.example.com, for example, maps to the path of the CMF instance created
> above. 
> 
> - create a DTML method called 'test' 
> 
> A call to this DTML method's getPhysicalPath() with the URL
> "http://www.example.com/test/getPhysicalPath"  returns: ('', 'CMF', 'test')
> 
> The URL "http://www.example.com/CMF/test/getPhysicalPath"  returns: ('',
> 'CMF', 'CMF', 'test')
> 
> The URL "http://www.example.com/CMF/CMF/CMF/CMF/test/getPhysicalPath"
> returns: ('', 'CMF', 'CMF', 'CMF', 'CMF', 'CMF', 'test')
> 
> You get the idea. Without VHM, the problem disappears.
> 
> With VHM, one can create tons of duplicate entries in the portal_catalog as
> demonstrated above.
> 
> I suspect the getPhysicalPath() method overriden in the CMF package doesn't
> behave well with VHM. 
> 
> I'm cc'ing this to the CMF maillinglist since it's more of a CMF problem :-)
> 
> How can I fix it? (or is it fixed in the upcoming CMF 1.4 ?)

Worse yet, I can reproduce this without a VHM, though, just to be sure, 
I had a VHM before on that server.
I added a fresh CMF site, "CMF" and went directly (no apache in between) 
to http://myserver:8080/CMF/CMF/getPhysicalPath
and got
('','CMF','CMF')

Duh!

But I can only reproduce this with the PortalSite object for now, I 
suspected SkinnableFolder would also exhibit this bug, but didn't.
Further, I deleted any subobjects (all *_tool objects etc.) from the 
PortalSite object and the same happened.

Ok, here's a workaround which should work:
Add a normal folder (stock zope) named  'CMF' (or whatever your Portal 
Site object is called) as a subobject to the Portal Side object. This 
will prevent it from acquiring itself and causing this havoc.

HTH,
oliver