| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Signed-off-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
| |
insert_readdir_results
Signed-off-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
| |
Skip, but do not talk about, NULL dentries.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
|
|
| |
In many case when we are unlinking inodes we also need to invalidate the
dentry lease, as we are not promised that the dentry is NULL. Be a bit
over-conservative here for good measure.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
| |
Basically, always keep the dentry and dir, unless we are pruning.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
|
| |
This used to be handled in _unlink() and _rmdir() even when a trace was
present in the reply, but this is cleaner.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
| |
The reply handler will do this in a safe, ordered fashion.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
|
| |
Return ENOENT for a valid NULL dentry in our cache. Restructure _lookup
to avoid duplicating some code.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
| |
Only do this for the first reply.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
|
|
|
|
| |
The insert_trace() logic is about managing local cache consistency; the
verify_reply_trace() is about retrying requests to get the results that
our callers need.
Set up stubs to handle rmdir and unlink while we are here.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
|
|
|
|
| |
MetaRequests may have references to these dentries. Instead of removing
them and tearing down the directory, just unlink them from the inodes.
We could be a bit smarter here if we looked at the reference count, but
this works too.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
|
| |
If we get a NULL lookup result, unlink the inode but leave the dentry
in place.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
| |
Tracking down #5021
Signed-off-by: Sage Weil <sage@inktank.com>
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
If we short-circuit and bootstrap, cancel our timer. Otherwise it will
go off some time later when we are in who knows what state.
Backport: cuttlefish
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
If we are probing and get (say) an election timeout that calls reset(),
cancel the timer. Otherwise, we assert later with a splat like
2013-06-24 01:09:33.675882 7fb9627e7700 4 mon.b@0(leader) e1 probe_timeout 0x307a520
2013-06-24 01:09:33.676956 7fb9627e7700 -1 mon/Monitor.cc: In function 'void Monitor::probe_timeout(int)' thread 7fb9627e7700 time 2013-06-24 01:09:43.675904
mon/Monitor.cc: 1888: FAILED assert(is_probing() || is_synchronizing())
ceph version 0.64-613-g134d08a (134d08a9654f66634b893d493e4a92f38acc63cf)
1: (Monitor::probe_timeout(int)+0x161) [0x56f5c1]
2: (Context::complete(int)+0xa) [0x574a2a]
3: (SafeTimer::timer_thread()+0x425) [0x7059a5]
4: (SafeTimerThread::entry()+0xd) [0x7065dd]
5: (()+0x7e9a) [0x7fb966f62e9a]
6: (clone()+0x6d) [0x7fb9652f9ccd]
NOTE: a copy of the executable, or `objdump -rdS <executable>` is needed to interpret this.
Fixes: #5438
Backport: cuttlefish
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
create_initial called 2x
The create_initial() method may get called multiple times; make sure it
will unconditionally generate new/initial rotating keys. Move the block
up so that we can easily assert as much.
Broken by commit cd98eb0c651d9ee62e19c2cc92eadae9bed678cd.
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Yehuda Sadeh <yehuda@inktank.com>
|
| |
| |
| |
| |
| | |
Fixes: #5443
Signed-off-by: Sage Weil <sage@inktank.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
ceph-mon recently started using Preforker to working around forking issues.
As a result, internal_safe_to_start_threads got set sooner and calls to
pick_addresses() which try to set string config values now fail because
there are no config observers for them.
Work around this by observing the change while we adjust the value. We
assume pick_addresses() callers are smart enough to realize that their
result will be reflected by cct->_conf and not magically handled elsewhere.
Fixes: #5195, #5205
Backport: cuttlefish
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Dan Mick <dan.mick@inktank.com>
|
| |
| |
| |
| | |
Signed-off-by: Dan Mick <dan.mick@inktank.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
We sample the (max - active) recovery ops to know how many to start, but
do not hold the lock over the full duration, such that it is possible to
start too many ops. This isn't problematic except that our condition
checks for being == max but not beyond it, and we will continue to start
recovery ops when we shouldn't. Fix this by adjusting the conditional
to be <=.
Reported-by: Stefan Priebe <s.priebe@profihost.ag>
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: David Zafman <david.zafman@inktank.com>
|
|\ \
| | |
| | | |
Reviewed-by: Sage Weil <sage@inktank.com>
|
| | |
| | |
| | |
| | | |
Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
|
| | |
| | |
| | |
| | | |
Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
|
| | |
| | |
| | |
| | | |
Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
|
| | |
| | |
| | |
| | | |
Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
|
| | |
| | |
| | |
| | | |
Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
|
| | |
| | |
| | |
| | | |
Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
|
| | |
| | |
| | |
| | | |
Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
|
| | |
| | |
| | |
| | | |
Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
|
| | |
| | |
| | |
| | | |
Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
As for 2a4953b697a3464862fd3913336edfd7eede2487 ceph-disk no longer uses
this.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|\ \ \
| |/ /
|/| /
| |/ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
If we restart standby replay shortly after startup, before we actually have
any segments, we an trigger a segfault here:
ceph version 0.64-441-gc39b99c (c39b99cdecceaca77f66eafbcc38387406826406)
1: ceph-mds() [0x975caa]
2: (()+0xfcb0) [0x7fc33b5a5cb0]
3: (MDLog::standby_trim_segments()+0x192) [0x78a932]
4: (MDS::C_MDS_StandbyReplayRestartFinish::finish(int)+0x39) [0x595f69]
5: (Journaler::_finish_reprobe(int, unsigned long, Context*)+0x190) [0x7917b0]
6: (Filer::_probed(Filer::Probe*, object_t const&, unsigned long, utime_t)+0x558) [0x7c6b38]
7: (Objecter::C_Stat::finish(int)+0xc0) [0x7c7930]
8: (Objecter::handle_osd_op_reply(MOSDOpReply*)+0xe48) [0x7b2c78]
9: (MDS::handle_core_message(Message*)+0xae8) [0x589858]
10: (MDS::_dispatch(Message*)+0x2f) [0x589a1f]
11: (MDS::ms_dispatch(Message*)+0x1d3) [0x58b4a3]
12: (DispatchQueue::entry()+0x3f1) [0x943861]
13: (DispatchQueue::DispatchThread::entry()+0xd) [0x86e32d]
Fixes: #5333
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Greg Farnum <greg@inktank.com>
(cherry picked from commit abd0ff64e108b7670a062b3fa39baaf3d3e48fb3)
|
| |\
| | |
| | | |
Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>
|
| |/
| |
| |
| |
| |
| |
| |
| | |
This closes a very narrow race during mon creation where there are no
service keys.
Fixes: #5427
Signed-off-by: Sage Weil <sage@inktank.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
I think I assumed no_reply() was releasing the references, but it is
not. Which is better, since send_reply() doesn't either. Fix the leaks
by dropping the message ref explicitly.
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
We need to discard/cancel/free the failure report messages before we
cancel a report out. Assert in the dtor to ensure we didn't forget.
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Joao Eduardo Luis <joao.luis@inktank.com>
|
| |
| |
| |
| |
| |
| | |
If they skew the ceph_argparse.py module may be missing.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|\ \
| | |
| | |
| | |
| | | |
misc msgr fixes
Reviewed-by: Greg Farnum <greg@inktank.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
We already handle the lossless replacement and lossy fault paths, but
not the lossy replacement. This fixes an assert(!cleared) in the
reaper. Adjust comments appropriately.
Signed-off-by: Sage Weil <sage@inktank.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
All paths to pipe shutdown should have cleared the con->pipe reference
already. Assert as much.
Also, do it under pipe_lock!
Signed-off-by: Sage Weil <sage@inktank.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Instead of duplicating an incomplete cleanup sequence (that does not
clear_pipe()), goto fail_unlocked and do the cleanup in a generic way.
s/rc/r/ while we are here.
Signed-off-by: Sage Weil <sage@inktank.com>
|
| | |
| | |
| | |
| | |
| | |
| | | |
We need to do this under protection of the pipe_lock.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| | |
Observed a segfault in rebind -> mark_down_all -> clear_pipe -> put that
may have been due to a racing thread clearing the connection_state pointer.
Do the clear_pipe() call under the protection of pipe_lock, as we do in
all other contexts.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|\ \
| |/
| |
| |
| | |
Conflicts:
src/ceph.in
|
| |
| |
| |
| | |
Signed-off-by: Dan Mick <dan.mick@inktank.com>
|
| |
| |
| |
| |
| |
| |
| | |
Signed-off-by: Dan Mick <dan.mick@inktank.com>
Conflicts:
src/ceph.in
|
| |
| |
| |
| |
| | |
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Dan Mick <dan.mick@inktank.com>
|
| |
| |
| |
| |
| | |
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Dan Mick <dan.mick@inktank.com>
|