| # This is p's 'ambiguity' example |
| # |
| # mountMT("/s1/a", "/s2/b") |
| # mountMT("/s2/b", "/s3/c") |
| # mount("/s3/c", "/s4") |
| # |
| # Bogdan points out that: 'we will actually have d == "" in the echo example |
| # below (since Serve only mounts endpoints without suffixes)' |
| # |
| # I'm not using any local names because its easier to not get confused |
| # this way. |
| # |
| # resolve("/s1/a") can now have 4 possible objects, the mount point in server1, |
| # the mount point in server2, the mount point in server3, and the object d in |
| # server4. When we make a call, like SetACL, how do we tell which one to |
| # modify? If we glob("/s1/a") we get: |
| # |
| # "s1/a", ["/s2/b"(mountpoint)] |
| # "s1/a", ["/s3/c"(mountpoint)] |
| # "s1/a", ["/s4//"(mountpoint)] |
| |
| root |
| eval $_ |
| set s1=$MT_NAME |
| |
| root |
| eval $_ |
| set s2=$MT_NAME |
| |
| root |
| eval $_ |
| set s3=$MT_NAME |
| |
| mount $s1/a $s2/b 1h |
| wait $_ |
| |
| mount $s2/b $s3/c 1h |
| wait $_ |
| |
| echoServer "Echo" $s3/c |
| set es_h=$_ |
| |
| # Returns the root and three mounts at s1/a. |
| ls $s1/... |
| set l=$_ |
| eval $l |
| assert $RN 4 |
| wait $l |
| |
| # Returns three mounts at s1/a. |
| ls $s1/a |
| set l=$_ |
| eval $l |
| assert $RN 3 |
| wait $l |
| |
| stop $es_h |