diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..db3622d0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,188 @@ +cmake_minimum_required(VERSION 2.8) + +project(vitastor) + +include(GNUInstallDirs) + +set(QEMU_PLUGINDIR qemu CACHE STRING "QEMU plugin directory suffix (qemu-kvm on RHEL)") +set(WITH_ASAN false CACHE BOOL "Build with AddressSanitizer") +if("${CMAKE_INSTALL_PREFIX}" MATCHES "^/usr/local/?$") + if(EXISTS "/etc/debian_version") + set(CMAKE_INSTALL_LIBDIR "lib/${CMAKE_LIBRARY_ARCHITECTURE}") + endif() + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") +endif() + +add_definitions(-DVERSION="0.6-dev") +add_definitions(-Wall -Wno-sign-compare -Wno-comment -Wno-parentheses -Wno-pointer-arith) +if (${WITH_ASAN}) + add_definitions(-fsanitize=address -fno-omit-frame-pointer) + add_link_options(-fsanitize=address -fno-omit-frame-pointer) +endif (${WITH_ASAN}) + +set(CMAKE_BUILD_TYPE RelWithDebInfo) +string(REGEX REPLACE "([\\/\\-]O)[12]?" "\\13" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") +string(REGEX REPLACE "([\\/\\-]O)[12]?" "\\13" CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}") +string(REGEX REPLACE "([\\/\\-]O)[12]?" "\\13" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") +string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") +string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}") +string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") +string(REGEX REPLACE "([\\/\\-]O)[12]?" "\\13" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") +string(REGEX REPLACE "([\\/\\-]O)[12]?" "\\13" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}") +string(REGEX REPLACE "([\\/\\-]O)[12]?" "\\13" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") +string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") +string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}") +string(REGEX REPLACE "([\\/\\-]D) *NDEBUG" "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + +find_package(PkgConfig) +pkg_check_modules(LIBURING REQUIRED liburing) +pkg_check_modules(GLIB REQUIRED glib-2.0) + +include_directories( + src + /usr/include/jerasure + ${LIBURING_INCLUDE_DIRS} +) + +# libvitastor_blk.so +add_library(vitastor_blk SHARED + allocator.cpp blockstore.cpp blockstore_impl.cpp blockstore_init.cpp blockstore_open.cpp blockstore_journal.cpp blockstore_read.cpp + blockstore_write.cpp blockstore_sync.cpp blockstore_stable.cpp blockstore_rollback.cpp blockstore_flush.cpp crc32c.c ringloop.cpp +) +target_link_libraries(vitastor_blk + ${LIBURING_LIBRARIES} + tcmalloc_minimal +) + +# libfio_vitastor_blk.so +add_library(fio_vitastor_blk SHARED + fio_engine.cpp + json11/json11.cpp +) +target_link_libraries(fio_vitastor_blk + vitastor_blk +) + +# vitastor-osd +add_executable(vitastor-osd + osd_main.cpp osd.cpp osd_secondary.cpp msgr_receive.cpp msgr_send.cpp osd_peering.cpp osd_flush.cpp osd_peering_pg.cpp + osd_primary.cpp osd_primary_subops.cpp etcd_state_client.cpp messenger.cpp osd_cluster.cpp http_client.cpp osd_ops.cpp pg_states.cpp + osd_rmw.cpp base64.cpp timerfd_manager.cpp epoll_manager.cpp json11/json11.cpp +) +target_link_libraries(vitastor-osd + vitastor_blk + Jerasure +) + +# libfio_vitastor_sec.so +add_library(fio_vitastor_sec SHARED + fio_sec_osd.cpp + rw_blocking.cpp +) +target_link_libraries(fio_vitastor_sec + tcmalloc_minimal +) + +# libvitastor_client.so +add_library(vitastor_client SHARED + cluster_client.cpp epoll_manager.cpp etcd_state_client.cpp + messenger.cpp msgr_send.cpp msgr_receive.cpp ringloop.cpp json11/json11.cpp + http_client.cpp osd_ops.cpp pg_states.cpp timerfd_manager.cpp base64.cpp +) +target_link_libraries(vitastor_client + tcmalloc_minimal + ${LIBURING_LIBRARIES} +) + +# libfio_vitastor.so +add_library(fio_vitastor SHARED + fio_cluster.cpp +) +target_link_libraries(fio_vitastor + vitastor_client +) + +# vitastor-nbd +add_executable(vitastor-nbd + nbd_proxy.cpp +) +target_link_libraries(vitastor-nbd + vitastor_client +) + +# vitastor-rm +add_executable(vitastor-rm + rm_inode.cpp +) +target_link_libraries(vitastor-rm + vitastor_client +) + +# vitastor-dump-journal +add_executable(vitastor-dump-journal + dump_journal.cpp crc32c.c +) + +# qemu_driver.so +add_library(qemu_proxy STATIC qemu_proxy.cpp) +target_compile_options(qemu_proxy PUBLIC -fPIC) +target_include_directories(qemu_proxy PUBLIC + qemu/b/qemu + qemu/include + ${GLIB_INCLUDE_DIRS} +) +target_link_libraries(qemu_proxy + vitastor_client +) +add_library(qemu_vitastor SHARED + qemu_driver.c +) +target_link_libraries(qemu_vitastor + qemu_proxy +) +set_target_properties(qemu_vitastor PROPERTIES + PREFIX "" + OUTPUT_NAME "block-vitastor" +) + +### Test stubs + +# stub_osd, stub_bench, osd_test +add_executable(stub_osd stub_osd.cpp rw_blocking.cpp) +target_link_libraries(stub_osd tcmalloc_minimal) +add_executable(stub_bench stub_bench.cpp rw_blocking.cpp) +target_link_libraries(stub_bench tcmalloc_minimal) +add_executable(osd_test osd_test.cpp rw_blocking.cpp) +target_link_libraries(osd_test tcmalloc_minimal) + +# osd_rmw_test +add_executable(osd_rmw_test osd_rmw_test.cpp allocator.cpp) +target_link_libraries(osd_rmw_test Jerasure tcmalloc_minimal) + +# stub_uring_osd +add_executable(stub_uring_osd + stub_uring_osd.cpp epoll_manager.cpp messenger.cpp msgr_send.cpp msgr_receive.cpp ringloop.cpp timerfd_manager.cpp json11/json11.cpp +) +target_link_libraries(stub_uring_osd + ${LIBURING_LIBRARIES} + tcmalloc_minimal +) + +# osd_peering_pg_test +add_executable(osd_peering_pg_test osd_peering_pg_test.cpp osd_peering_pg.cpp) +target_link_libraries(osd_peering_pg_test tcmalloc_minimal) + +# test_allocator +add_executable(test_allocator test_allocator.cpp allocator.cpp) + +## test_blockstore, test_shit +#add_executable(test_blockstore test_blockstore.cpp timerfd_interval.cpp) +#target_link_libraries(test_blockstore blockstore) +#add_executable(test_shit test_shit.cpp osd_peering_pg.cpp) +#target_link_libraries(test_shit ${LIBURING_LIBRARIES} m) + +### Install + +install(TARGETS vitastor-osd vitastor-dump-journal vitastor-nbd vitastor-rm RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) +install(TARGETS fio_vitastor fio_vitastor_blk fio_vitastor_sec vitastor_blk vitastor_client LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) +install(TARGETS qemu_vitastor LIBRARY DESTINATION /usr/${CMAKE_INSTALL_LIBDIR}/${QEMU_PLUGINDIR}) diff --git a/Make-gen.pl b/Make-gen.pl deleted file mode 100755 index 622e08c4..00000000 --- a/Make-gen.pl +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/perl -# FIXME: Use CMake :) - -use strict; - -my $deps = {}; -for my $line (split /\n/, `grep '^#include "' *.cpp *.h`) -{ - if ($line =~ /^([^:]+):\#include "([^"]+)"/s) - { - $deps->{$1}->{$2} = 1; - } -} - -my $added; -do -{ - $added = 0; - for my $file (keys %$deps) - { - for my $dep (keys %{$deps->{$file}}) - { - if ($deps->{$dep}) - { - for my $subdep (keys %{$deps->{$dep}}) - { - if (!$deps->{$file}->{$subdep}) - { - $added = 1; - $deps->{$file}->{$subdep} = 1; - } - } - } - } - } -} while ($added); - -for my $file (sort keys %$deps) -{ - if ($file =~ /\.cpp$/) - { - my $obj = $file; - $obj =~ s/\.cpp$/.o/s; - print "$obj: $file ".join(" ", sort keys %{$deps->{$file}})."\n"; - print "\tg++ \$(CXXFLAGS) -c -o \$\@ \$\<\n"; - } -} diff --git a/Makefile b/Makefile deleted file mode 100644 index 99e11ea9..00000000 --- a/Makefile +++ /dev/null @@ -1,198 +0,0 @@ -BINDIR ?= /usr/bin -LIBDIR ?= /usr/lib/x86_64-linux-gnu -QEMU_PLUGINDIR ?= /usr/lib/x86_64-linux-gnu/qemu - -# -fsanitize=address -fno-omit-frame-pointer -CXXFLAGS := -g -O3 -Wall -Wno-sign-compare -Wno-comment -Wno-parentheses -Wno-pointer-arith -fPIC -fdiagnostics-color=always -I/usr/include/jerasure -ifeq "${ASAN}" "1" - CXXFLAGS := -fsanitize=address -fno-omit-frame-pointer ${CXXFLAGS} -endif -all: libfio_blockstore.so osd libfio_sec_osd.so libfio_cluster.so stub_osd stub_uring_osd stub_bench osd_test dump_journal qemu_driver.so nbd_proxy rm_inode -clean: - rm -f *.o libblockstore.so libfio_blockstore.so osd libfio_sec_osd.so libfio_cluster.so stub_osd stub_uring_osd stub_bench osd_test dump_journal qemu_driver.so nbd_proxy rm_inode - -install: all - mkdir -p $(DESTDIR)$(LIBDIR)/vitastor - install -m 0755 libfio_sec_osd.so $(DESTDIR)$(LIBDIR)/vitastor/ - install -m 0755 libfio_cluster.so $(DESTDIR)$(LIBDIR)/vitastor/ - install -m 0755 libfio_blockstore.so $(DESTDIR)$(LIBDIR)/vitastor/ - install -m 0755 libblockstore.so $(DESTDIR)$(LIBDIR)/vitastor/ - mkdir -p $(DESTDIR)$(BINDIR) - install -m 0755 osd $(DESTDIR)$(BINDIR)/vitastor-osd - install -m 0755 dump_journal $(DESTDIR)$(BINDIR)/vitastor-dump-journal - install -m 0755 nbd_proxy $(DESTDIR)$(BINDIR)/vitastor-nbd - install -m 0755 rm_inode $(DESTDIR)$(BINDIR)/vitastor-rm - mkdir -p $(DESTDIR)$(QEMU_PLUGINDIR) - install -m 0755 qemu_driver.so $(DESTDIR)$(QEMU_PLUGINDIR)/block-vitastor.so - -dump_journal: dump_journal.o crc32c.o - g++ $(CXXFLAGS) -o $@ $^ - -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_rollback.o blockstore_flush.o crc32c.o ringloop.o -libblockstore.so: $(BLOCKSTORE_OBJS) - g++ $(CXXFLAGS) -o $@ -shared $^ -ltcmalloc_minimal -luring -libfio_blockstore.so: libblockstore.so fio_engine.o json11.o - g++ $(CXXFLAGS) -Wl,-rpath,'$(LIBDIR)/vitastor',-rpath,'$$ORIGIN' -shared -o $@ $^ -ltcmalloc_minimal -luring - -OSD_OBJS := osd_main.o osd.o osd_secondary.o msgr_receive.o msgr_send.o osd_peering.o osd_flush.o osd_peering_pg.o \ - osd_primary.o osd_primary_subops.o etcd_state_client.o messenger.o osd_cluster.o http_client.o osd_ops.o pg_states.o \ - osd_rmw.o json11.o base64.o timerfd_manager.o epoll_manager.o -osd: $(OSD_OBJS) libblockstore.so - g++ $(CXXFLAGS) -Wl,-rpath,'$(LIBDIR)/vitastor',-rpath,'$$ORIGIN' -o $@ $^ -ltcmalloc_minimal -luring -lJerasure - -stub_osd: stub_osd.o rw_blocking.o - g++ $(CXXFLAGS) -o $@ $^ -ltcmalloc_minimal - -osd_rmw_test: osd_rmw_test.o allocator.o - g++ $(CXXFLAGS) -o $@ $^ -lJerasure -fsanitize=address - -STUB_URING_OSD_OBJS := stub_uring_osd.o epoll_manager.o messenger.o msgr_send.o msgr_receive.o ringloop.o timerfd_manager.o json11.o -stub_uring_osd: $(STUB_URING_OSD_OBJS) - g++ $(CXXFLAGS) -o $@ -ltcmalloc_minimal $^ -luring -stub_bench: stub_bench.o rw_blocking.o - g++ $(CXXFLAGS) -o $@ $^ -ltcmalloc_minimal -osd_test: osd_test.o rw_blocking.o - g++ $(CXXFLAGS) -o $@ $^ -ltcmalloc_minimal -osd_peering_pg_test: osd_peering_pg_test.o osd_peering_pg.o - g++ $(CXXFLAGS) -o $@ $^ -ltcmalloc_minimal - -libfio_sec_osd.so: fio_sec_osd.o rw_blocking.o - g++ $(CXXFLAGS) -ltcmalloc_minimal -shared -o $@ $^ - -FIO_CLUSTER_OBJS := cluster_client.o epoll_manager.o etcd_state_client.o \ - messenger.o msgr_send.o msgr_receive.o ringloop.o json11.o http_client.o osd_ops.o pg_states.o timerfd_manager.o base64.o -libfio_cluster.so: fio_cluster.o $(FIO_CLUSTER_OBJS) - g++ $(CXXFLAGS) -ltcmalloc_minimal -shared -o $@ $^ -luring - -nbd_proxy: nbd_proxy.o $(FIO_CLUSTER_OBJS) - g++ $(CXXFLAGS) -ltcmalloc_minimal -o $@ $^ -luring - -rm_inode: rm_inode.o $(FIO_CLUSTER_OBJS) - g++ $(CXXFLAGS) -ltcmalloc_minimal -o $@ $^ -luring - -qemu_driver.o: qemu_driver.c qemu_proxy.h - gcc -I qemu/b/qemu `pkg-config glib-2.0 --cflags` \ - -I qemu/include $(CXXFLAGS) -c -o $@ $< - -qemu_driver.so: qemu_driver.o qemu_proxy.o $(FIO_CLUSTER_OBJS) - g++ $(CXXFLAGS) -ltcmalloc_minimal -shared -o $@ $^ -luring - -test_blockstore: test_blockstore.o timerfd_interval.o ./libblockstore.so - g++ $(CXXFLAGS) -Wl,-rpath,'$(LIBDIR)/vitastor',-rpath,'$$ORIGIN' -o test_blockstore $^ -ltcmalloc_minimal -luring -test_shit: test_shit.o osd_peering_pg.o - g++ $(CXXFLAGS) -o test_shit $^ -luring -lm -test_allocator: test_allocator.o allocator.o - g++ $(CXXFLAGS) -o test_allocator $^ - -crc32c.o: crc32c.c crc32c.h - g++ $(CXXFLAGS) -c -o $@ $< -json11.o: json11/json11.cpp - g++ $(CXXFLAGS) -c -o json11.o $< - -# Autogenerated - -allocator.o: allocator.cpp allocator.h - g++ $(CXXFLAGS) -c -o $@ $< -base64.o: base64.cpp base64.h - g++ $(CXXFLAGS) -c -o $@ $< -blockstore.o: blockstore.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -blockstore_flush.o: blockstore_flush.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -blockstore_impl.o: blockstore_impl.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -blockstore_init.o: blockstore_init.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -blockstore_journal.o: blockstore_journal.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -blockstore_open.o: blockstore_open.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -blockstore_read.o: blockstore_read.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -blockstore_rollback.o: blockstore_rollback.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -blockstore_stable.o: blockstore_stable.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -blockstore_sync.o: blockstore_sync.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -blockstore_write.o: blockstore_write.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -cluster_client.o: cluster_client.cpp cluster_client.h etcd_state_client.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd_id.h osd_ops.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -dump_journal.o: dump_journal.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -epoll_manager.o: epoll_manager.cpp epoll_manager.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -etcd_state_client.o: etcd_state_client.cpp base64.h etcd_state_client.h http_client.h json11/json11.hpp object_id.h osd_id.h osd_ops.h pg_states.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -fio_cluster.o: fio_cluster.cpp cluster_client.h epoll_manager.h etcd_state_client.h fio/arch/arch.h fio/fio.h fio/optgroup.h fio_headers.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd_id.h osd_ops.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -fio_engine.o: fio_engine.cpp blockstore.h fio/arch/arch.h fio/fio.h fio/optgroup.h fio_headers.h json11/json11.hpp object_id.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -fio_sec_osd.o: fio_sec_osd.cpp fio/arch/arch.h fio/fio.h fio/optgroup.h fio_headers.h object_id.h osd_id.h osd_ops.h rw_blocking.h - g++ $(CXXFLAGS) -c -o $@ $< -http_client.o: http_client.cpp http_client.h json11/json11.hpp timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -messenger.o: messenger.cpp json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd_id.h osd_ops.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -msgr_receive.o: msgr_receive.cpp json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd_id.h osd_ops.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -msgr_send.o: msgr_send.cpp json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd_id.h osd_ops.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -nbd_proxy.o: nbd_proxy.cpp cluster_client.h epoll_manager.h etcd_state_client.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd_id.h osd_ops.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -osd.o: osd.cpp blockstore.h cpp-btree/btree_map.h epoll_manager.h etcd_state_client.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd.h osd_id.h osd_ops.h osd_peering_pg.h pg_states.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_cluster.o: osd_cluster.cpp base64.h blockstore.h cpp-btree/btree_map.h epoll_manager.h etcd_state_client.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd.h osd_id.h osd_ops.h osd_peering_pg.h pg_states.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_flush.o: osd_flush.cpp blockstore.h cpp-btree/btree_map.h epoll_manager.h etcd_state_client.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd.h osd_id.h osd_ops.h osd_peering_pg.h pg_states.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_main.o: osd_main.cpp blockstore.h cpp-btree/btree_map.h epoll_manager.h etcd_state_client.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd.h osd_id.h osd_ops.h osd_peering_pg.h pg_states.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_ops.o: osd_ops.cpp object_id.h osd_id.h osd_ops.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_peering.o: osd_peering.cpp base64.h blockstore.h cpp-btree/btree_map.h epoll_manager.h etcd_state_client.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd.h osd_id.h osd_ops.h osd_peering_pg.h pg_states.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_peering_pg.o: osd_peering_pg.cpp cpp-btree/btree_map.h object_id.h osd_id.h osd_ops.h osd_peering_pg.h pg_states.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_peering_pg_test.o: osd_peering_pg_test.cpp cpp-btree/btree_map.h object_id.h osd_id.h osd_ops.h osd_peering_pg.h pg_states.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_primary.o: osd_primary.cpp blockstore.h cpp-btree/btree_map.h epoll_manager.h etcd_state_client.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd.h osd_id.h osd_ops.h osd_peering_pg.h osd_primary.h osd_rmw.h pg_states.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_primary_subops.o: osd_primary_subops.cpp blockstore.h cpp-btree/btree_map.h epoll_manager.h etcd_state_client.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd.h osd_id.h osd_ops.h osd_peering_pg.h osd_primary.h osd_rmw.h pg_states.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_rmw.o: osd_rmw.cpp malloc_or_die.h object_id.h osd_id.h osd_rmw.h xor.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_rmw_test.o: osd_rmw_test.cpp malloc_or_die.h object_id.h osd_id.h osd_rmw.cpp osd_rmw.h test_pattern.h xor.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_secondary.o: osd_secondary.cpp blockstore.h cpp-btree/btree_map.h epoll_manager.h etcd_state_client.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd.h osd_id.h osd_ops.h osd_peering_pg.h pg_states.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -osd_test.o: osd_test.cpp object_id.h osd_id.h osd_ops.h rw_blocking.h test_pattern.h - g++ $(CXXFLAGS) -c -o $@ $< -pg_states.o: pg_states.cpp pg_states.h - g++ $(CXXFLAGS) -c -o $@ $< -qemu_proxy.o: qemu_proxy.cpp cluster_client.h etcd_state_client.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd_id.h osd_ops.h qemu_proxy.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -ringloop.o: ringloop.cpp ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -rm_inode.o: rm_inode.cpp cluster_client.h etcd_state_client.h http_client.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd_id.h osd_ops.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -rw_blocking.o: rw_blocking.cpp rw_blocking.h - g++ $(CXXFLAGS) -c -o $@ $< -stub_bench.o: stub_bench.cpp object_id.h osd_id.h osd_ops.h rw_blocking.h - g++ $(CXXFLAGS) -c -o $@ $< -stub_osd.o: stub_osd.cpp object_id.h osd_id.h osd_ops.h rw_blocking.h - g++ $(CXXFLAGS) -c -o $@ $< -stub_uring_osd.o: stub_uring_osd.cpp epoll_manager.h json11/json11.hpp malloc_or_die.h messenger.h object_id.h osd_id.h osd_ops.h ringloop.h timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< -test_allocator.o: test_allocator.cpp allocator.h - g++ $(CXXFLAGS) -c -o $@ $< -test_blockstore.o: test_blockstore.cpp blockstore.h object_id.h ringloop.h timerfd_interval.h - g++ $(CXXFLAGS) -c -o $@ $< -test_shit.o: test_shit.cpp allocator.h blockstore.h blockstore_flush.h blockstore_impl.h blockstore_init.h blockstore_journal.h cpp-btree/btree_map.h crc32c.h malloc_or_die.h object_id.h osd_id.h osd_ops.h osd_peering_pg.h pg_states.h ringloop.h - g++ $(CXXFLAGS) -c -o $@ $< -timerfd_interval.o: timerfd_interval.cpp ringloop.h timerfd_interval.h - g++ $(CXXFLAGS) -c -o $@ $< -timerfd_manager.o: timerfd_manager.cpp timerfd_manager.h - g++ $(CXXFLAGS) -c -o $@ $< diff --git a/crc32c.h b/crc32c.h index f8f729d6..d8901a98 100644 --- a/crc32c.h +++ b/crc32c.h @@ -8,4 +8,10 @@ // unsigned __int64 _mm_crc32_u64 (unsigned __int64 crc, unsigned __int64 v) // unsigned int _mm_crc32_u8 (unsigned int crc, unsigned char v) +#ifdef __cplusplus +extern "C" { +#endif uint32_t crc32c(uint32_t crc, const void *buf, size_t len); +#ifdef __cplusplus +}; +#endif diff --git a/osd_peering_pg_test.cpp b/osd_peering_pg_test.cpp index a89884fa..07fc6c06 100644 --- a/osd_peering_pg_test.cpp +++ b/osd_peering_pg_test.cpp @@ -3,6 +3,7 @@ #define _LARGEFILE64_SOURCE +#include "malloc_or_die.h" #include "osd_peering_pg.h" #define STRIPE_SHIFT 12 diff --git a/tests/test_write.sh b/tests/test_write.sh index c04fb976..53112dba 100755 --- a/tests/test_write.sh +++ b/tests/test_write.sh @@ -6,11 +6,11 @@ dd if=/dev/zero of=./testdata/test_osd1.bin bs=1024 count=1 seek=$((1024*1024-1) dd if=/dev/zero of=./testdata/test_osd2.bin bs=1024 count=1 seek=$((1024*1024-1)) dd if=/dev/zero of=./testdata/test_osd3.bin bs=1024 count=1 seek=$((1024*1024-1)) -./osd --osd_num 1 --bind_address 127.0.0.1 --etcd_address $ETCD_URL $(node mon/simple-offsets.js --format options --device ./testdata/test_osd1.bin 2>/dev/null) &>./testdata/osd1.log & +build/vitastor-osd --osd_num 1 --bind_address 127.0.0.1 --etcd_address $ETCD_URL $(node mon/simple-offsets.js --format options --device ./testdata/test_osd1.bin 2>/dev/null) &>./testdata/osd1.log & OSD1_PID=$! -./osd --osd_num 2 --bind_address 127.0.0.1 --etcd_address $ETCD_URL $(node mon/simple-offsets.js --format options --device ./testdata/test_osd2.bin 2>/dev/null) &>./testdata/osd2.log & +build/vitastor-osd --osd_num 2 --bind_address 127.0.0.1 --etcd_address $ETCD_URL $(node mon/simple-offsets.js --format options --device ./testdata/test_osd2.bin 2>/dev/null) &>./testdata/osd2.log & OSD2_PID=$! -./osd --osd_num 3 --bind_address 127.0.0.1 --etcd_address $ETCD_URL $(node mon/simple-offsets.js --format options --device ./testdata/test_osd3.bin 2>/dev/null) &>./testdata/osd3.log & +build/vitastor-osd --osd_num 3 --bind_address 127.0.0.1 --etcd_address $ETCD_URL $(node mon/simple-offsets.js --format options --device ./testdata/test_osd3.bin 2>/dev/null) &>./testdata/osd3.log & OSD3_PID=$! cd mon @@ -38,9 +38,9 @@ echo leak:librbd >> testdata/lsan-suppress.txt echo leak:_M_mutate >> testdata/lsan-suppress.txt echo leak:_M_assign >> testdata/lsan-suppress.txt #LSAN_OPTIONS=suppressions=`pwd`/testdata/lsan-suppress.txt LD_PRELOAD=libasan.so.5 \ -# fio -thread -name=test -ioengine=./libfio_sec_osd.so -bs=4k -fsync=128 `$ETCDCTL get /vitastor/osd/state/1 --print-value-only | jq -r '"-host="+.addresses[0]+" -port="+(.port|tostring)'` -rw=write -size=32M +# fio -thread -name=test -ioengine=build/libfio_vitastor_sec.so -bs=4k -fsync=128 `$ETCDCTL get /vitastor/osd/state/1 --print-value-only | jq -r '"-host="+.addresses[0]+" -port="+(.port|tostring)'` -rw=write -size=32M LSAN_OPTIONS=suppressions=`pwd`/testdata/lsan-suppress.txt LD_PRELOAD=libasan.so.5 \ - fio -thread -name=test -ioengine=./libfio_cluster.so -bs=4M -direct=1 -iodepth=1 -fsync=1 -rw=write -etcd=$ETCD_URL -pool=1 -inode=1 -size=1G -cluster_log_level=10 + fio -thread -name=test -ioengine=build/libfio_vitastor.so -bs=4M -direct=1 -iodepth=1 -fsync=1 -rw=write -etcd=$ETCD_URL -pool=1 -inode=1 -size=1G -cluster_log_level=10 format_green OK