> On Jan. 25, 2017, 7:45 a.m., Jie Yu wrote: > > src/slave/containerizer/mesos/provisioner/docker/store.cpp, lines 276-279 > > <https://reviews.apache.org/r/54215/diff/6/?file=1613732#file1613732line276> > > > > Can you also validate the ordering with docker code? For instance, say > > the layer paths are: > > > > [a, b, c, d, a, e, f] > > > > will the end result be: > > > > [b, c, d, a, e, f] > > > > or > > > > [a, b, c, d, e, f] > > > > Please note that the ordering we have here in our code might not be the > > same as that in docker (i.e., whether base layer is to the left most or to > > the right most?) > > Gilbert Song wrote: > Did some research on docker. Basically, as I mentioned above, the layer > ids are read from the disk, so they are `unique` and should be ordered > `alphabetically`. Then, docker loads each layer depending on the layer > `child-parent` relationship. It is similar to what we currently do in local > puller and it would not have the case of duplicate layer paths since it is > like a linked list from bottom to the top. The order should be: > > [Grandparent, parent, child] > > In our registry puller, the vector of layer ids are collected differently > (not relying on finding next parent from the base layer). We just queue all > the layer ids using the returned manifest, and fortunately the > `v1Compatibility::id` from the manifest are sorted before hand depending on > the `parent-child` relationship. > > Only some self-built images may contain duplicate layers (e.g., [a, a, b, > b, b, c] from the manifest). We should still fix it for them though. It seems > to me that our current fix in docker store is just a workaround. I would > propose to fix it in registry puller `pull()`: > > 1. Depending on the leaf layer id, collect all layer ids using > `parent-child` relationship. > 2. Filter the vector of layer ids to make sure ids are unique in registry > puller. > > I prefer (2). Thoughts?
Tested the same image `mesosphere/inky` using both pullers on master branch. As expected, `local puller` passed and `registry puller` failed. - Gilbert ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/54215/#review162963 ----------------------------------------------------------- On Jan. 24, 2017, 12:35 p.m., Gilbert Song wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/54215/ > ----------------------------------------------------------- > > (Updated Jan. 24, 2017, 12:35 p.m.) > > > Review request for mesos, Avinash sridharan, Artem Harutyunyan, Jie Yu, Qian > Zhang, and Zhitao Li. > > > Bugs: MESOS-6654 > https://issues.apache.org/jira/browse/MESOS-6654 > > > Repository: mesos > > > Description > ------- > > This issue is exposed by pulling the 'mesosphere/inky' docker > image using registry puller. Due to the duplicate layer id > from the manifest, there are duplicate layer pathes passed > to the backend. The aufs backend cannot handle this case and > returns 'invalid arguments' error. Ideally, we should make > sure that layer paths that are passed to the backend are > unique. > > > Diffs > ----- > > src/slave/containerizer/mesos/provisioner/docker/store.cpp > 9dccd0673dbc0c61abfd4b88097f86e7d7131c46 > > Diff: https://reviews.apache.org/r/54215/diff/ > > > Testing > ------- > > make check > > Tested by the unit test > `ROOT_CURL_INTERNET_DockerDefaultEntryptRegistryPuller`. > > Manually tested using the `mesosphere/inky` image, which contains duplicate > layer ids. > > > Thanks, > > Gilbert Song > >