| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
We need to wrap the full decode section or we can abort the process
if there's an issue (which we may want to just skip by).
Signed-off-by: Greg Farnum <greg@inktank.com>
|
|\
| |
| |
| |
| | |
rgw-admin: Adds --metadata-key option to help
Reviwed-by: Yehuda Sadeh <yehuda@inktank.com>
|
|/
|
|
| |
Signed-off-by: Christophe Courtaut <christophe.courtaut@gmail.com>
|
|
|
|
|
|
|
|
| |
We don't want it binding to whatever willy-nilly, and as an OSD even
its "client" traffic should go on the cluster address.
Signed-off-by: Greg Farnum <greg@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
|
| |
Bad copypasta on initial create?
Signed-off-by: Greg Farnum <greg@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
|
|
|
|
|
|
|
|
| |
This makes it possible to converse about op_cancel and cancel_linger_op
without getting too confused.
Signed-off-by: Greg Farnum <greg@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
|
|\
| |
| | |
Reviewed-by: Sage Weil <sage@inktank.com>
|
| |
| |
| |
| | |
Signed-off-by: Greg Farnum <greg@inktank.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Right now these are very basic and aren't as sophisticated as we
want them to end up, but we have a skeleton for where to put the
decision-making logic.
Signed-off-by: Greg Farnum <greg@inktank.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
If we get back a redirect reply, we clean up the Op's external references
and re-send using the target_oloc and target_oid. To facilitate this,
recalc_op_target() now only fills them in and overrides them with pool
cache semantics if they're empty.
Keep in mind that this is a pretty simple redirect formula -- the
Objecter will keep following redirects forever if that's what the OSDs
send back. The client is not providing any synchronization right now.
Signed-off-by: Greg Farnum <greg@inktank.com>
|
| |
| |
| |
| |
| |
| |
| |
| | |
We have a little block to clean them up if we get back EAGAIN, but it's
actually leaking map references; we will also use this for redirects
from the OSDs.
Signed-off-by: Greg Farnum <greg@inktank.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When present, clients must send the request to the location specified
by the redirect (by using the combine_with_locator() function on
request_redirect_t).
A separate mechanism must be used to ensure that clients see and respect
the redirect, as we do not bump up the minimum required version to
decode.
Signed-off-by: Greg Farnum <greg@inktank.com>
|
| |
| |
| |
| |
| |
| |
| | |
For now it's just a copy of base_oid, but soon we will allow it
to be overwritten for OSD-driven redirects.
Signed-off-by: Greg Farnum <greg@inktank.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Analagous to the oloc->base_oloc rename we did in
e2fcad09d94d965867147627b73e99da9454436f, we may specify a different
target name for a redirect. Rename the existing oid to base_oid to
avoid any confusion.
Signed-off-by: Greg Farnum <greg@inktank.com>
|
| |
| |
| |
| |
| |
| |
| | |
We'll use this so that the OSD can tell the Objecter to redirect a
request to a different object somewhere else.
Signed-off-by: Greg Farnum <greg@inktank.com>
|
| |
| |
| |
| | |
Signed-off-by: Greg Farnum <greg@inktank.com>
|
| |
| |
| |
| |
| |
| | |
get_map_epoch() is a non-reference getter -- mark it as const!
Signed-off-by: Greg Farnum <greg@inktank.com>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This reqid is used to fill in a map that is used for giving clients
the correct version on replayed ops, unless the reqid is blank (in
which case it doesn't go into the map). Indirect clones are not ops
that the client wants to observe and the version is incorrect right now,
so don't fill it in.
Note that this should not have actually caused any buggy behavior, because
the map would have simply been overwritten by the real requested event
a short time later (while still protected by locks and things). But it's
very confusing.
Signed-off-by: Greg Farnum <greg@inktank.com>
|
|\ \
| | |
| | |
| | |
| | | |
fix ceph tool (syntax error in command specification prevents anything from working)
Reviewed-by: Sage Weil <sage@inktank.com>
|
|/ /
| |
| |
| |
| |
| | |
Just missing a space between pgp_num and properties specification.
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
|
|\ \
| | |
| | |
| | |
| | | |
autoconf: use $(UNITTEST_CXXFLAGS) in tests
Reviewed-by: Sage Weil <sage@inktank.com>
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
As suggested by Roald van Loon
https://github.com/ceph/ceph/pull/538/files#r6260751
Signed-off-by: Loic Dachary <loic@dachary.org>
|
|\ \ \
| |/ /
|/| |
| | |
| | | |
mon: add key[=value] ... to osd pool create
Reviewed-by: Sage Weil <sage@inktank.com>
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
With the introduction of the erasure code pool, arguments to be
interpreted depending on the pool type must be introduced.
For instance the erasure code pool loads a plugin at run time will
use easure-code-k=10 to split each object in 10.
The arguments are described as
name=properties,type=CephString,n=N,req=false,goodchars=[A-Za-z0-9-_.=]
If key=value it is stored in the new properties data member of pg_pool_t
as properties[key] = value, otherwise the value is the empty string.
The pg_pool_t version is bumped to 10 and the encode/decode methods
modified to take the properties into account. The
generate_test_instances method creates a two entries map, one of which
is the empty string to cover the case when no value is specified.
http://tracker.ceph.com/issues/6113 refs #6113
Signed-off-by: Loic Dachary <loic@dachary.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Return -EEXIST on duplicate ID
BUG FIX: crush_add_bucket() mixes error returns and IDs
Add optional argument to return generated ID
Fixes: #6246
Signed-off-by: David Zafman <david.zafman@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
|
| |
| |
| |
| | |
Signed-off-by: Sage Weil <sage@inktank.com>
|
|\ \
| | |
| | | |
osd: expose bytes used/avail via perf / asok
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
This values are already sent to the monitor. Expose them via the admin
socket too so collectd/diamond/whatever can pick them up.
Signed-off-by: Sage Weil <sage@inktank.com>
|
|\ \ \
| | | |
| | | |
| | | |
| | | | |
autoconf: use $(LIBOSD) $(LIBCOMMON) instead of libosd.a libcommon.la
Reviewed-by: Sage Weil <sage@inktank.com>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
hardcoded library names in unit test dependencies break compilation
Signed-off-by: Loic Dachary <loic@dachary.org>
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
|
|/ / /
| | |
| | |
| | | |
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
|
|\ \ \
| | | |
| | | |
| | | |
| | | | |
erasure plugin mechanism and abstract API
Reviewed-by: Samuel Just <sam.just@inktank.com>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
libec_example.la is a fully functional plugin based on
ErasureCodeExample to test the ErasureCodePlugin abstract
interface. It is dynamically loaded to test the
ErasureCodePluginRegistry implementation.
Although the plugin is built in the test directory, it will be
installed. noinst_LTLIBRARIES won't build the shared library, only the
static version which is not suitable for testing.
http://tracker.ceph.com/issues/5878 refs #5878
Signed-off-by: Loic Dachary <loic@dachary.org>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
A ErasureCodePluginRegistry singleton holds all erasure plugin objects
derived from ErasureCodePlugin and dlopen(2) handles for the lifetime
of the OSD and is cleaned up by the destructor.
The registry has a single entry point ( method factory ) and should
be used as follows:
map<std::string,std::string> parameters;
parameters["directory"] = "/usr/lib/ceph/erasure-code";
ErasureCodeInterfaceRef erasure_code;
ErasureCodePluginRegistry &instance = ErasureCodePluginRegistry::instance();
instance.factory("jerasure", parameters, &erasure_code));
If the plugin requested ( "jerasure" in the example above ) is not
found in the *plugins* data member, the load method is called and will:
* dlopen(parameters["erasure-code-directory"] + "jerasure")
* f = dlsym("__erasure_code_init")
* f("jerasure")
* check that it registered "jerasure"
The plugin is expected to do something like
instance.add(plugin_name, new ErasureCodePluginJerasure());
to register itself.
The factory method is protected with a Mutex to avoid race
conditions when using the same plugin from two threads.
The erasure_codelib_LTLIBRARIES variable is added to the Makefile
and the plugins are expected to add themselves and be installed
in the $(libdir)/erasure-code
http://tracker.ceph.com/issues/5878 refs #5878
Signed-off-by: Loic Dachary <loic@dachary.org>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
When dynamically loaded, a plugin is expected to define
int __erasure_code_init(char *plugin_name);
When called, it is responsible for registering an ErasureCodePlugin
derived object that provides a factory method from which the concrete
implementation of the ErasureCodeInterface object can be generated:
virtual int factory(const map<std::string,std::string> ¶meters,
ErasureCodeInterfaceRef *erasure_code) {
*erasure_code = ErasureCodeInterfaceRef(new ErasureCodeExample(parameters));
return 0;
}
The plugin instance contains the library data member which is used to
store the handle of the shared library. It is opaque to the plugin.
http://tracker.ceph.com/issues/5878 refs #5878
Signed-off-by: Loic Dachary <loic@dachary.org>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
An erasure code implementation designed for tests. Although it is fully
functional and could be used on actual data, it is mainly provided for
testing purposes. It splits data in two, computes an XOR parity and
can sustain the loss of one chunk.
The constructor will usleep(3) for parameters["usleep"] microseconds
so that the caller can create race conditions.
http://tracker.ceph.com/issues/5878 refs #5878
Signed-off-by: Loic Dachary <loic@dachary.org>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
The erasure coded pool relies on this abstract interface to encode and
decode the chunks stored in the OSD. It has been designed to be
generic enough to accomodate the libraries and algorithms that are
most likely to be used. It does not claim to be universal.
http://tracker.ceph.com/issues/5878 refs #5878
Signed-off-by: Loic Dachary <loic@dachary.org>
|
|/ / /
| | |
| | |
| | | |
Signed-off-by: David Zafman <david.zafman@inktank.com>
|
|\ \ \
| | | |
| | | | |
make sure we use a version of sphinx that we can handle
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: Alfredo Deza <alfredo.deza@inktank.com>
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: John Wilkins <john.wilkins@inktank.com>
|