Hi,
I ran into a minor problem when configuring the ObjectStore to use a
file journal that was 10 gigabytes in size (osd_journal_size = 10240).
The osd_journal_size configuration parameter is an integer. This would
normally be fine since the units are in megabytes, but it can overflow
when bit shifted in FileJournal.cc. This causes the journal to fall
back to trying to detect a raw block device journal.
I've attached a small patch that fixes the problem for me, but there is
probably a cleaner way to do it.
thanks,
-Phil
diff -Naupr ceph-0.20.2/src/os/FileJournal.cc ceph-0.20.2-patched/src/os/FileJournal.cc
--- ceph-0.20.2/src/os/FileJournal.cc 2010-05-26 18:52:59.000000000 -0500
+++ ceph-0.20.2-patched/src/os/FileJournal.cc 2010-06-14 08:54:22.416230668 -0500
@@ -58,8 +58,8 @@ int FileJournal::_open(bool forwrite, bo
max_size = st.st_size;
block_size = st.st_blksize;
- if (create && max_size < (g_conf.osd_journal_size << 20)) {
- uint64_t newsize = g_conf.osd_journal_size << 20;
+ if (create && max_size < (((uint64_t)g_conf.osd_journal_size) << 20)) {
+ uint64_t newsize = ((uint64_t)g_conf.osd_journal_size) << 20;
dout(10) << "_open extending to " << newsize << " bytes" << dendl;
r = ::ftruncate(fd, newsize);
if (r == 0)