Ben Riggs wrote: > Michael DeHaan wrote: > >> Ben Riggs wrote: >> >>> Michael DeHaan wrote: >>> >>> >>>> Tom Brown wrote: >>>> >>>> >>>>> Hi >>>>> >>>>> # rpm -qa | grep cobbler >>>>> cobbler-1.0.3-1 >>>>> >>>>> I was adding some boxes to cobbler with a script but had to kill it half >>>>> way through due to a box being added by mistake. I killed it but now >>>>> when i run a cobbler sync or try to restart cobbler i get this >>>>> >>>>> Starting cobbler daemon: Traceback (most recent call last): >>>>> File "/usr/bin/cobblerd", line 32, in ? >>>>> api = bootapi.BootAPI() >>>>> File "/usr/lib/python2.3/site-packages/cobbler/api.py", line 73, in >>>>> __init__ >>>>> self.deserialize() >>>>> File "/usr/lib/python2.3/site-packages/cobbler/api.py", line 381, in >>>>> deserialize >>>>> return self._config.deserialize() >>>>> File "/usr/lib/python2.3/site-packages/cobbler/config.py", line 169, >>>>> in deserialize >>>>> if not serializer.deserialize(x,topological=True): >>>>> File "/usr/lib/python2.3/site-packages/cobbler/serializer.py", line >>>>> 88, in deserialize >>>>> rc = storage_module.deserialize(obj,topological) >>>>> File >>>>> "/usr/lib/python2.3/site-packages/cobbler/modules/serializer_yaml.py", >>>>> line 103, in deserialize >>>>> datastruct = yaml.load(data).next() # first record >>>>> File "/usr/lib/python2.3/site-packages/cobbler/yaml/load.py", line 89, >>>>> in next >>>>> self.nestedDocs.nestToNextLine() >>>>> File "/usr/lib/python2.3/site-packages/cobbler/yaml/stream.py", line >>>>> 137, in nestToNextLine >>>>> indentation = indentLevel(line) >>>>> File "/usr/lib/python2.3/site-packages/cobbler/yaml/stream.py", line >>>>> 12, in indentLevel >>>>> while n < len(line) and line[n] == ' ': >>>>> TypeError: len() of unsized object >>>>> [FAILED] >>>>> >>>>> Anyone got any ideas how to clean this back up again? >>>>> >>>>> thanks >>>>> >>>>> _______________________________________________ >>>>> cobbler mailing list >>>>> [email protected] >>>>> https://fedorahosted.org/mailman/listinfo/cobbler >>>>> >>>>> >>>>> >>>> You will need to either fix or delete the offending config file in >>>> /var/lib/cobbler. >>>> >>>> This is generally a good reason to keep backups of the files in that >>>> directory. >>>> >>>> --Michael >>>> _______________________________________________ >>>> cobbler mailing list >>>> [email protected] >>>> https://fedorahosted.org/mailman/listinfo/cobbler >>>> >>>> >>> This issue is one we have run into a number of times as well. It arises >>> from the way the yaml module handles the files. Right now, we are just >>> careful to keep good backups (and to back the files up if we are going >>> to be making major changes), but a better solution is to either fix >>> cobbler/modules/serializer_yaml.py's interaction with the yaml module, >>> or switch to a different serializer. >>> >>> Ben >>> _______________________________________________ >>> cobbler mailing list >>> [email protected] >>> https://fedorahosted.org/mailman/listinfo/cobbler >>> >>> >> Currently there is locking around access to this file using flock(). >> >> If you clobber writing a text file in the middle of writing a text file, >> I'm not sure how you would intend to solve that. >> >> It is true we have alternative serializers (experimental!) available for >> those that want to use them. That all being said, I haven't heard this >> problem reported until this email, so I am not sure the problem is >> widespread. If it is, we definitely would want to look further. >> >> One simple option we could do it have the serializer save the config of >> each object in seperate files in a directory structure... though I'd want >> to do this with a modification to serializer_yaml such that we could >> automatically support new users w/o having an upgrade process. >> >> i.e. >> >> /var/lib/cobbler/config/distros/* >> /var/lib/cobbler/config/profiles/* >> /var/lib/cobbler/config/systems/* >> /var/lib/cobbler/config/repos/* >> >> Finding object names would be as simple as globbing the directories. >> Since cobbler would still load things into RAM, however, it would >> probably make things slower. >> >> So, ultimately, I'm more in favor of just adding a crontab.weekly entry >> to do regular backups, coupled with some simple code to detect >> corruption and offer to restore the backup. Backups should be forceable >> with a command like "cobbler backup". >> >> --Michael >> >> >> _______________________________________________ >> cobbler mailing list >> [email protected] >> https://fedorahosted.org/mailman/listinfo/cobbler >> > > Just as a further FYI, the only times I've encountered the problem were > either due to a user generated ctrl+c or a some sort of strange > versioning/python conflict that caused a traceback (and, again, due to > user error, not cobbler itself). > _______________________________________________ > cobbler mailing list > [email protected] > https://fedorahosted.org/mailman/listinfo/cobbler >
How about a patch that hooks ctrl+c before entering the serializer and releases it after writing the record(s)? That seems to solve it. We could of course allow ctrl-c but would make sure we wrote the file before exiting. I'm not sure on the traceback case, that seems to be a bug that should be solved by fixing the bug :) --Michael _______________________________________________ cobbler mailing list [email protected] https://fedorahosted.org/mailman/listinfo/cobbler
