[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