Failure to delete container with very long filename #1781

Closed
howbazaar opened this Issue Mar 20, 2016 · 4 comments

Comments

Projects
None yet
2 participants

Required information

  • Distribution: Ubuntu
  • Distribution version: Trusty
  • The output of "lxc info" or if that fails:

$ lxc info

apicompat: 0
auth: trusted
environment:
  addresses:
  - 192.168.2.4:8443
  - 10.0.3.1:8443
  - 192.168.122.1:8443
  architectures:
  - x86_64
  - i686
  certificate:  <snip>
  driver: lxc
  driverversion: 1.1.5
  kernel: Linux
  kernelarchitecture: x86_64
  kernelversion: 3.13.0-79-generic
  server: lxd
  serverpid: 8479
  serverversion: 2.0.0.rc4
  storage: dir
  storageversion: ""

Issue description

Due to a bug in juju we were able to produce a very long filename, deep nested directories that made the lxc command fail in its removal of the container.

$ lxc delete juju-c0518c0b-97b5-47ab-8c1b-541906fb2c73-machine-0
error: Error cleaning up /var/lib/lxd/containers/juju-c0518c0b-97b5-47ab-8c1b-541906fb2c73-machine-0: lstat /var/lib/lxd/containers/juju-c0518c0b-97b5-47ab-8c1b-541906fb2c73-machine-0/rootfs/.config/lxc/juju-target/juju-to-move/juju-to-move/juju-target/juju-target/juju-to-move/juju-to-move/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-target/juju-to-move/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-to-move/juju-target/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-target/juju-to-move/juju-to-move/juju-target/juju-to-move/juju-to-move/juju-target/juju-target/juju-target/juju-target/juju-to-move/juju-to-move/juju-to-move/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-target/juju-to-move/juju-to-move/juju-to-move/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-to-move/juju-to-move/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-to-move/juju-target/juju-to-move/juju-target/juju-target/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-to-move/juju-target/juju-to-move/juju-target/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-to-move/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-target/juju-to-move/client.crt: file name too long

Owner

stgraber commented Mar 20, 2016

I just took a look and all we do in the directory backend for container removal is "os.RemovaAll(path)".
Which does seem like an appropriate thing to do. I suspect that this bug is therefore an upstream Golang bug as they could (and arguably should) detect this case and just fallback to removing things by doing a reverse walk through the target.

Owner

stgraber commented Mar 20, 2016

There appears to be a similar issue on Windows golang/go#3358

Owner

stgraber commented Mar 20, 2016

We could workaround the issue by forking "rm -Rf PATH" but that feels a bit silly.

@stgraber stgraber added the Bug label Mar 21, 2016

Owner

stgraber commented Mar 21, 2016

Marking as a bug, though I'm not sure whether it's LXD's job to workaround this...

@stgraber stgraber modified the milestone: lxd-2.0.0 Mar 30, 2016

@stgraber stgraber closed this in cc6e5c3 Mar 31, 2016

@stgraber stgraber self-assigned this Mar 31, 2016

@stgraber stgraber modified the milestones: lxd-2.0.0, lxd-2.0.0.rc8 Mar 31, 2016

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment