I first discovered this issue when trying to set up a ZEO server with multiple filestorages under Plone 4.
At time of writing the latest version of collective.recipe.filestorage is 0.6 with no sign of getting updated.
For those not in the know, collective.recipe.filestorage is a very handy utility that allows you to easily configure multiple storages (filestorage, blobstorage) behind a single Zeoserver from your buildout configuration. This is essential to the way I'm currently handling my client's infrastructure in the Amazon cloud.
Basically the problem is if you configure zeo-address in your plone.recipe.zope2instance section to be zeohostname:8100 but the zeoserver itself is set to bind to 0.0.0.0:8100 (also essential in my client's infrastructure), collective.recipe.filestorage will not detect that as a match and will not complete the required configuration that allow the zope clients to be correctly configured with the extra storage information.
I have submitted a patch to the code maintainers here but I haven't had any response so I'm not sure how active the project is anymore.
The patch needs to be applied to __init__.py under collective/recipe/filestorage in the egg.
You can get the patch that needs to be applied to that file from the above link or here for convenience.
The contents of the patch for posterity:
41,42c41,50
< if zeo_address is None or zeo_address == part.get('zeo-address', 8100):
< self.zope_parts.append(part_name)
---
> try:
> zeo_host, zeo_port = zeo_address.split(':')
> except ValueError, AttributeError:
> if zeo_address is None or zeo_address == part.get('zeo-address', 8100):
> self.zope_parts.append(part_name)
> else:
> zope_address = part.get('zeo-address', '8100')
> zope_tokens = zope_address.split(':')
> if zeo_port == zope_tokens[-1]:
> self.zope_parts.append(part_name)
It just makes the process a little bit smarter. It still makes the same assumption as the original code, that the port number of the zeo server uniquely identifies it. What it does differently is allows for the format where the IP address is specified, thus allowing the correct configuration of the Zope clients with regards to the multiple storages.