diff --git a/Makefile b/Makefile index 562cb120..4a705dfa 100644 --- a/Makefile +++ b/Makefile @@ -1,30 +1,46 @@ BLOCKSTORE_OBJS := allocator.o blockstore.o blockstore_impl.o blockstore_init.o blockstore_open.o blockstore_journal.o blockstore_read.o \ blockstore_write.o blockstore_sync.o blockstore_stable.o blockstore_flush.o crc32c.o ringloop.o timerfd_interval.o CXXFLAGS := -g -O3 -Wall -Wno-sign-compare -Wno-comment -Wno-parentheses -Wno-pointer-arith -fPIC -fdiagnostics-color=always -all: $(BLOCKSTORE_OBJS) test test_blockstore libfio_blockstore.so osd libfio_sec_osd.so +all: $(BLOCKSTORE_OBJS) libfio_blockstore.so osd libfio_sec_osd.so test_blockstore clean: rm -f *.o + crc32c.o: crc32c.c g++ $(CXXFLAGS) -c -o $@ $< json11.o: json11/json11.cpp g++ $(CXXFLAGS) -c -o json11.o json11/json11.cpp +allocator.o: allocator.cpp allocator.h + g++ $(CXXFLAGS) -c -o $@ $< +ringloop.o: ringloop.cpp ringloop.h + g++ $(CXXFLAGS) -c -o $@ $< +timerfd_interval.o: timerfd_interval.cpp timerfd_interval.h + g++ $(CXXFLAGS) -c -o $@ $< + %.o: %.cpp allocator.h blockstore_flush.h blockstore.h blockstore_impl.h blockstore_init.h blockstore_journal.h crc32c.h ringloop.h xor.h timerfd_interval.h object_id.h g++ $(CXXFLAGS) -c -o $@ $< + +libblockstore.so: $(BLOCKSTORE_OBJS) + g++ $(CXXFLAGS) -o libblockstore.so -shared $(BLOCKSTORE_OBJS) -ltcmalloc_minimal -luring +libfio_blockstore.so: ./libblockstore.so fio_engine.cpp + g++ $(CXXFLAGS) -shared -o libfio_blockstore.so fio_engine.cpp ./libblockstore.so -ltcmalloc_minimal -luring + osd_exec_secondary.o: osd_exec_secondary.cpp osd.h osd_ops.h g++ $(CXXFLAGS) -c -o $@ $< osd_read.o: osd_read.cpp osd.h osd_ops.h g++ $(CXXFLAGS) -c -o $@ $< osd_send.o: osd_send.cpp osd.h osd_ops.h g++ $(CXXFLAGS) -c -o $@ $< -osd: $(BLOCKSTORE_OBJS) osd_main.cpp osd.h osd_ops.h osd.o osd_exec_secondary.o osd_read.o osd_send.o json11.o - g++ $(CXXFLAGS) -ltcmalloc_minimal -o osd osd_main.cpp osd.o osd_exec_secondary.o osd_read.o osd_send.o json11.o $(BLOCKSTORE_OBJS) -luring -test: test.cpp - g++ $(CXXFLAGS) -o test test.cpp -luring -test_blockstore: $(BLOCKSTORE_OBJS) test_blockstore.cpp - g++ $(CXXFLAGS) -o test_blockstore -ltcmalloc_minimal test_blockstore.cpp $(BLOCKSTORE_OBJS) -luring -test_allocator: test_allocator.cpp allocator.o - g++ $(CXXFLAGS) -o test_allocator test_allocator.cpp allocator.o -libfio_blockstore.so: fio_engine.cpp $(BLOCKSTORE_OBJS) - g++ $(CXXFLAGS) -ltcmalloc_minimal -shared -o libfio_blockstore.so fio_engine.cpp $(BLOCKSTORE_OBJS) -luring +osd.o: osd.cpp osd.h osd_ops.h + g++ $(CXXFLAGS) -c -o $@ $< +osd: ./libblockstore.so osd_main.cpp osd.h osd_ops.h osd.o osd_exec_secondary.o osd_read.o osd_send.o json11.o + g++ $(CXXFLAGS) -o osd osd_main.cpp osd.o osd_exec_secondary.o osd_read.o osd_send.o json11.o ./libblockstore.so -ltcmalloc_minimal -luring + libfio_sec_osd.so: fio_sec_osd.cpp osd_ops.h g++ $(CXXFLAGS) -ltcmalloc_minimal -shared -o libfio_sec_osd.so fio_sec_osd.cpp -luring + +test_blockstore: ./libblockstore.so test_blockstore.cpp + g++ $(CXXFLAGS) -o test_blockstore test_blockstore.cpp ./libblockstore.so -ltcmalloc_minimal -luring +test: test.cpp + g++ $(CXXFLAGS) -o test test.cpp -luring +test_allocator: test_allocator.cpp allocator.o + g++ $(CXXFLAGS) -o test_allocator test_allocator.cpp allocator.o diff --git a/test_blockstore.cpp b/test_blockstore.cpp index 7ce29741..1f3bce4a 100644 --- a/test_blockstore.cpp +++ b/test_blockstore.cpp @@ -28,6 +28,10 @@ int main(int narg, char *args[]) main_state = 4; else if (main_state == 5) main_state = 6; + else if (main_state == 7) + main_state = 8; + else if (main_state == 9) + main_state = 10; }; main_cons.loop = [&]() { @@ -39,9 +43,9 @@ int main(int narg, char *args[]) op.opcode = BS_OP_WRITE; op.oid = { .inode = 1, .stripe = 0 }; op.version = 0; - op.offset = 4096; + op.offset = 16384; op.len = 4096; - op.buf = (uint8_t*)memalign(512, 4096); + op.buf = (uint8_t*)memalign(512, 128*1024); memset(op.buf, 0xaa, 4096); bs->enqueue_op(&op); main_state = 1; @@ -67,6 +71,48 @@ int main(int narg, char *args[]) bs->enqueue_op(&op); main_state = 5; } + else if (main_state == 6) + { + printf("stabilizing version %lu\n", version); + op.opcode = BS_OP_STABLE; + op.len = 1; + *((obj_ver_id*)op.buf) = { + .oid = { .inode = 1, .stripe = 0 }, + .version = version, + }; + bs->enqueue_op(&op); + main_state = 7; + } + else if (main_state == 8) + { + printf("reading 0-128K\n"); + op.opcode = BS_OP_READ; + op.oid = { .inode = 1, .stripe = 0 }; + op.version = UINT64_MAX; + op.offset = 0; + op.len = 128*1024; + bs->enqueue_op(&op); + main_state = 9; + } + else if (main_state == 10) + { + void *cmp = memalign(512, 128*1024); + memset(cmp, 0, 128*1024); + memset(cmp+16384, 0xaa, 4096); + int ok = 1; + for (int i = 0; i < 128*1024; i += 4096) + { + if (memcmp(cmp+i, op.buf+i, 4096) != 0) + { + printf("bitmap works incorrectly, bytes %d - %d differ (%02x, should be %02x)\n", i, i+4096, ((uint8_t*)op.buf)[i], ((uint8_t*)cmp)[i]); + ok = 0; + } + } + if (ok) + printf("bitmap works correctly\n"); + free(cmp); + main_state = 11; + } }; ringloop->register_consumer(main_cons);