Committed by Julien Muchembled
Published parameters as simple storage for generated passwords and NEO cluster name
For performance reasons, the root partition requests subpartitions during initialization of sections, whereas such processing should normally be done during the update/install phase. The consequence is that partitions may be requested whereas they depend on sections that fail (usually just temporarily, because of missing returned parameters in the first runs). For example, the request of zope partitions depends on the generation of passwords: 1. password generated (__init__) 2. zope partitions requested (__init__) 3. password saved (install) As long as a failure happens between 2 and 3, zope parameters are always updated with a different password. In the case of NEO, the instanciation of zope partitions currently succeeds even if the list of master nodes is missing (note that there is a minor bug to fix here: whenever a NEO storage is not the main one, zope processes may start too early, and the user may have to restart zopes manually). The 'inituser_done' file is created but zope processes fail to start if NEO is used as main storage, and all this happens before the password was saved in the root partition ([neo-0-final] failing to install because 'admins' parameter returned yet). This was never an issue with ZEO because zopes start successfully at the same time the 'inituser_done' file is created. One way to solve this could have been to introduce a dummy dependency between [neo-0-final] and any other section generating a password. Quite ugly and we also found non-optimal to use a non-backuped file in the root partition to save such information, whereas we need anyway to publish them for the user. Therefore, we introduce a new 'publish-early' recipe for accessing and publishing desired parameters before any request of partitions. Of course, these must not be dropped by the usual [publish] section, and to avoid having to repeating them all manually, we have also added a '-extends' option to the 'publish' recipe. We use the same technique to autogenerate and configure cluster name for NEO, which helps us in minimizing the number of params one has to pass for requesting NEO. In the 'generate.password' recipe, the 'storage-path' can now be empty, when there's no need to save the generated password in a file.
Showing 9 changed files with 158 additions and 42 deletions
slapos/recipe/publish_early.py 0 → 100644