Project

General

Profile

Actions

Bug #1429

closed

cfuse assert failed assert(diri->dn_set.size() < 2)

Added by Sam Lang over 12 years ago. Updated over 7 years ago.

Status:
Resolved
Priority:
Normal
Assignee:
Category:
-
Target version:
-
% Done:

0%

Source:
Tags:
Backport:
Regression:
Severity:
Reviewed:
Affected Versions:
ceph-qa-suite:
Component(FS):
Labels (FS):
Pull request ID:
Crash signature (v1):
Crash signature (v2):

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]

Actions #1

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.

Actions #2

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).

Actions #3

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).

Actions #4

Updated by Sage Weil over 12 years ago

  • Status changed from New to Resolved
  • Assignee set to Sage Weil

fixed by commit:6c6fa6dffddb6f388d03ca59e95844ddf845f491

Actions #5

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

Actions

Also available in: Atom PDF