Add header cache to DBObjectMap

OMap is used by PG to store PGLog, so it's called by each write operations.
Because leveldb don't play well in random read and "header_lock" limit the
concurrence. Add a LRU cache to avoid too much overload on seeking header.

Signed-off-by: Haomai Wang <haomaiwang@gmail.com>
common: WRITE_{EQ,CMP}_OPERATORS_1

For when a struct is defined to encapsulate a single value and get
control over implicit conversions that would otherwise be impossible
with typedef.

Signed-off-by: Loic Dachary <loic@dachary.org>
osd: factorize shard_id_t/shard_t into a struct

The struct contains a single uint8_t and is preferred to control
conversions that would otherwise be implicit. There is no difference
between shard_id_t and shard_t. The definition is moved in
include/types.h so it is available to both hobject.h and osd_types.h

http://tracker.ceph.com/issues/8254 Fixes: #8254

Signed-off-by: Loic Dachary <loic@dachary.org>
osd: loop over uint8_t instead of shard_id_t

When looping in the range [0,number of shards[ using a uint8_t variable
which is an integer instead of shard_id_t. The alternative would be
define the ++ operator on shard_id_t but since the two are used
interchangeably in a number of places, that seems unnecessary.

Signed-off-by: Loic Dachary <loic@dachary.org>
osd: explicit shard_id_t() and NO_SHARD

Whenever an integer needs to be converted in a shard_id_t,
replace the implicit conversion with an explicit call to the
constructor.

Replace all ghobject_t::NO_SHARD and ghobject_t::no_shard() with
shard_id_t::NO_SHARD

Signed-off-by: Loic Dachary <loic@dachary.org>
osd: replace shard_t usage with shard_id_t

Signed-off-by: Loic Dachary <loic@dachary.org>
Merge pull request #1889 from sahid/master

trim dead code and add tests in bloom_filters

Reviewed-by: Loic Dachary <loic@dachary.org>
automake: add dummy.cc to fix 'make tags'

Commit 421e6c561704 ("test_librbd_fsx: add krbd mode support") added
a requirement for ceph_test_librbd_fsx to be linked with a C++ linker.
Implement it in a way that doesn't break 'make tags'.

Fixes: #8530
Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
Remove unused variables in MemStore.cc

Removes two unused variables expected_object_size and
expected_write_size in MemStore.cc

Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@cloudwatt.com>
Remove unused variables in KeyValueStore.cc

Removes two unused variables expected_object_size and
expected_write_size in KeyValueStore.cc

Signed-off-by: Sahid Orentino Ferdjaoui <sahid.ferdjaoui@cloudwatt.com>
Merge pull request #1914 from ceph/wip-autotools-dummy

automake: add dummy.cc to fix 'make tags'

Reviewed-by: Dan Mick <dan.mick@inktank.com>
daemon_config.cc: add some more asserts

Add assert checks for some more set_val() calls to fix cppcheck issue
"Variable 'ret' is reassigned a value before the old one has been used"

Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
Merge pull request #1916 from sahid/unused

Remove unused variables on MemStore.cc and KeyValueStore.cc

Reviewed-by: Loic Dachary <loic@dachary.org>
common/addr_parsing.c: fix realloc memory leak

Fix handling of realloc. If realloc() fails it returns NULL, assigning
the return value of realloc() directly to the pointer without checking
for the result will lead to a memory leak in error case.

Use a temporary pointer to hold the result of realloc(). In error case
print error and exit, otherwise assign it to the pointer we want to realloc.

Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
libs3: update to latest git master of ceph/libs3

Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
test/librbd/fsx.c: fix gcc warning

Initialize pointer with NULL before call posix_memalign() to fix
gcc warning:

test/librbd/fsx.c:1402:13: warning: ‘temp_buf’ may be used
 uninitialized in this function [-Wmaybe-uninitialized]
  if ((ret = ops->read(&cur_ctx, 0, file_info.st_size, temp_buf)) < 0) {
             ^
test/librbd/fsx.c:1398:13: warning: ‘good_buf’ may be used
 uninitialized in this function [-Wmaybe-uninitialized]
  if ((ret = pread(fd, good_buf, file_info.st_size, 0)) < 0) {

Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
librbd/internal.cc: check earlier for null pointer

Fix potential null ponter deref, move check for 'order != NULL'
to the beginning of the function to prevent a) deref in ldout() call
and b) to leave function as early as possible if check fails.

[src/librbd/internal.cc:843] -> [src/librbd/internal.cc:865]: (warning)
 Possible null pointer dereference: order - otherwise it is redundant
 to check it against null.

Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
os/KeyValueStore.cc: fix possible null pointer deref warning

Add assert check for header->header and remove redundant 'if'
check for header again later.

Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
Revert "Remove unused variables in KeyValueStore.cc"

This reverts commit 23b657c704865b33aa2e0e39995712c1f583c24d.

The get_* methods have side-effects!
Revert "Remove unused variables in MemStore.cc"

This reverts commit 307ba481a2705338560ecb557741d459706bdeb6.

The get_* methods have side effects!

Signed-off-by: Sage Weil <sage@inktank.com>