[bitbake-devel] Filename too long

Mark Hatle mark.hatle at windriver.com
Wed Jan 18 19:02:15 UTC 2017


I found a problem today working through a problem report.

We have a situation where we automatically add certain project directories as
premirrors within the environment.

During the fetch2 work, the system takes this long pathname, and then embeds it
into ud.lockfile parameter, we end up with something like:

The path to the build/download dir is about 250 characters... (abbreviated below)

ud.lockfile =
/my/really/log/path/to/my/project/build/download/git2/file....my.really.log.path.to.my.project.layers.wr-kernel.recipes-kernel.linux.......git.kernel-4.8.x.git.lock

This triggers an exception, IOError with the errno '36', and error string of
'File name too long'.  (Note, this is the filename, NOT the path being too long!)

In the bitbake/lib/bb/utils.py: def lockfile(name, shared=False, retry=True,
block=False)

The system tries to:

while True:
    try:
        lf = open(name, 'a+')
        ... more work here ...
    except Exception:
        ... close the file, if opened ...
        pass
    if not retry:
        return None

This triggers an endless loop if this happens.

So at a minimum we probably need to extend the exception handling to look for
file (or path) too long errors and return/stop.

I'm wondering if, something like the following should be added:

 exception IOError as e:
     errno, strerror = e.args
     logger.fatal("IOError on lock: [%s] %s" % (errno, strerror))
     try:
         lf.close()
     except Exception:
         pass
     retry = False
     pass

(Is stopping on all IOErrors too broad of a check?)


Second, I'm not sure where the lockfile name is determined, but should there be
a way in there to shorten the lockfile to say the 'basename' instead of a full
path (if specified)?

Any suggestions would be appreciated.

--Mark



More information about the bitbake-devel mailing list