We already hold the lock from a few frames up the stack (ms_dispatch).
Reported-by: Simon Tian <aixt2006@gmail.com>
Signed-off-by: Sage Weil <sage@newdream.net>
newest_update osd should be stable when the primary changes, to
prevent cycles of acting set choices. For the same reason, we should
not treat the primary as a special case in choose_acting.
Also remove the magic -1 from representing the current primary.
Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
If we request a log from one osd, and then another member of our prior
set comes up with a later last_update, we should not fail when we
receive the first log.
Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
This change allows old strays that don't need backlogs
to stay acting until current members of the up set are caught up.
This allows the up set to maintain its full size during peering.
Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
Signed-off-by: Samuel Just <samuel.just@dreamhost.com>
This reverts commit c26649861e.
I'm not having any problems linking. I suspect this was some automake
failure and that a 'make clean' is all that's needed to put everything
straight...
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
Change the SYNC flag to MON and send the Mlog synchronously in the do_log
call. This eliminates teh send_log vestigates completely. Either we are
a monitor and queue for ourselves immediately, or log sending is handled
by MonClient.
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
We have a lossless session with the monitor! Only send log entries once.
Otherwise, if the mon is down or something, we end up building up a HUGE
backlog of requests by resending the same messages over and over again.
To do this:
- keep track of which entire we've sent.
- reset when the session resets
- let the MonClient control when log entries are sent, and reset
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
Saw this on sid i386:
msg/SimpleMessenger.cc: In function 'void alloc_aligned_buffer(ceph::bufferlist&
, int, int)':
msg/SimpleMessenger.cc:1782:14: error: '__sysconf' was not declared in this scop
e
msg/SimpleMessenger.cc:1789:23: error: '__sysconf' was not declared in this scop
Some header is clobbering out PAGE_* macros. Make our header more
forceful.
Signed-off-by: Sage Weil <sage@newdream.net>
There was an old change in file_eval() that was allowing us to switch from
SYNC to MIX or EXCL while there were rdlocks, which either caused lots of
lock thrashing or could (I think) hang things up completely. This was
from ea10a672, an ancient fix for something related that appears to have
taken out the rdlocked check by accident.
In my tests (one writer, one stat-er), this took things from long stalls
(up to 20 seconds) to very responsive stats. Yay!
Fixes: #791
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
This is a hack since we currently use same_up_since to denote the beginning of an interval.
We should probably change this usaged or rename it to same_interval since.
Signed-off-by: Josh Durgin <josh.durgin@dreamhost.com>
read_message and write_message both dereference connection-state, so avoid
clearing it when replacing a pipe.
read_message still uses it to find rx_buffers in ways that may interfere
when two Pipes reference the connection, but currently that is only used
for lossy pipes. We could still take pipe_lock in that case, but it is
only an optimization (we copy the data if the buffers don't get used
directly) and probably not worth bothering with.
Signed-off-by: Sage Weil <sage@newdream.net>
Output osd state combined with crush tree placement. Note osds in tree
that do not exist and list osds that exist that are not included in the
tree.
Signed-off-by: Sage Weil <sage@newdream.net>