/
smychkov
/
SStorage
Обзор
Документация
Войти
/
smychkov
/
SStorage
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Makefile
269 строк
10 KB
Андрей
feat: top N keys + scan stream (range/top/all) with pagination
14 июл 2026, 12:56
14 июл 2026, 12:56
56c6264
Код
Авторство
О чём код?
#============================================================================ # SStorage Makefile #============================================================================ # Build system: GNU Make (работает на macOS, Linux, BSD без доп. установок) # Основные цели: sstorage, tests, clean #============================================================================ .PHONY: all clean tests install-deps util_tests memtable_tests wal_tests \ sstable_tests lsm_tests other_tests bench CXX = clang++ CXXFLAGS = -std=c++17 -Wall -Wextra -O2 -Isrc \ -I/opt/homebrew/include \ -DHAVE_SNAPPY LDFLAGS = -L/opt/homebrew/lib -lsnappy -lpthread # HTTP/gRPC-зависимости (только для основного бинарника) SERVER_INCS = -I/opt/homebrew/Cellar/grpc/1.80.0/include \ -I/opt/homebrew/Cellar/protobuf/34.1/include \ -I/opt/homebrew/Cellar/abseil/20260107.1/include SERVER_LIBS = -lmicrohttpd -lprotobuf -lgrpc++ -lgrpc -lgrpc_plugin_support -lgpr \ -labsl_log_internal_message -labsl_log_internal_check_op \ -labsl_log_internal_globals -labsl_strings_internal -labsl_cord \ -labsl_synchronization -labsl_str_format_internal -labsl_base \ -labsl_throw_delegate -labsl_int128 -labsl_raw_logging_internal \ -labsl_strings -labsl_log_severity -labsl_log_entry \ -labsl_log_internal_nullguard #---------------------------------------------------------------------------- # Группы исходников #---------------------------------------------------------------------------- UTIL_SRCS = src/util/varint.cpp src/util/crc32c.cpp src/util/murmur3.cpp \ src/util/compression.cpp src/util/utils.cpp CORE_SRCS = src/core/record.cpp src/core/config.cpp src/core/database.cpp MEMTABLE_SRCS = src/memtable/memtable.cpp WAL_SRCS = src/wal/wal.cpp SSTABLE_SRCS = src/sstable/block.cpp src/sstable/bloom.cpp \ src/sstable/footer.cpp \ src/sstable/sstable_writer.cpp src/sstable/sstable_reader.cpp LSM_SRCS = src/lsm/level.cpp src/lsm/lsm_tree.cpp src/lsm/compaction.cpp CACHE_SRCS = src/cache/block_cache.cpp CLI_SRCS = src/cli/command.cpp SERVER_SRCS = src/server/server.cpp src/server/http_handler.cpp \ src/server/grpc_handler.cpp \ src/server/storage.pb.cc src/server/storage.grpc.pb.cc # Все исходники для бинарника (без main.cpp) LIB_SRCS = $(UTIL_SRCS) $(CORE_SRCS) $(MEMTABLE_SRCS) $(WAL_SRCS) \ $(SSTABLE_SRCS) $(LSM_SRCS) $(CACHE_SRCS) $(CLI_SRCS) BIN_SRCS = src/main.cpp $(LIB_SRCS) $(SERVER_SRCS) #---------------------------------------------------------------------------- # Основные цели #---------------------------------------------------------------------------- all: sstorage build: @mkdir -p build sstorage: build $(BIN_SRCS) $(CXX) $(CXXFLAGS) $(SERVER_INCS) -o build/$@ $(BIN_SRCS) $(LDFLAGS) $(SERVER_LIBS) #---------------------------------------------------------------------------- # Тесты утилит (минимум зависимостей) #---------------------------------------------------------------------------- test_varint: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_varint.cpp src/util/varint.cpp test_crc32c: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_crc32c.cpp src/util/crc32c.cpp test_murmur3: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_murmur3.cpp src/util/murmur3.cpp test_compression: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_compression.cpp src/util/compression.cpp $(LDFLAGS) util_tests: test_varint test_crc32c test_murmur3 test_compression @echo "=== util tests ===" @./build/test_varint @./build/test_crc32c @./build/test_murmur3 @./build/test_compression #---------------------------------------------------------------------------- # Тесты Record / MemTable / WAL #---------------------------------------------------------------------------- test_record: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_record.cpp src/core/record.cpp \ src/util/varint.cpp test_memtable: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_memtable.cpp \ src/memtable/memtable.cpp src/core/record.cpp src/util/varint.cpp test_wal: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_wal.cpp \ src/wal/wal.cpp src/core/record.cpp src/util/varint.cpp src/util/crc32c.cpp \ $(LDFLAGS) test_wal_crash: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_wal_crash.cpp \ src/wal/wal.cpp src/core/record.cpp src/util/varint.cpp src/util/crc32c.cpp \ $(LDFLAGS) memtable_tests: test_record test_memtable @echo "=== memtable tests ===" @./build/test_record @./build/test_memtable wal_tests: test_wal test_wal_crash @echo "=== wal tests ===" @./build/test_wal @./build/test_wal_crash #---------------------------------------------------------------------------- # Тесты SSTable #---------------------------------------------------------------------------- SSTABLE_TEST_DEPS = src/sstable/block.cpp src/sstable/bloom.cpp \ src/sstable/footer.cpp \ src/sstable/sstable_writer.cpp src/sstable/sstable_reader.cpp \ src/core/record.cpp src/util/varint.cpp src/util/crc32c.cpp \ src/util/murmur3.cpp src/util/compression.cpp test_bloom: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_bloom.cpp \ src/sstable/bloom.cpp src/util/murmur3.cpp src/util/varint.cpp test_footer: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_footer.cpp \ src/sstable/footer.cpp src/util/crc32c.cpp test_block: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_block.cpp \ src/sstable/block.cpp src/core/record.cpp \ src/util/varint.cpp src/util/crc32c.cpp src/util/compression.cpp $(LDFLAGS) test_sstable: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_sstable.cpp $(SSTABLE_TEST_DEPS) $(LDFLAGS) test_sstable_corrupt: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_sstable_corrupt.cpp $(SSTABLE_TEST_DEPS) $(LDFLAGS) sstable_tests: test_bloom test_footer test_block test_sstable test_sstable_corrupt @echo "=== sstable tests ===" @./build/test_bloom @./build/test_footer @./build/test_block @./build/test_sstable @./build/test_sstable_corrupt #---------------------------------------------------------------------------- # Тесты LSM и остальное #---------------------------------------------------------------------------- LSM_TEST_DEPS = $(UTIL_SRCS) src/core/record.cpp $(MEMTABLE_SRCS) $(WAL_SRCS) \ $(SSTABLE_SRCS) $(LSM_SRCS) $(CACHE_SRCS) DB_TEST_DEPS = $(LSM_TEST_DEPS) src/core/database.cpp src/core/config.cpp test_compaction: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_compaction.cpp $(LSM_TEST_DEPS) $(LDFLAGS) test_lsm: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_lsm.cpp $(LSM_TEST_DEPS) $(LDFLAGS) test_lsm_crash: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_lsm_crash.cpp $(LSM_TEST_DEPS) $(LDFLAGS) test_block_cache: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_block_cache.cpp \ src/cache/block_cache.cpp test_database: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_database.cpp $(DB_TEST_DEPS) $(LDFLAGS) test_command: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_command.cpp $(DB_TEST_DEPS) src/cli/command.cpp $(LDFLAGS) test_scan_stream: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_scan_stream.cpp $(DB_TEST_DEPS) $(LDFLAGS) lsm_tests: test_compaction test_lsm test_lsm_crash test_block_cache test_database test_command test_scan_stream @echo "=== lsm + facade tests ===" @./build/test_compaction @./build/test_lsm @./build/test_lsm_crash @./build/test_block_cache @./build/test_database @./build/test_command @./build/test_scan_stream #---------------------------------------------------------------------------- # HTTP / gRPC тесты (требуют серверных библиотек) #---------------------------------------------------------------------------- test_http: build $(CXX) $(CXXFLAGS) $(SERVER_INCS) -o build/$@ tests/test_http.cpp \ $(DB_TEST_DEPS) $(SERVER_SRCS) $(LDFLAGS) $(SERVER_LIBS) -lmicrohttpd test_grpc: build $(CXX) $(CXXFLAGS) $(SERVER_INCS) -o build/$@ tests/test_grpc.cpp \ $(DB_TEST_DEPS) $(SERVER_SRCS) $(LDFLAGS) $(SERVER_LIBS) -lmicrohttpd other_tests: test_http test_grpc @echo "=== server tests ===" @./build/test_http @./build/test_grpc #---------------------------------------------------------------------------- # Общая цель #---------------------------------------------------------------------------- #---------------------------------------------------------------------------- # Тесты безопасности (malicious input, backpressure, path validation) #---------------------------------------------------------------------------- test_security: build $(CXX) $(CXXFLAGS) -o build/$@ tests/test_security.cpp \ src/util/varint.cpp src/util/crc32c.cpp src/util/murmur3.cpp \ src/util/compression.cpp src/util/utils.cpp \ src/core/record.cpp src/wal/wal.cpp \ src/sstable/block.cpp src/sstable/bloom.cpp $(LDFLAGS) security_tests: test_security @echo "=== security tests ===" @./build/test_security tests: util_tests memtable_tests wal_tests sstable_tests lsm_tests security_tests @echo "" @echo "=== All tests passed ===" #---------------------------------------------------------------------------- # Бенчмарки #---------------------------------------------------------------------------- bench_put: build $(CXX) $(CXXFLAGS) -O3 -o build/$@ bench/bench_put.cpp $(LIB_SRCS) $(LDFLAGS) bench_get: build $(CXX) $(CXXFLAGS) -O3 -o build/$@ bench/bench_get.cpp $(LIB_SRCS) $(LDFLAGS) bench_scan: build $(CXX) $(CXXFLAGS) -O3 -o build/$@ bench/bench_scan.cpp $(LIB_SRCS) $(LDFLAGS) bench_recovery: build $(CXX) $(CXXFLAGS) -O3 -o build/$@ bench/bench_recovery.cpp $(LIB_SRCS) $(LDFLAGS) bench: bench_put bench_get bench_scan bench_recovery @echo "=== benchmarks built ===" install-deps: brew install snappy clean: rm -rf build/