Bug #1429
closedcfuse assert failed assert(diri->dn_set.size() < 2)
0%
Description
This assertion happens when a directory is moved on one client, and then the other client changes to that directory. I'm able to reproduce it reliably with the following pattern:
node1:
mkdir /c/d1
mkdir /c/d2
node2:
cd /c/
ls
node1:
cd /c/
mv d2 d1/
node2:
cd /c/d1/d2
ls
../../src/client/Client.cc: 4280: FAILED assert(diri->dn_set.size() < 2)
ceph version (commit:)
1: (ceph::__ceph_assert_fail(char const*, char const*, int, char const*)+0x89) [0x7468c1]
2: (Client::readdir_r_cb(dir_result_t*, int ()(void, dirent*, stat*, int, long), void*)+0x408) [0x68119c]
3: /usr/ceph/bin/cfuse() [0x655660]
4: (()+0x12546) [0x7ffff7bb9546]
5: (fuse_session_loop()+0x75) [0x7ffff7bb7cb5]
6: (ceph_fuse_ll_main(Client*, int, char const**, int)+0x4fd) [0x655fc7]
7: (main()+0x5ad) [0x64cad4]
8: (_libc_start_main()+0xff) [0x7ffff630deff]
9: /usr/ceph/bin/cfuse() [0x64c3b9]
ceph version (commit:)
1: (ceph::_ceph_assert_fail(char const*, char const*, int, char const*)+0x89) [0x7468c1]
2: (Client::readdir_r_cb(dir_result_t*, int ()(void, dirent*, stat*, int, long), void*)+0x408) [0x68119c]
3: /usr/ceph/bin/cfuse() [0x655660]
4: (()+0x12546) [0x7ffff7bb9546]
5: (fuse_session_loop()+0x75) [0x7ffff7bb7cb5]
6: (ceph_fuse_ll_main(Client*, int, char const**, int)+0x4fd) [0x655fc7]
7: (main()+0x5ad) [0x64cad4]
8: (__libc_start_main()+0xff) [0x7ffff630deff]
9: /usr/ceph/bin/cfuse() [0x64c3b9]
Updated by Greg Farnum over 12 years ago
- Target version set to v0.35
There's probably something wonky going on with the way the client is handling moved directories -- that assert is because you "can't have multiple hard-links to a dir" and comes from our switch to giving inodes sets of parents instead of a single parent backpointer.
Updated by Sage Weil over 12 years ago
Sounds like an easy fix. For dirs it should just unlink the old link in insert_trace (or whatever it is).
Updated by Greg Farnum over 12 years ago
Hopefully -- we'll have to reproduce with logging and check it out in more detail. My concern is that it may be revealing a more fundamental ordering bug with multi-client systems (like actually trying to link the directory to a new place at the wrong time).
Updated by Sage Weil over 12 years ago
- Status changed from New to Resolved
- Assignee set to Sage Weil
fixed by commit:6c6fa6dffddb6f388d03ca59e95844ddf845f491
Updated by John Spray over 7 years ago
- Project changed from Ceph to CephFS
- Category deleted (
11) - Target version deleted (
v0.35)
Bulk updating project=ceph category=ceph-fuse issues to move to fs project so that we can remove the ceph-fuse category from the ceph project