Full Code of dragonflydb/dragonfly for AI

main 9dc515b4c7fa cached
1014 files
8.9 MB
2.4M tokens
7250 symbols
1 requests
Download .txt
Showing preview only (9,490K chars total). Download the full file or copy to clipboard to get everything.
Repository: dragonflydb/dragonfly
Branch: main
Commit: 9dc515b4c7fa
Files: 1014
Total size: 8.9 MB

Directory structure:
gitextract_74218km6/

├── .agent/
│   └── rules/
│       └── ANTIGRAVITY_INSTRUCTIONS.md
├── .circleci/
│   └── config.yml
├── .clang-format
├── .clang-tidy
├── .clangd
├── .claude/
│   ├── hooks/
│   │   └── format-after-edit.sh
│   ├── settings.json
│   └── skills/
│       └── reproduce-fuzz-crash/
│           └── SKILL.md
├── .ct.yaml
├── .cursorrules
├── .devcontainer/
│   ├── alpine/
│   │   ├── devcontainer.json
│   │   └── post-create.sh
│   ├── fedora/
│   │   └── devcontainer.json
│   ├── fedora41/
│   │   └── devcontainer.json
│   ├── ubuntu20/
│   │   ├── cmake-tools-kits.json
│   │   ├── devcontainer.json
│   │   └── post-create.sh
│   ├── ubuntu20-gcc14/
│   │   └── devcontainer.json
│   ├── ubuntu22/
│   │   ├── devcontainer.json
│   │   └── post-create.sh
│   └── ubuntu24/
│       └── devcontainer.json
├── .dockerignore
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── config.yml
│   │   └── feature_request.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── actions/
│   │   ├── builder/
│   │   │   └── action.yml
│   │   ├── fuzzing/
│   │   │   └── action.yml
│   │   ├── lint-test-chart/
│   │   │   └── action.yml
│   │   ├── multi-registry-docker-login/
│   │   │   └── action.yml
│   │   ├── regression-tests/
│   │   │   └── action.yml
│   │   ├── repeat/
│   │   │   └── action.yml
│   │   ├── sync-valkey-tests/
│   │   │   └── action.yml
│   │   └── test-docker/
│   │       └── action.yml
│   ├── bullmq-skipped-tests.txt
│   ├── copilot-instructions.md
│   ├── dependabot.yml
│   ├── instructions/
│   │   └── code-review.instructions.md
│   └── workflows/
│       ├── benchmark.yml
│       ├── bullmq-tests.yml
│       ├── ci.yml
│       ├── copilot-setup-steps.yml
│       ├── cov.yml
│       ├── daily-builds.yml
│       ├── docker-dev-release.yml
│       ├── docker-release2.yml
│       ├── epoll-regression-tests.yml
│       ├── fuzz-long.yml
│       ├── fuzz-pr.yml
│       ├── generate-osrepo-site.yml
│       ├── heavy-tests.yml
│       ├── ioloop-v2-regtests.yml
│       ├── mastodon-ruby-tests.yml
│       ├── package-install.yml
│       ├── regression-tests.yml
│       ├── release.yml
│       ├── repeat-tests.yml
│       └── test-fakeredis.yml
├── .gitignore
├── .gitmodules
├── .gitorderfile
├── .nvmrc
├── .pre-commit-config.yaml
├── .pre-commit-hooks.yaml
├── .snyk
├── .vscode/
│   └── c_cpp_properties.json
├── AGENTS.md
├── CLA.txt
├── CMakeLists.txt
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── CONTRIBUTORS.md
├── LICENSE.md
├── Makefile
├── README.ja-JP.md
├── README.ko-KR.md
├── README.md
├── README.pt-BR.md
├── README.zh-CN.md
├── TODO.md
├── contrib/
│   ├── charts/
│   │   └── dragonfly/
│   │       ├── .helmignore
│   │       ├── Chart.yaml
│   │       ├── README.md
│   │       ├── ci/
│   │       │   ├── affinity-values.golden.yaml
│   │       │   ├── affinity-values.yaml
│   │       │   ├── command_extraargs-values.golden.yaml
│   │       │   ├── command_extraargs-values.yaml
│   │       │   ├── commonlabels-values.golden.yaml
│   │       │   ├── commonlabels-values.yaml
│   │       │   ├── extracontainer-string-values.golden.yaml
│   │       │   ├── extracontainer-string-values.yaml
│   │       │   ├── extracontainer-tpl-values.golden.yaml
│   │       │   ├── extracontainer-tpl-values.yaml
│   │       │   ├── extraenv-and-passwordSecret-values.golden.yaml
│   │       │   ├── extraenv-and-passwordSecret-values.yaml
│   │       │   ├── extraenv-values.golden.yaml
│   │       │   ├── extraenv-values.yaml
│   │       │   ├── extravolumes-values.golden.yaml
│   │       │   ├── extravolumes-values.yaml
│   │       │   ├── initcontainer-string-values.golden.yaml
│   │       │   ├── initcontainer-string-values.yaml
│   │       │   ├── initcontainer-tpl-values.golden.yaml
│   │       │   ├── initcontainer-tpl-values.yaml
│   │       │   ├── password-old-env-values.golden.yaml
│   │       │   ├── password-old-env-values.yaml
│   │       │   ├── passwordsecret-values.golden.yaml
│   │       │   ├── passwordsecret-values.tpl.golden.yaml
│   │       │   ├── passwordsecret-values.tpl.yaml
│   │       │   ├── passwordsecret-values.yaml
│   │       │   ├── persistence-and-existing-secret.golden.yaml
│   │       │   ├── persistence-and-existing-secret.yaml
│   │       │   ├── persistent-values.golden.yaml
│   │       │   ├── persistent-values.yaml
│   │       │   ├── priorityclassname-values.golden.yaml
│   │       │   ├── priorityclassname-values.yaml
│   │       │   ├── prometheusrules-values.golden.yaml
│   │       │   ├── prometheusrules-values.yaml
│   │       │   ├── resources-values.golden.yaml
│   │       │   ├── resources-values.yaml
│   │       │   ├── securitycontext-values.golden.yaml
│   │       │   ├── securitycontext-values.yaml
│   │       │   ├── service-loadbalancer-ip.golden.yaml
│   │       │   ├── service-loadbalancer-ip.yaml
│   │       │   ├── service-monitor-values.golden.yaml
│   │       │   ├── service-monitor-values.yaml
│   │       │   ├── taints-tolerations-values.golden.yaml
│   │       │   ├── taints-tolerations-values.yaml
│   │       │   ├── tls-values.golden.yaml
│   │       │   ├── tls-values.yaml
│   │       │   ├── tolerations-values.golden.yaml
│   │       │   └── tolerations-values.yaml
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── golden_test.go
│   │       ├── templates/
│   │       │   ├── NOTES.txt
│   │       │   ├── _helpers.tpl
│   │       │   ├── _pod.tpl
│   │       │   ├── certificate.yaml
│   │       │   ├── deployment.yaml
│   │       │   ├── extra-manifests.yaml
│   │       │   ├── metrics-service.yaml
│   │       │   ├── prometheusrule.yaml
│   │       │   ├── service.yaml
│   │       │   ├── serviceaccount.yaml
│   │       │   ├── servicemonitor.yaml
│   │       │   ├── statefulset.yaml
│   │       │   └── tls-secret.yaml
│   │       └── values.yaml
│   ├── docker/
│   │   ├── README.md
│   │   └── docker-compose.yml
│   └── scripts/
│       ├── conventional-commits
│       └── signed-commit
├── docs/
│   ├── README.md
│   ├── async-tiering.md
│   ├── cluster-node-health.md
│   ├── coordinator.excalidraw
│   ├── dashtable.md
│   ├── dense_set.excalidraw
│   ├── dense_set.md
│   ├── df-share-nothing.md
│   ├── differences.md
│   ├── faq.md
│   ├── memcached_benchmark.md
│   ├── memory_bgsave.tsv
│   ├── namespaces.md
│   ├── quick-start/
│   │   └── README.md
│   ├── rdbsave.excalidraw
│   ├── rdbsave.md
│   ├── shard-serialization.md
│   ├── thread-per-core.excalidraw
│   └── transaction.md
├── fuzz/
│   ├── FUZZING.md
│   ├── dict/
│   │   ├── memcache.dict
│   │   └── resp.dict
│   ├── generate_targeted_seeds.py
│   ├── memcache_mutator.py
│   ├── package_crash.sh
│   ├── replay_crash.py
│   ├── resp_mutator.py
│   ├── run_fuzzer.sh
│   ├── seeds/
│   │   ├── memcache/
│   │   │   ├── add_replace.mc
│   │   │   ├── append_prepend.mc
│   │   │   ├── cas.mc
│   │   │   ├── delete.mc
│   │   │   ├── expiry.mc
│   │   │   ├── flags.mc
│   │   │   ├── flush.mc
│   │   │   ├── gat.mc
│   │   │   ├── incr_decr.mc
│   │   │   ├── large_value.mc
│   │   │   ├── meta_commands.mc
│   │   │   ├── multiget.mc
│   │   │   ├── noreply.mc
│   │   │   ├── set_get.mc
│   │   │   └── stats_version.mc
│   │   └── resp/
│   │       ├── acl.resp
│   │       ├── acl_ops.resp
│   │       ├── acl_ops2.resp
│   │       ├── bf_add.resp
│   │       ├── bitfield.resp
│   │       ├── bitfield_ops.resp
│   │       ├── bitops.resp
│   │       ├── bloom_ops.resp
│   │       ├── client.resp
│   │       ├── config.resp
│   │       ├── copy.resp
│   │       ├── del.resp
│   │       ├── eval.resp
│   │       ├── expire_ops.resp
│   │       ├── function.resp
│   │       ├── function_ops.resp
│   │       ├── generic_ops.resp
│   │       ├── generic_ops2.resp
│   │       ├── geo_ops.resp
│   │       ├── geo_ops2.resp
│   │       ├── geoadd.resp
│   │       ├── get.resp
│   │       ├── getdel.resp
│   │       ├── hash_ops.resp
│   │       ├── hash_ops2.resp
│   │       ├── hll_ops.resp
│   │       ├── hset.resp
│   │       ├── json.resp
│   │       ├── json_ops.resp
│   │       ├── json_ops2.resp
│   │       ├── list_blocking.resp
│   │       ├── list_ops.resp
│   │       ├── lmpop.resp
│   │       ├── lpos.resp
│   │       ├── lpush.resp
│   │       ├── memory.resp
│   │       ├── monitor.resp
│   │       ├── mset.resp
│   │       ├── multi_type_pipeline.resp
│   │       ├── object.resp
│   │       ├── pfadd.resp
│   │       ├── ping.resp
│   │       ├── pipeline.resp
│   │       ├── pubsub_ops.resp
│   │       ├── pubsub_ops2.resp
│   │       ├── rename.resp
│   │       ├── rpoplpush.resp
│   │       ├── sadd.resp
│   │       ├── scan_hscan.resp
│   │       ├── script_ops.resp
│   │       ├── script_ops2.resp
│   │       ├── sdiffstore.resp
│   │       ├── search_ops.resp
│   │       ├── search_ops2.resp
│   │       ├── server_ops.resp
│   │       ├── server_ops2.resp
│   │       ├── set.resp
│   │       ├── set_ops.resp
│   │       ├── set_ops2.resp
│   │       ├── smove.resp
│   │       ├── sort.resp
│   │       ├── srandmember.resp
│   │       ├── stream_ops.resp
│   │       ├── stream_ops2.resp
│   │       ├── string_ops.resp
│   │       ├── string_ops2.resp
│   │       ├── subscribe.resp
│   │       ├── throttle.resp
│   │       ├── transaction.resp
│   │       ├── transaction_ops2.resp
│   │       ├── watch.resp
│   │       ├── watch_multi.resp
│   │       ├── xadd.resp
│   │       ├── xread.resp
│   │       ├── zadd.resp
│   │       ├── zmpop.resp
│   │       ├── zrangebyscore.resp
│   │       ├── zset_ops.resp
│   │       └── zset_ops2.resp
│   └── triage_crashes.sh
├── go.work
├── go.work.sum
├── patches/
│   └── mimalloc-v2.2.4/
│       ├── 0_base.patch
│       ├── 1_add_stat_type.patch
│       ├── 2_return_stat.patch
│       ├── 3_track_full_size.patch
│       └── 4_fix_heap_collect.patch
├── pyproject.toml
├── src/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── GetGitRevisionDescription.cmake
│   ├── GetGitRevisionDescription.cmake.in
│   ├── common/
│   │   ├── arg_range.h
│   │   ├── backed_args.h
│   │   ├── heap_size.h
│   │   └── string_or_view.h
│   ├── core/
│   │   ├── CMakeLists.txt
│   │   ├── allocation_tracker.cc
│   │   ├── allocation_tracker.h
│   │   ├── allocation_tracker_test.cc
│   │   ├── bloom.cc
│   │   ├── bloom.h
│   │   ├── bloom_test.cc
│   │   ├── bptree_set.h
│   │   ├── bptree_set_test.cc
│   │   ├── cms.cc
│   │   ├── cms.h
│   │   ├── cms_test.cc
│   │   ├── collection_entry.h
│   │   ├── compact_object.cc
│   │   ├── compact_object.h
│   │   ├── compact_object_test.cc
│   │   ├── dash.h
│   │   ├── dash_bench.cc
│   │   ├── dash_internal.h
│   │   ├── dash_test.cc
│   │   ├── dense_set.cc
│   │   ├── dense_set.h
│   │   ├── detail/
│   │   │   ├── bitpacking.cc
│   │   │   ├── bitpacking.h
│   │   │   ├── bptree_internal.h
│   │   │   ├── gen_utils.h
│   │   │   ├── listpack.cc
│   │   │   ├── listpack.h
│   │   │   ├── listpack_wrap.cc
│   │   │   ├── listpack_wrap.h
│   │   │   └── stateless_allocator.h
│   │   ├── dfly_core_test.cc
│   │   ├── dict_builder.cc
│   │   ├── dict_builder.h
│   │   ├── dict_builder_test.cc
│   │   ├── dragonfly_core.cc
│   │   ├── expire_period.h
│   │   ├── extent_tree.cc
│   │   ├── extent_tree.h
│   │   ├── extent_tree_test.cc
│   │   ├── flatbuffers.h
│   │   ├── flatbuffers_test.cc
│   │   ├── generate_bin_sizes.py
│   │   ├── glob_matcher.cc
│   │   ├── glob_matcher.h
│   │   ├── huff_coder.cc
│   │   ├── huff_coder.h
│   │   ├── intent_lock.h
│   │   ├── interpreter.cc
│   │   ├── interpreter.h
│   │   ├── interpreter_polyfill.h
│   │   ├── interpreter_test.cc
│   │   ├── json/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── detail/
│   │   │   │   ├── common.h
│   │   │   │   ├── flat_dfs.cc
│   │   │   │   ├── flat_dfs.h
│   │   │   │   ├── interned_blob.cc
│   │   │   │   ├── interned_blob.h
│   │   │   │   ├── interned_string.cc
│   │   │   │   ├── interned_string.h
│   │   │   │   ├── jsoncons_dfs.cc
│   │   │   │   └── jsoncons_dfs.h
│   │   │   ├── driver.cc
│   │   │   ├── driver.h
│   │   │   ├── interned_blob_test.cc
│   │   │   ├── json_object.cc
│   │   │   ├── json_object.h
│   │   │   ├── json_test.cc
│   │   │   ├── jsonpath_grammar.y
│   │   │   ├── jsonpath_lexer.lex
│   │   │   ├── jsonpath_test.cc
│   │   │   ├── lexer_impl.cc
│   │   │   ├── lexer_impl.h
│   │   │   ├── path.cc
│   │   │   └── path.h
│   │   ├── linear_search_map.h
│   │   ├── linear_search_map_test.cc
│   │   ├── listpack_test.cc
│   │   ├── memory_test.cc
│   │   ├── mi_memory_resource.cc
│   │   ├── mi_memory_resource.h
│   │   ├── oah_entry.cc
│   │   ├── oah_entry.h
│   │   ├── oah_set.h
│   │   ├── oah_set_test.cc
│   │   ├── overloaded.h
│   │   ├── page_usage/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── page_usage_stats.cc
│   │   │   └── page_usage_stats.h
│   │   ├── page_usage_stats_test.cc
│   │   ├── qlist.cc
│   │   ├── qlist.h
│   │   ├── qlist_test.cc
│   │   ├── score_map.cc
│   │   ├── score_map.h
│   │   ├── score_map_test.cc
│   │   ├── sds_utils.cc
│   │   ├── sds_utils.h
│   │   ├── search/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── ast_expr.cc
│   │   │   ├── ast_expr.h
│   │   │   ├── base.cc
│   │   │   ├── base.h
│   │   │   ├── block_list.cc
│   │   │   ├── block_list.h
│   │   │   ├── block_list_test.cc
│   │   │   ├── compressed_sorted_set.cc
│   │   │   ├── compressed_sorted_set.h
│   │   │   ├── compressed_sorted_set_test.cc
│   │   │   ├── hnsw_alg.h
│   │   │   ├── hnsw_index.cc
│   │   │   ├── hnsw_index.h
│   │   │   ├── index_result.h
│   │   │   ├── indices.cc
│   │   │   ├── indices.h
│   │   │   ├── lexer.lex
│   │   │   ├── mrmw_mutex.h
│   │   │   ├── mrmw_mutex_test.cc
│   │   │   ├── parser.y
│   │   │   ├── query_driver.cc
│   │   │   ├── query_driver.h
│   │   │   ├── range_tree.cc
│   │   │   ├── range_tree.h
│   │   │   ├── range_tree_test.cc
│   │   │   ├── rax_tree.h
│   │   │   ├── rax_tree_test.cc
│   │   │   ├── renewable_quota.cc
│   │   │   ├── renewable_quota.h
│   │   │   ├── scanner.h
│   │   │   ├── search.cc
│   │   │   ├── search.h
│   │   │   ├── search_parser_test.cc
│   │   │   ├── search_test.cc
│   │   │   ├── sort_indices.cc
│   │   │   ├── sort_indices.h
│   │   │   ├── stateless_allocator.h
│   │   │   ├── synonyms.cc
│   │   │   ├── synonyms.h
│   │   │   ├── tag_types.h
│   │   │   ├── vector_utils.cc
│   │   │   └── vector_utils.h
│   │   ├── segment_allocator.cc
│   │   ├── segment_allocator.h
│   │   ├── size_tracking_channel.h
│   │   ├── small_string.cc
│   │   ├── small_string.h
│   │   ├── sorted_map.cc
│   │   ├── sorted_map.h
│   │   ├── sorted_map_test.cc
│   │   ├── sse_port.h
│   │   ├── string_map.cc
│   │   ├── string_map.h
│   │   ├── string_map_test.cc
│   │   ├── string_set.cc
│   │   ├── string_set.h
│   │   ├── string_set_test.cc
│   │   ├── task_queue.cc
│   │   ├── task_queue.h
│   │   ├── testdata/
│   │   │   ├── ids.txt.zst
│   │   │   └── list.txt.zst
│   │   ├── tiering_types.cc
│   │   ├── tiering_types.h
│   │   ├── top_keys.cc
│   │   ├── top_keys.h
│   │   ├── top_keys_test.cc
│   │   ├── topk.cc
│   │   ├── topk.h
│   │   ├── topk_test.cc
│   │   ├── tx_queue.cc
│   │   ├── tx_queue.h
│   │   └── zstd_test.cc
│   ├── external_libs.cmake
│   ├── facade/
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── cmd_arg_parser.cc
│   │   ├── cmd_arg_parser.h
│   │   ├── cmd_arg_parser_test.cc
│   │   ├── command_id.h
│   │   ├── conn_context.h
│   │   ├── connection_ref.h
│   │   ├── disk_backed_queue.cc
│   │   ├── disk_backed_queue.h
│   │   ├── disk_backed_queue_test.cc
│   │   ├── dragonfly_connection.cc
│   │   ├── dragonfly_connection.h
│   │   ├── dragonfly_listener.cc
│   │   ├── dragonfly_listener.h
│   │   ├── error.h
│   │   ├── facade.cc
│   │   ├── facade_stats.h
│   │   ├── facade_test.cc
│   │   ├── facade_test.h
│   │   ├── facade_types.h
│   │   ├── memcache_parser.cc
│   │   ├── memcache_parser.h
│   │   ├── memcache_parser_test.cc
│   │   ├── ok_main.cc
│   │   ├── op_status.cc
│   │   ├── op_status.h
│   │   ├── parsed_command.cc
│   │   ├── parsed_command.h
│   │   ├── redis_parser.cc
│   │   ├── redis_parser.h
│   │   ├── redis_parser_test.cc
│   │   ├── reply_builder.cc
│   │   ├── reply_builder.h
│   │   ├── reply_builder_test.cc
│   │   ├── reply_capture.cc
│   │   ├── reply_capture.h
│   │   ├── reply_mode.h
│   │   ├── reply_payload.h
│   │   ├── resp_expr.cc
│   │   ├── resp_expr.h
│   │   ├── resp_expr_test_utils.cc
│   │   ├── resp_expr_test_utils.h
│   │   ├── resp_parser.cc
│   │   ├── resp_parser.h
│   │   ├── resp_parser_test.cc
│   │   ├── resp_srv_parser.cc
│   │   ├── resp_srv_parser.h
│   │   ├── resp_srv_parser_test.cc
│   │   ├── resp_validator.cc
│   │   ├── service_interface.cc
│   │   ├── service_interface.h
│   │   ├── socket_utils.cc
│   │   ├── socket_utils.h
│   │   ├── tls_helpers.cc
│   │   └── tls_helpers.h
│   ├── huff/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── hist.h
│   │   ├── huf.h
│   │   └── mem.h
│   ├── redis/
│   │   ├── CMakeLists.txt
│   │   ├── LICENSE.redis
│   │   ├── config.h
│   │   ├── crc16.c
│   │   ├── crc16.h
│   │   ├── crc64.c
│   │   ├── crc64.h
│   │   ├── crcspeed.c
│   │   ├── crcspeed.h
│   │   ├── debug.c
│   │   ├── dict.c
│   │   ├── dict.h
│   │   ├── endianconv.h
│   │   ├── geo.c
│   │   ├── geo.h
│   │   ├── geohash.c
│   │   ├── geohash.h
│   │   ├── geohash_helper.c
│   │   ├── geohash_helper.h
│   │   ├── hiredis.c
│   │   ├── hiredis.h
│   │   ├── hyperloglog.c
│   │   ├── hyperloglog.h
│   │   ├── intset.c
│   │   ├── intset.h
│   │   ├── listpack.c
│   │   ├── listpack.h
│   │   ├── lua/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── bit/
│   │   │   │   └── bit.c
│   │   │   ├── cjson/
│   │   │   │   ├── fpconv.c
│   │   │   │   ├── fpconv.h
│   │   │   │   ├── lua_cjson.c
│   │   │   │   ├── strbuf.c
│   │   │   │   └── strbuf.h
│   │   │   ├── cmsgpack/
│   │   │   │   └── lua_cmsgpack.c
│   │   │   └── struct/
│   │   │       └── lua_struct.c
│   │   ├── lzf.h
│   │   ├── lzfP.h
│   │   ├── lzf_c.c
│   │   ├── lzf_d.c
│   │   ├── rax.c
│   │   ├── rax.h
│   │   ├── rax_malloc.h
│   │   ├── rdb.h
│   │   ├── read.c
│   │   ├── read.h
│   │   ├── redis_aux.c
│   │   ├── redis_aux.h
│   │   ├── sds.c
│   │   ├── sds.h
│   │   ├── sdsalloc.h
│   │   ├── siphash.c
│   │   ├── stream.h
│   │   ├── t_stream.c
│   │   ├── util.c
│   │   ├── util.h
│   │   ├── ziplist.c
│   │   ├── ziplist.h
│   │   ├── zmalloc.c
│   │   ├── zmalloc.h
│   │   └── zmalloc_mi.c
│   └── server/
│       ├── CMakeLists.txt
│       ├── acl/
│       │   ├── acl_commands_def.h
│       │   ├── acl_family.cc
│       │   ├── acl_family.h
│       │   ├── acl_family_test.cc
│       │   ├── acl_log.cc
│       │   ├── acl_log.h
│       │   ├── user.cc
│       │   ├── user.h
│       │   ├── user_registry.cc
│       │   ├── user_registry.h
│       │   ├── validator.cc
│       │   └── validator.h
│       ├── bitops_family.cc
│       ├── bitops_family_test.cc
│       ├── blocking_controller.cc
│       ├── blocking_controller.h
│       ├── blocking_controller_test.cc
│       ├── bloom_family.cc
│       ├── bloom_family_test.cc
│       ├── channel_store.cc
│       ├── channel_store.h
│       ├── cluster/
│       │   ├── CMakeLists.txt
│       │   ├── cluster_config.cc
│       │   ├── cluster_config.h
│       │   ├── cluster_config_test.cc
│       │   ├── cluster_defs.cc
│       │   ├── cluster_defs.h
│       │   ├── cluster_family.cc
│       │   ├── cluster_family.h
│       │   ├── cluster_family_test.cc
│       │   ├── cluster_utility.cc
│       │   ├── cluster_utility.h
│       │   ├── coordinator.cc
│       │   ├── coordinator.h
│       │   ├── incoming_slot_migration.cc
│       │   ├── incoming_slot_migration.h
│       │   ├── outgoing_slot_migration.cc
│       │   ├── outgoing_slot_migration.h
│       │   └── slot_set.h
│       ├── cluster_support.cc
│       ├── cluster_support.h
│       ├── cmd_support.cc
│       ├── cmd_support.h
│       ├── cms_family.cc
│       ├── cms_family_test.cc
│       ├── collection_family_fallback.cc
│       ├── command_families.h
│       ├── command_registry.cc
│       ├── command_registry.h
│       ├── common.cc
│       ├── common.h
│       ├── common_types.h
│       ├── config_registry.cc
│       ├── config_registry.h
│       ├── conn_context.cc
│       ├── conn_context.h
│       ├── container_utils.cc
│       ├── container_utils.h
│       ├── db_slice.cc
│       ├── db_slice.h
│       ├── debugcmd.cc
│       ├── debugcmd.h
│       ├── detail/
│       │   ├── compressor.cc
│       │   ├── compressor.h
│       │   ├── decompress.cc
│       │   ├── decompress.h
│       │   ├── save_stages_controller.cc
│       │   ├── save_stages_controller.h
│       │   ├── snapshot_storage.cc
│       │   ├── snapshot_storage.h
│       │   ├── table.h
│       │   └── wrapped_json_path.h
│       ├── dfly_bench.cc
│       ├── dfly_main.cc
│       ├── dflycmd.cc
│       ├── dflycmd.h
│       ├── dragonfly_test.cc
│       ├── engine_shard.cc
│       ├── engine_shard.h
│       ├── engine_shard_set.cc
│       ├── engine_shard_set.h
│       ├── engine_shard_set_test.cc
│       ├── error.cc
│       ├── error.h
│       ├── execution_state.cc
│       ├── execution_state.h
│       ├── family_utils.cc
│       ├── family_utils.h
│       ├── generic_family.cc
│       ├── generic_family.h
│       ├── generic_family_test.cc
│       ├── geo_family.cc
│       ├── geo_family_test.cc
│       ├── hll_family.cc
│       ├── hll_family_test.cc
│       ├── hset_family.cc
│       ├── hset_family.h
│       ├── hset_family_test.cc
│       ├── http_api.cc
│       ├── http_api.h
│       ├── journal/
│       │   ├── CMakeLists.txt
│       │   ├── cmd_serializer.cc
│       │   ├── cmd_serializer.h
│       │   ├── executor.cc
│       │   ├── executor.h
│       │   ├── journal.cc
│       │   ├── journal.h
│       │   ├── journal_slice.cc
│       │   ├── journal_slice.h
│       │   ├── journal_test.cc
│       │   ├── pending_buf.h
│       │   ├── serializer.cc
│       │   ├── serializer.h
│       │   ├── streamer.cc
│       │   ├── streamer.h
│       │   ├── tx_executor.cc
│       │   ├── tx_executor.h
│       │   ├── types.cc
│       │   └── types.h
│       ├── json_family.cc
│       ├── json_family_memory_test.cc
│       ├── json_family_test.cc
│       ├── list_family.cc
│       ├── list_family_test.cc
│       ├── main_service.cc
│       ├── main_service.h
│       ├── memory_cmd.cc
│       ├── memory_cmd.h
│       ├── multi_command_squasher.cc
│       ├── multi_command_squasher.h
│       ├── multi_test.cc
│       ├── namespaces.cc
│       ├── namespaces.h
│       ├── protocol_client.cc
│       ├── protocol_client.h
│       ├── rdb_extensions.h
│       ├── rdb_load.cc
│       ├── rdb_load.h
│       ├── rdb_load_context.cc
│       ├── rdb_load_context.h
│       ├── rdb_save.cc
│       ├── rdb_save.h
│       ├── rdb_test.cc
│       ├── replica.cc
│       ├── replica.h
│       ├── replica_types.h
│       ├── script_mgr.cc
│       ├── script_mgr.h
│       ├── search/
│       │   ├── CMakeLists.txt
│       │   ├── aggregator.cc
│       │   ├── aggregator.h
│       │   ├── aggregator_test.cc
│       │   ├── doc_accessors.cc
│       │   ├── doc_accessors.h
│       │   ├── doc_index.cc
│       │   ├── doc_index.h
│       │   ├── doc_index_fallback.cc
│       │   ├── global_hnsw_index.cc
│       │   ├── global_hnsw_index.h
│       │   ├── index_builder.cc
│       │   ├── index_builder.h
│       │   ├── index_join.cc
│       │   ├── index_join.h
│       │   ├── index_join_test.cc
│       │   ├── search_family.cc
│       │   ├── search_family.h
│       │   └── search_family_test.cc
│       ├── serializer_base.cc
│       ├── serializer_base.h
│       ├── serializer_base_test.cc
│       ├── serializer_commons.cc
│       ├── serializer_commons.h
│       ├── server_family.cc
│       ├── server_family.h
│       ├── server_family_test.cc
│       ├── server_state.cc
│       ├── server_state.h
│       ├── set_family.cc
│       ├── set_family.h
│       ├── set_family_test.cc
│       ├── sharding.cc
│       ├── sharding.h
│       ├── slowlog.cc
│       ├── slowlog.h
│       ├── snapshot.cc
│       ├── snapshot.h
│       ├── stats.cc
│       ├── stats.h
│       ├── stream_family.cc
│       ├── stream_family.h
│       ├── stream_family_test.cc
│       ├── string_family.cc
│       ├── string_family_test.cc
│       ├── string_stats.cc
│       ├── string_stats.h
│       ├── string_stats_test.cc
│       ├── synchronization.cc
│       ├── synchronization.h
│       ├── table.cc
│       ├── table.h
│       ├── test_utils.cc
│       ├── test_utils.h
│       ├── testdata/
│       │   ├── RDB_TYPE_STREAM_LISTPACKS_2.rdb
│       │   ├── RDB_TYPE_STREAM_LISTPACKS_3.rdb
│       │   ├── empty.rdb
│       │   ├── hll.rdb
│       │   ├── ignore_expiry.rdb
│       │   ├── redis6_small.rdb
│       │   ├── redis6_stream.rdb
│       │   ├── redis7_small.rdb
│       │   └── redis_json.rdb
│       ├── tiered_storage.cc
│       ├── tiered_storage.h
│       ├── tiered_storage_test.cc
│       ├── tiering/
│       │   ├── CMakeLists.txt
│       │   ├── common.h
│       │   ├── decoders.cc
│       │   ├── decoders.h
│       │   ├── disk_storage.cc
│       │   ├── disk_storage.h
│       │   ├── disk_storage_test.cc
│       │   ├── entry_map.h
│       │   ├── external_alloc.cc
│       │   ├── external_alloc.h
│       │   ├── external_alloc_test.cc
│       │   ├── op_manager.cc
│       │   ├── op_manager.h
│       │   ├── op_manager_test.cc
│       │   ├── serialized_map.cc
│       │   ├── serialized_map.h
│       │   ├── serialized_map_test.cc
│       │   ├── small_bins.cc
│       │   ├── small_bins.h
│       │   ├── small_bins_test.cc
│       │   └── test_common.h
│       ├── transaction.cc
│       ├── transaction.h
│       ├── tx_base.cc
│       ├── tx_base.h
│       ├── version.cc.in
│       ├── version.h
│       ├── version_monitor.cc
│       ├── version_monitor.h
│       ├── zset_family.cc
│       ├── zset_family.h
│       └── zset_family_test.cc
├── tests/
│   ├── README.md
│   ├── dragonfly/
│   │   ├── __init__.py
│   │   ├── acl_family_test.py
│   │   ├── bull_sidekiq_test.py
│   │   ├── celery_test.py
│   │   ├── cluster_mgr_test.py
│   │   ├── cluster_test.py
│   │   ├── config_test.py
│   │   ├── conftest.py
│   │   ├── connection_test.py
│   │   ├── eval_test.py
│   │   ├── generic_test.py
│   │   ├── http_conf_test.py
│   │   ├── instance.py
│   │   ├── json_test.py
│   │   ├── list_family_test.py
│   │   ├── management_test.py
│   │   ├── memcache_meta.py
│   │   ├── memory_test.py
│   │   ├── proxy.py
│   │   ├── pymemcached_test.py
│   │   ├── redis_replication_test.py
│   │   ├── replication_test.py
│   │   ├── requirements.txt
│   │   ├── search_benchmark_test.py
│   │   ├── search_benchmark_utils.py
│   │   ├── search_test.py
│   │   ├── seeder/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── script-generate.lua
│   │   │   ├── script-genlib.lua
│   │   │   ├── script-hash.lua
│   │   │   ├── script-hashlib.lua
│   │   │   └── script-utillib.lua
│   │   ├── seeder_test.py
│   │   ├── sentinel_test.py
│   │   ├── server_family_test.py
│   │   ├── set_test.py
│   │   ├── shutdown_test.py
│   │   ├── snapshot_test.py
│   │   ├── test_dash_gc.py
│   │   ├── tiering_test.py
│   │   ├── tls_conf_test.py
│   │   ├── utility.py
│   │   └── valkey_search/
│   │       ├── README.md
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── sync-valkey-search-tests.sh
│   │       ├── util.py
│   │       └── valkey_search_test_case_dragonfly.py
│   ├── fakeredis/
│   │   ├── README.md
│   │   ├── pyproject.toml
│   │   └── test/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── test_asyncredis.py
│   │       ├── test_hypotesis_joint/
│   │       │   ├── __init__.py
│   │       │   └── test_joint.py
│   │       ├── test_hypothesis/
│   │       │   ├── __init__.py
│   │       │   ├── _server_info.py
│   │       │   ├── base.py
│   │       │   ├── test_connection.py
│   │       │   ├── test_hash.py
│   │       │   ├── test_list.py
│   │       │   ├── test_server.py
│   │       │   ├── test_set.py
│   │       │   ├── test_string.py
│   │       │   ├── test_transaction.py
│   │       │   └── test_zset.py
│   │       ├── test_issues.py
│   │       ├── test_json/
│   │       │   ├── __init__.py
│   │       │   ├── test_json.py
│   │       │   ├── test_json_arr_commands.py
│   │       │   └── test_json_commands.py
│   │       ├── test_mixins/
│   │       │   ├── __init__.py
│   │       │   ├── test_bitmap_commands.py
│   │       │   ├── test_connection.py
│   │       │   ├── test_generic_commands.py
│   │       │   ├── test_geo_commands.py
│   │       │   ├── test_hash_commands.py
│   │       │   ├── test_list_commands.py
│   │       │   ├── test_pubsub_commands.py
│   │       │   ├── test_scan.py
│   │       │   ├── test_scripting.py
│   │       │   ├── test_server_commands.py
│   │       │   ├── test_set_commands.py
│   │       │   ├── test_sortedset_commands.py
│   │       │   ├── test_streams_commands.py
│   │       │   ├── test_string_commands.py
│   │       │   └── test_zadd.py
│   │       ├── test_stack/
│   │       │   ├── __init__.py
│   │       │   ├── test_bloomfilter.py
│   │       │   ├── test_cms.py
│   │       │   ├── test_cuckoofilter.py
│   │       │   ├── test_tdigest.py
│   │       │   └── test_topk.py
│   │       ├── test_transactions.py
│   │       └── testtools.py
│   ├── integration/
│   │   ├── .dockerignore
│   │   ├── .run_ioredis_valid_test.sh
│   │   ├── async.py
│   │   ├── gen_sets.sh
│   │   ├── generate_sets.py
│   │   ├── ioredis.Dockerfile
│   │   ├── jedis.Dockerfile
│   │   ├── node-redis.Dockerfile
│   │   ├── pascaldekloe.Dockerfile
│   │   ├── relay.Dockerfile
│   │   ├── run_ioredis_on_docker.sh
│   │   └── stress_shutdown.sh
│   └── pytest.ini
└── tools/
    ├── balls_bins.py
    ├── benchmark/
    │   ├── k8s-benchmark-job.yaml
    │   └── post_run_checks.py
    ├── cache_logs_player.py
    ├── cache_testing.py
    ├── cluster_mgr.py
    ├── defrag_db.py
    ├── defrag_mem_test.py
    ├── docker/
    │   ├── entrypoint.sh
    │   ├── fetch_release.sh
    │   └── healthcheck.sh
    ├── eviction/
    │   ├── fill_db.py
    │   ├── run_fill_db.sh
    │   └── stop_fill_db.sh
    ├── faulty_io.sh
    ├── generate-tls-files.sh
    ├── json_benchmark.py
    ├── local/
    │   ├── gen-test-certs.sh
    │   └── monitoring/
    │       ├── docker-compose.yml
    │       ├── grafana/
    │       │   ├── config.monitoring
    │       │   └── provisioning/
    │       │       ├── dashboards/
    │       │       │   ├── dashboard.yml
    │       │       │   ├── dragonfly.json
    │       │       │   ├── memcached.json
    │       │       │   ├── node-exporter.json
    │       │       │   └── redis.json
    │       │       └── datasources/
    │       │           └── datasource.yml
    │       └── prometheus/
    │           └── prometheus.yml
    ├── packaging/
    │   ├── Dockerfile.alpine-dev
    │   ├── Dockerfile.ubuntu-dev
    │   ├── Dockerfile.ubuntu-prod
    │   ├── README.md
    │   ├── debian/
    │   │   ├── compat
    │   │   ├── control
    │   │   ├── dragonfly.conf
    │   │   ├── dragonfly.install
    │   │   ├── dragonfly.logrotate
    │   │   ├── dragonfly.postinst
    │   │   ├── dragonfly.postrm
    │   │   ├── dragonfly.preinst
    │   │   ├── dragonfly.service
    │   │   └── rules
    │   ├── generate_changelog.sh
    │   ├── generate_debian_package.sh
    │   ├── osrepos/
    │   │   ├── README.md
    │   │   ├── dragonfly.repo
    │   │   ├── dragonfly.sources
    │   │   ├── pgp-key.public
    │   │   ├── reprepro-config/
    │   │   │   ├── distributions
    │   │   │   └── options
    │   │   ├── requirements.txt
    │   │   └── scripts/
    │   │       ├── fetch-releases.py
    │   │       ├── generate-apt-repo.sh
    │   │       ├── generate-index.py
    │   │       └── sign-rpms.sh
    │   └── rpm/
    │       ├── build_rpm.sh
    │       ├── dragonfly.service
    │       └── dragonfly.spec
    ├── parse_allocator_tracking_logs.py
    ├── plot_memtier_latency.py
    ├── release.sh
    ├── replay/
    │   ├── go.mod
    │   ├── go.sum
    │   ├── main.go
    │   ├── parsing.go
    │   └── workers.go
    ├── requirements.txt
    ├── run_master_replica.sh
    └── vector-benches/
        ├── README.md
        ├── go.mod
        ├── go.sum
        └── main.go

================================================
FILE CONTENTS
================================================

================================================
FILE: .agent/rules/ANTIGRAVITY_INSTRUCTIONS.md
================================================
# Antigravity Agent Instructions for Dragonfly

**READ [AGENTS.md](../../AGENTS.md)**

All project information, workflows, patterns, and guidelines are in `AGENTS.md`.


================================================
FILE: .circleci/config.yml
================================================
version: 2.1

machine: true

jobs:
  build-ubuntu:
      docker: 
        - image: ghcr.io/romange/ubuntu-dev:22
      steps:
        - checkout
        - run:
            name: Set up environment
            environment:
              BUILD_TYPE: Debug            
            command: | 
              git submodule update --init --recursive
              cmake -B build -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -GNinja -DCMAKE_CXX_COMPILER_LAUNCHER=ccache              
        - run:
            name: Build & Test
            command: | 
              cd build && pwd 
              ninja -j4 src/all
              ctest -V -L DFLY
          

        
# Orchestrate our job run sequence
workflows:
  build_and_test:
    jobs:
      - build-ubuntu


================================================
FILE: .clang-format
================================================
# ---
# We'll use defaults from the Google style, but with 2 columns indentation.
BasedOnStyle: Google
IndentWidth: 2
ColumnLimit: 100
---
Language: Cpp
AllowShortLoopsOnASingleLine: false
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
AlwaysBreakTemplateDeclarations: false
PackConstructorInitializers: NextLine
DerivePointerAlignment: false
PointerAlignment: Left
BasedOnStyle: Google
ColumnLimit: 100
---
Language: Proto
BasedOnStyle: Google


================================================
FILE: .clang-tidy
================================================
---

Checks: >
  -abseil-no-namespace,
  bugprone*,
  # Sadly narrowing conversions is too noisy
  -bugprone-narrowing-conversions,
  -bugprone-easily-swappable-parameters,
  -bugprone-branch-clone,
  -bugprone-implicit-widening-of-multiplication-result,
  -bugprone-too-small-loop-variable,
  -bugprone-reserved-identifier,
  boost-use-to-string,
  performance*,
  -cert-err58-cpp,
  -cert-dcl58-cpp,  # Ignore std changes
  -cert-dcl51-cpp,  # bugprone-reserved-identifier
  # Doesn't work with abseil flags
  clang-analyzer*,
  google-*,
  -google-runtime-int,
  -google-readability-*,
  -google-build-using-namespace,
  misc-definitions-in-headers,
  misc-misleading*,
  misc-misplaced-const,
  misc-new-delete-overloads,
  misc-non-copyable-objects,
  misc-redundant-expression,
  misc-static-assert,
  misc-throw-by-value-catch-by-reference,
  misc-unconventional-assign-operator,
  misc-uniqueptr-reset-release,
  misc-unused-alias-decls,
  misc-unused-using-decls,
  modernize-deprecated-headers,
  modernize-macro-to-enum,
  modernize-make-shared,
  modernize-make-unique,
  modernize-pass-by-value,
  modernize-raw-string-literal,
  modernize-redundant-void-arg,
  modernize-replace-disallow-copy-and-assign-macro,
  modernize-return-braced-init-list,
  modernize-shrink-to-fit,
  modernize-unary-static-assert,
  modernize-use-emplace,
  modernize-use-equals-delete,
  modernize-use-noexcept,
  modernize-use-transparent-functors,
  modernize-use-uncaught-exceptions,
  modernize-use-using,
  readability-avoid-const-params-in-decls,
  readability-const-return-type,
  readability-container-contains,
  readability-container-size-empty,
  readability-delete-null-pointer,
  readability-duplicate-include,
  readability-function-size,
  readability-identifier-naming,
  -readability-inconsistent-declaration-parameter-name,
  readability-make-member-function-const,
  readability-misplaced-array-index,
  readability-named-parameter,
  readability-non-const-parameter,
  readability-redundant-access-specifiers,
  readability-redundant-control-flow,
  readability-redundant-declaration,
  readability-redundant-function-ptr-dereference,
  readability-redundant-member-init,
  readability-redundant-preprocessor,
  readability-redundant-smartptr-get,
  readability-redundant-string-cstr,
  readability-redundant-string-init,
  readability-simplify-subscript-expr,
  readability-static-definition-in-anonymous-namespace,
  readability-string-compare,
  readability-suspicious-call-argument,
  readability-uniqueptr-delete-release,
  readability-use-anyofallof


# Disabled because they're currently too disruptive, but one day might be nice to have:
# modernize-use-nullptr,
# modernize-use-equals-default,
# readability-qualified-auto,

CheckOptions:
  - key: bugprone-narrowing-conversions.WarnOnIntegerNarrowingConversion
    value: false
  - key: bugprone-narrowing-conversions.WarnOnEquivalentBitWidth
    value: false


================================================
FILE: .clangd
================================================
Diagnostics:
  UnusedIncludes: None
  MissingIncludes: None
  Includes:
    IgnoreHeader: base/*.h

CompileFlags:
  CompilationDatabase: build-dbg/       # Search for compile_commands.json


================================================
FILE: .claude/hooks/format-after-edit.sh
================================================
#!/bin/bash
# Hook to automatically format files after Edit/Write operations
# Filters out src/redis directory from formatting

# Read JSON input from stdin
INPUT=$(cat)
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')

# Skip if no file path
if [ -z "$FILE_PATH" ]; then
  exit 0
fi

# Skip if file is in src/redis directory
if [[ "$FILE_PATH" == */src/redis/* ]]; then
  echo "Skipping formatting for src/redis file: $FILE_PATH" >&2
  exit 0
fi

# Skip if file doesn't exist
if [ ! -f "$FILE_PATH" ]; then
  exit 0
fi

# Run pre-commit on the file
pre-commit run --files "$FILE_PATH" 2>&1

# Always exit 0 to not block the operation even if formatting fails
exit 0


================================================
FILE: .claude/settings.json
================================================
{
  "permissions": {
    "allow": [
      "Read($CLAUDE_PROJECT_DIR/**)",
      "Edit($CLAUDE_PROJECT_DIR/**)",
      "Write($CLAUDE_PROJECT_DIR/**)",
      "Bash(./*_test:*)",
      "Bash(ninja:*)",
      "Bash(git add:*)",
      "Bash(git reset:*)",
      "Bash(gh issue view:*)",
      "Bash(git log:*)",
      "Bash(git show:*)",
      "WebSearch",
      "Bash(grep:*)",
      "Bash(pre-commit run:*)",
      "Bash(clang-format:*)",
      "Bash(git checkout:*)",
      "Bash(tee:*)",
      "Bash(sort:*)",
      "Bash(git patch-id:*)"
    ]
  },
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Edit|Write",
        "hooks": [
          {
            "type": "command",
            "command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/format-after-edit.sh",
            "timeout": 30,
            "statusMessage": "Formatting code..."
          }
        ]
      }
    ]
  }
}


================================================
FILE: .claude/skills/reproduce-fuzz-crash/SKILL.md
================================================
---
name: reproduce-fuzz-crash
description: >
  Reproduce AFL++ fuzz crashes from GitHub Actions. Use when user provides a
  GitHub Actions fuzz run URL and wants to reproduce and analyze the crash locally.
argument-hint: <github-actions-run-url>
allowed-tools: Bash, Read, Grep, Glob, Write
---

# Reproduce Fuzz Crash

Given a GitHub Actions fuzz run URL, download crash artifacts, triage them
with `fuzz/triage_crashes.sh`, and produce a crash analysis report.

**Input**: `$ARGUMENTS` — a GitHub Actions run URL like:
`https://github.com/dragonflydb/dragonfly/actions/runs/22906484769`
or with query params like `?pr=6855`.

## Workflow

### Step 1: Parse the URL

Extract `owner/repo` and `run_id` from the URL.

```
https://github.com/{owner}/{repo}/actions/runs/{run_id}[?...]
```

Strip any query parameters from `run_id`.

### Step 2: Download artifacts

List crash artifacts via the GitHub API, then download each as a `.zip` directly:

**IMPORTANT**: Run each command as a separate Bash tool call (no `&&` chaining)
to ensure auto-approval works with the user's permission patterns.

```bash
# List artifacts — filter for names containing "crash"
gh api repos/{owner}/{repo}/actions/runs/{run_id}/artifacts

# Create output directory
mkdir -p /tmp/fuzz-repro-{run_id}

# Download each crash artifact by ID (separate command)
gh api repos/{owner}/{repo}/actions/artifacts/{artifact_id}/zip > /tmp/fuzz-repro-{run_id}/<artifact-name>.zip
```

This gives real `.zip` files that the triage script can consume directly.

If no crash artifacts are found, report that the run has no crash artifacts and stop.

Note: there may be duplicate artifact names (same name, different IDs) from
retried jobs. Download the **most recent** one (highest artifact ID).

### Step 3: Determine mode

Infer the protocol mode from the artifact name:
- Contains "memcache" → `memcache`
- Otherwise → `resp`

### Step 4: Check Dragonfly binary

Check if the debug binary already exists and runs:

```bash
./build-dbg/dragonfly --version
```

Only build if the binary doesn't exist or fails to run:

```bash
ninja -C build-dbg dragonfly
```

If `build-dbg` doesn't exist, run `./helio/blaze.sh` first.

### Step 5: Run triage_crashes.sh

For each zip file, run:

```bash
./fuzz/triage_crashes.sh ./build-dbg/dragonfly <mode> /tmp/fuzz-repro-{run_id}/<artifact-name>.zip
```

Capture the full output.

### Step 6: Analyze and report

Parse the triage output for confirmed crashes. For each confirmed crash:

1. **Read the source** at the crash location — use the stack trace to identify
   the source file and line number, then read that code.
2. **Provide analysis**: likely root cause, what to investigate.

Print a structured report:

```
## Fuzz Crash Report

**Run**: {url}
**Artifacts**: {number} crash(es) found

---

### Crash NNNNNN

**Reproduced**: Yes / No (false positive)
**Signal**: SIGABRT (6) / SIGSEGV (11) / etc.

**Stack trace**:
\```
<stack trace from triage output>
\```

**Analysis**:
<1-3 sentences explaining the likely root cause based on the stack trace,
the assertion message, and the crash input. Identify the source file and
line number. Suggest what to investigate.>
```

## Important Notes

- The triage script uses port **6379** (resp) or **11211** (memcache).
  Ensure no other Dragonfly or Redis instance is using these ports.
- The script adds `--rename_command` flags to avoid false positives from
  commands like DEBUG SLEEP that the fuzzer might generate.
- Some crashes are non-deterministic (thread timing). The script reports
  these as "FALSE POSITIVE" — note this clearly, it doesn't mean the bug
  is invalid, just that it didn't reproduce on this run.
- The script handles its own cleanup of Dragonfly processes.
- Do NOT delete `/tmp/fuzz-repro-{run_id}/` — the user may want to inspect it.
- If `gh run download` fails with permissions, suggest the user authenticate
  with `gh auth login`.


================================================
FILE: .ct.yaml
================================================
# See https://github.com/helm/chart-testing#configuration
remote: origin
target-branch: main
chart-dirs:
  - contrib/charts
helm-extra-args: --debug --timeout 60s
check-version-increment: false
validate-maintainers: false


================================================
FILE: .cursorrules
================================================
# Cursor AI Rules for Dragonfly

**READ `AGENTS.md`**

All project information, workflows, patterns, and guidelines are in `AGENTS.md`.


================================================
FILE: .devcontainer/alpine/devcontainer.json
================================================
{
  "name": "alpine-dev",
  "image": "ghcr.io/romange/alpine-dev",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-vscode.cpptools",
        "ms-vscode.cmake-tools",
        "ms-vscode.cpptools-themes",
        "twxs.cmake"
      ],
      "settings": {
        "cmake.buildDirectory": "/build",
        "extensions.ignoreRecommendations": true,
        "cmake.configureArgs": []
      }
    }
  },
  "mounts": [
    "source=alpine-vol,target=/build,type=volume"
  ],
  "postCreateCommand": ".devcontainer/alpine/post-create.sh ${containerWorkspaceFolder}"
}


================================================
FILE: .devcontainer/alpine/post-create.sh
================================================
#!/bin/bash

containerWorkspaceFolder=$1
git config --global --add safe.directory ${containerWorkspaceFolder}
git config --global --add safe.directory ${containerWorkspaceFolder}/helio
mkdir -p /root/.local/share/CMakeTools


================================================
FILE: .devcontainer/fedora/devcontainer.json
================================================
{
  "name": "fedora30",
  "image": "ghcr.io/romange/fedora:30",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-vscode.cpptools",
        "ms-vscode.cmake-tools",
        "ms-vscode.cpptools-themes",
        "twxs.cmake"
      ],
      "settings": {
        "cmake.buildDirectory": "/build",
        "extensions.ignoreRecommendations": true
      }
    }
  },
  "mounts": [
    "source=fedora-vol,target=/build,type=volume"
  ]
}


================================================
FILE: .devcontainer/fedora41/devcontainer.json
================================================
{
  "name": "fedora41",
  "image": "ghcr.io/romange/fedora:41",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-vscode.cpptools",
        "ms-vscode.cmake-tools",
        "ms-vscode.cpptools-themes",
        "twxs.cmake"
      ],
      "settings": {
        "cmake.buildDirectory": "/build",
        "extensions.ignoreRecommendations": true
      }
    }
  },
  "mounts": [
    "source=fedora41-vol,target=/build,type=volume"
  ]
}


================================================
FILE: .devcontainer/ubuntu20/cmake-tools-kits.json
================================================
[
  {
    "name": "GCC x86_64-linux-gnu",
    "compilers": {
      "C": "gcc",
      "CXX": "g++"
    },
    "isTrusted": true
  }
]


================================================
FILE: .devcontainer/ubuntu20/devcontainer.json
================================================
{
  "name": "ubuntu20",
  "image": "ghcr.io/romange/ubuntu-dev:20",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-vscode.cpptools",
        "ms-vscode.cmake-tools",
        "ms-vscode.cpptools-themes",
        "twxs.cmake"
      ],
      "settings": {
        "cmake.buildDirectory": "/build",
        "extensions.ignoreRecommendations": true
      }
    }
  },
  "mounts": [
    "source=ubuntu20-vol,target=/build,type=volume"
  ],
  "postCreateCommand": ".devcontainer/ubuntu20/post-create.sh ${containerWorkspaceFolder}"
}


================================================
FILE: .devcontainer/ubuntu20/post-create.sh
================================================
#!/bin/bash

containerWorkspaceFolder=$1
git config --global --add safe.directory '*'
mkdir -p /root/.local/share/CMakeTools
cp ${containerWorkspaceFolder}/.devcontainer/ubuntu20/cmake-tools-kits.json /root/.local/share/CMakeTools/


================================================
FILE: .devcontainer/ubuntu20-gcc14/devcontainer.json
================================================
{
  "name": "ubuntu20-gcc14",
  "image": "ghcr.io/romange/ubuntu-dev:20-gcc14",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-vscode.cpptools",
        "ms-vscode.cmake-tools",
        "ms-vscode.cpptools-themes",
        "twxs.cmake",
        "mk12.better-git-line-blame"
      ],
      "settings": {
        "cmake.buildDirectory": "/build",
        "cmake.configureArgs": [
          "-DWITH_AWS=OFF",
          "-DWITH_GCP=OFF",
          "-DWITH_GPERF=OFF"
        ],
        "extensions.ignoreRecommendations": true
      }
    }
  },
  "mounts": [
    "source=ubuntu20-gcc14-vol,target=/build,type=volume"
  ],
  "postCreateCommand": ".devcontainer/ubuntu20/post-create.sh ${containerWorkspaceFolder}"
}


================================================
FILE: .devcontainer/ubuntu22/devcontainer.json
================================================
{
  "name": "ubuntu22",
  "image": "ghcr.io/romange/ubuntu-dev:22",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-vscode.cpptools",
        "ms-vscode.cmake-tools",
        "ms-vscode.cpptools-themes",
        "twxs.cmake"
      ],
      "settings": {
        "cmake.buildDirectory": "/build",
        "extensions.ignoreRecommendations": true
      }
    }
  },
  "mounts": [
    "source=ubuntu22-vol,target=/build,type=volume"
  ],
  "postCreateCommand": ".devcontainer/ubuntu22/post-create.sh ${containerWorkspaceFolder}"
}


================================================
FILE: .devcontainer/ubuntu22/post-create.sh
================================================
#!/bin/bash

containerWorkspaceFolder=$1
git config --global --add safe.directory ${containerWorkspaceFolder}
git config --global --add safe.directory ${containerWorkspaceFolder}/helio
mkdir -p /root/.local/share/CMakeTools


================================================
FILE: .devcontainer/ubuntu24/devcontainer.json
================================================
{
  "name": "ubuntu24",
  "image": "ghcr.io/romange/ubuntu-dev:24",
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-vscode.cpptools",
        "ms-vscode.cmake-tools",
        "ms-vscode.cpptools-themes",
        "twxs.cmake"
      ],
      "settings": {
        "cmake.buildDirectory": "/build",
        "extensions.ignoreRecommendations": true
      }
    }
  },
  "mounts": [
    "source=ubuntu24-vol,target=/build,type=volume"
  ],
  "postCreateCommand": ".devcontainer/ubuntu24/post-create.sh ${containerWorkspaceFolder}"
}


================================================
FILE: .dockerignore
================================================
_deps/*
build-*
tools/packaging/*
.github/*

================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help Dragonfly DB improve
title: ''
labels: 'bug'
assignees: ''

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Insert records using `command`
2. Query records using `command`
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Environment (please complete the following information):**
 - OS: [ubuntu 20.04]
 - Kernel: # Command: `uname -a`
 - Containerized?: [Bare Metal, Docker, Docker Compose, Docker Swarm, Kubernetes, Other]
 - Dragonfly Version: [e.g. 0.3.0]

**Reproducible Code Snippet**
```
# Minimal code snippet to reproduce this bug
```

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true

contact_links:
  - name: Dragonfly DB Discord Channel
    url: https://discord.gg/HsPjXGVH85
    about: Get help! Ask questions, get support, and share ideas.

  - name: GitHub Discussions
    url: https://github.com/dragonflydb/dragonfly/discussions
    about: Ask Questions. Benchmark Questions Belong here.

  - name: Twitter
    url: https://twitter.com/romanger
    about: Follow Roman on Twitter


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for Dragonfly DB
title: ''
labels: 'feature request'
assignees: ''

---
**Did you search GitHub Issues and GitHub Discussions First?**
Many users may find their feature is already being discussed. Help us keep duplicates to a minimum by searching for your feature first to see if it is already in progress.

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
**Commits Must Be Signed and Your PR title must conform to the conventional commit spec**
  * See: https://github.com/dragonflydb/dragonfly/blob/main/CONTRIBUTING.md
  * Please follow the section on `pre-commit hooks`, a linter will validate before you push

  Example PR Title: <type>(<scope>)!: <description>

  * `type` = bug, chore, feat, fix, docs, build, style, refactor, perf, test
  * `!` = OPTIONAL: signals a breaking change
  * `scope` = Optional when `type` is "chore" or "docs"
  * `description` = short description of the change

Examples:

  * chore(examples): Clarify `docker` usage #120
  * docs(readme): Fix Example Links #121
  * feat(ingest)!: Add new ingest #122
  * fix(ingest): Refactor for loop to list comprehension #123
-->


================================================
FILE: .github/actions/builder/action.yml
================================================
name: Build Dragonfly
description: "Build Dragonfly with configurable CMake options"

inputs:
  build-type:
    description: "CMake build type (Debug or Release)"
    required: false
    default: 'Debug'
    type: string
  build-dir:
    description: "Build directory name (relative to workspace root)"
    required: false
    default: 'build'
    type: string
  c-compiler:
    description: "C compiler to use"
    required: false
    default: ''
    type: string
  cxx-compiler:
    description: "C++ compiler to use"
    required: false
    default: ''
    type: string
  cxx-flags:
    description: "C++ compiler flags"
    required: false
    default: '-no-pie'
    type: string
  sanitizers:
    description: "Enable sanitizers (NoSanitizers or Sanitizers)"
    required: false
    default: 'NoSanitizers'
    type: string
  with-aws:
    description: "Build with AWS support"
    required: false
    default: 'ON'
    type: string
  targets:
    description: "Build targets to compile"
    required: false
    default: 'src/all'
    type: string

runs:
  using: "composite"
  steps:
    - name: Configure CMake
      shell: bash
      run: |
        # Set sanitizer flags
        ASAN="OFF"
        USAN="OFF"
        if [ '${{ inputs.sanitizers }}' = 'Sanitizers' ]; then
          echo "Enabling ASAN/USAN"
          ASAN="ON"
          USAN="ON"
        fi

        # Build cmake command array
        CMAKE_CMD=(cmake
          -B "${GITHUB_WORKSPACE}/${{ inputs.build-dir }}"
          -DCMAKE_BUILD_TYPE="${{ inputs.build-type }}"
          -GNinja
        )

        # Add optional compiler flags
        if [ -n "${{ inputs.c-compiler }}" ]; then
          CMAKE_CMD+=(-DCMAKE_C_COMPILER="${{ inputs.c-compiler }}")
        fi
        if [ -n "${{ inputs.cxx-compiler }}" ]; then
          CMAKE_CMD+=(-DCMAKE_CXX_COMPILER="${{ inputs.cxx-compiler }}")
        fi
        if [ -n "${{ inputs.cxx-flags }}" ]; then
          CMAKE_CMD+=(-DCMAKE_CXX_FLAGS="${{ inputs.cxx-flags }}")
        fi

        # Add fixed options
        CMAKE_CMD+=(
          -DPRINT_STACKTRACES_ON_SIGNAL=ON
          -DWITH_AWS="${{ inputs.with-aws }}"
          -DWITH_GCP=OFF
          -DWITH_UNWIND=OFF
          -DWITH_GPERF=OFF
          -DWITH_ASAN="${ASAN}"
          -DWITH_USAN="${USAN}"
        )

        # Execute CMake
        echo "Running: ${CMAKE_CMD[@]}"
        "${CMAKE_CMD[@]}"

    - name: Build
      shell: bash
      run: |
        cd ${GITHUB_WORKSPACE}/${{ inputs.build-dir }}
        echo "Building target: ${{ inputs.targets }}"
        ninja ${{ inputs.targets }}


================================================
FILE: .github/actions/fuzzing/action.yml
================================================
name: Run AFL++ Fuzzing
description: "Run AFL++ fuzzing campaign with configurable parameters"

inputs:
  mode:
    description: "Fuzzing mode: 'smoke' (stop on first crash) or 'long' (collect all crashes)"
    required: true
    type: string
  target:
    description: "Fuzz target: 'resp' or 'memcache'"
    required: false
    default: 'resp'
    type: string
  duration-minutes:
    description: "Fuzzing duration in minutes"
    required: true
    type: string
  run-number:
    description: "GitHub run number for artifact naming"
    required: true
    type: string
  extra-seeds-dir:
    description: "Directory with additional seed files (initial fuzzer inputs) to merge into the corpus"
    required: false
    default: ''
  focus-commands:
    description: "JSON list of command names for the mutator to prefer (~70% selection weight)"
    required: false
    default: ''
  build:
    description: "Build the binary before fuzzing. Set to 'false' when reusing a binary built by a previous action call in the same job — fails if the binary is missing."
    required: false
    default: 'true'

outputs:
  hang_count:
    description: "Number of unique hangs found during fuzzing"
    value: ${{ steps.analyze.outputs.hang_count }}
  crash_count:
    description: "Number of unique crashes found during fuzzing"
    value: ${{ steps.analyze.outputs.crash_count }}

runs:
  using: "composite"
  steps:
    - name: Verify AFL++ installation
      shell: bash
      run: |
        echo "Verifying AFL++ installation..."
        afl-fuzz -h | head -5 || true

        # Verify AFL++ compilers are available
        which afl-clang-fast
        which afl-clang-fast++
        afl-clang-fast --version

    - name: Configure system for fuzzing
      shell: bash
      run: |
        echo "Configuring system for AFL++ fuzzing..."
        afl-system-config || true
        echo core > /proc/sys/kernel/core_pattern || echo "Warning: Could not set core_pattern"
        echo "System configured"

    - name: Build Dragonfly with AFL++
      shell: bash
      run: |
        if [ "${{ inputs.build }}" = "false" ]; then
          if [ ! -f "./build-dbg/dragonfly" ]; then
            echo "::error::build=false but binary not found at ./build-dbg/dragonfly"
            exit 1
          fi
          echo "Skipping build, reusing existing binary"
          ls -lh ./build-dbg/dragonfly
        else
          echo "Building Dragonfly with AFL++ instrumentation..."
          ./helio/blaze.sh -DUSE_AFL:BOOL=ON
          cd ./build-dbg && ninja dragonfly && cd ..
          echo "Build complete"
          ls -lh ./build-dbg/dragonfly
        fi

    - name: Merge targeted seeds
      shell: bash
      if: ${{ inputs.extra-seeds-dir != '' }}
      run: |
        EXTRA_DIR="${{ inputs.extra-seeds-dir }}"
        SEEDS_DIR="fuzz/seeds/${{ inputs.target }}"

        # Copy only seed files, skip metadata like focus_commands.json
        COUNT=$(find "$EXTRA_DIR" -maxdepth 1 -type f ! -name '*.json' 2>/dev/null | wc -l)
        if [ "$COUNT" -gt 0 ]; then
          echo "Merging ${COUNT} targeted seeds into corpus"
          find "$EXTRA_DIR" -maxdepth 1 -type f ! -name '*.json' -exec cp -t "$SEEDS_DIR/" {} +
        else
          echo "No targeted seed files to merge"
        fi

    - name: Run AFL++ fuzzing
      shell: bash
      run: |
        MODE="${{ inputs.mode }}"
        DURATION_MINUTES="${{ inputs.duration-minutes }}"

        echo "Starting AFL++ fuzzing..."
        echo "Configuration:"
        echo "  Target: ${{ inputs.target }}"
        echo "  Mode: ${MODE}"
        echo "  Duration: ${DURATION_MINUTES} minutes"

        cd fuzz
        export BUILD_DIR="${GITHUB_WORKSPACE}/build-dbg"

        # Run fuzzer with timeout
        timeout ${DURATION_MINUTES}m ./run_fuzzer.sh "${{ inputs.target }}" || EXIT_CODE=$?

        # timeout returns 124 if it timed out (expected), 0 if finished naturally
        if [ "${EXIT_CODE:-0}" -eq 124 ]; then
          echo "Fuzzing completed (timeout reached)"
        elif [ "${EXIT_CODE:-0}" -eq 0 ]; then
          echo "Fuzzing completed normally"
        else
          echo "::error::Fuzzer failed with exit code ${EXIT_CODE}"
          exit 1
        fi
      env:
        # Mode-specific environment variables
        AFL_BENCH_UNTIL_CRASH: ${{ inputs.mode == 'smoke' && '1' || '' }}
        AFL_NO_UI: 1
        AFL_AUTORESUME: 1
        AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES: 1
        AFL_TESTCACHE_SIZE: ${{ inputs.mode == 'smoke' && '50' || '500' }}
        AFL_SKIP_CPUFREQ: 1
        AFL_FAST_CAL: ${{ inputs.mode == 'long' && '1' || '' }}
        AFL_PERSISTENT_RECORD: 1000
        AFL_CUSTOM_MUTATOR_ONLY: 1
        FUZZ_FOCUS_COMMANDS: ${{ inputs.focus-commands }}

    - name: Analyze fuzzing results
      shell: bash
      if: always()
      id: analyze
      run: |
        echo "Analyzing fuzzing results..."

        TARGET="${{ inputs.target }}"
        CRASHES_DIR="fuzz/artifacts/${TARGET}/default/crashes"
        HANGS_DIR="fuzz/artifacts/${TARGET}/default/hangs"
        QUEUE_DIR="fuzz/artifacts/${TARGET}/default/queue"

        # Count results
        CRASH_COUNT=0
        HANG_COUNT=0
        CORPUS_SIZE=0

        if [ -d "$CRASHES_DIR" ]; then
          CRASH_COUNT=$(find "$CRASHES_DIR" -maxdepth 1 -type f -name 'id:*' 2>/dev/null | wc -l)
        fi

        if [ -d "$HANGS_DIR" ]; then
          HANG_COUNT=$(find "$HANGS_DIR" -maxdepth 1 -type f -name 'id:*' ! -name 'RECORD:*' 2>/dev/null | wc -l)
        fi

        if [ -d "$QUEUE_DIR" ]; then
          CORPUS_SIZE=$(find "$QUEUE_DIR" -type f ! -name ".state" 2>/dev/null | wc -l)
        fi

        echo "Fuzzing Results:"
        echo "   Crashes: $CRASH_COUNT"
        echo "   Hangs: $HANG_COUNT"
        echo "   Corpus size: $CORPUS_SIZE"

        # Show statistics for long mode
        if [ "${{ inputs.mode }}" = "long" ]; then
          STATS_FILE="fuzz/artifacts/${TARGET}/default/fuzzer_stats"
          if [ -f "$STATS_FILE" ]; then
            echo ""
            echo "Key Statistics:"
            grep -E "execs_done|execs_per_sec|paths_total|corpus_count|unique_crashes|unique_hangs|last_crash|last_hang" "$STATS_FILE" || true
          fi
        fi

        echo "hang_count=${HANG_COUNT}" >> "$GITHUB_OUTPUT"
        echo "crash_count=${CRASH_COUNT}" >> "$GITHUB_OUTPUT"

        # Fail the job if crashes or hangs were found
        if [ "$CRASH_COUNT" -gt 0 ]; then
          echo "::error::Found $CRASH_COUNT crash(es)!"
          echo ""
          echo "Crash input files (excluding RECORD):"
          find "$CRASHES_DIR" -maxdepth 1 -name 'id:*' ! -name 'RECORD:*' -type f | sort || true
          exit 1
        fi

        if [ "$HANG_COUNT" -gt 0 ]; then
          echo "::error::Found $HANG_COUNT hang(s)!"
          echo ""
          echo "Hang input files (excluding RECORD):"
          find "$HANGS_DIR" -maxdepth 1 -name 'id:*' ! -name 'RECORD:*' -type f | sort || true
          exit 1
        fi

        if [ "$CORPUS_SIZE" -gt 0 ]; then
          echo "No crashes found - fuzzing test passed!"
        else
          echo "No fuzzing artifacts found (fuzzer may not have started)"
        fi

    - name: Package crash artifacts
      shell: bash
      if: failure() && steps.analyze.outputs.crash_count > 0
      run: |
        CRASHES_DIR="$(pwd)/fuzz/artifacts/${{ inputs.target }}/default/crashes"

        if [ ! -d "$CRASHES_DIR" ] || [ -z "$(ls -A "$CRASHES_DIR" 2>/dev/null)" ]; then
          echo "No crash artifacts to package"
          exit 0
        fi

        echo "Raw crash directory contents:"
        ls -la "$CRASHES_DIR"

        mkdir -p fuzz/packaged

        # Find crash input files (not RECORD files)
        find "$CRASHES_DIR" -maxdepth 1 -name 'id:*' ! -name 'RECORD:*' -type f | while read -r f; do
          CRASH_ID=$(basename "$f" | sed 's/^id:\([0-9]*\),.*/\1/')
          echo "Packaging crash ${CRASH_ID}..."
          if ( cd fuzz && ./package_crash.sh "$CRASH_ID" "$CRASHES_DIR" ); then
            mv "fuzz/crash-${CRASH_ID}.tar.gz" fuzz/packaged/ 2>/dev/null || true
          else
            echo "Warning: failed to package crash ${CRASH_ID}, continuing..."
          fi
        done

        echo "Packaged crashes:"
        ls -lh fuzz/packaged/ 2>/dev/null || echo "  (none)"

    - name: Upload crash artifacts
      if: failure() && steps.analyze.outputs.crash_count > 0
      uses: actions/upload-artifact@v4
      with:
        name: fuzz-${{ inputs.mode }}-${{ inputs.target }}-crashes-${{ inputs.run-number }}
        path: |
          fuzz/packaged/*.tar.gz
          fuzz/artifacts/${{ inputs.target }}/default/fuzzer_stats
        retention-days: 10
        if-no-files-found: ignore

    - name: Package hang artifacts
      shell: bash
      if: failure() && steps.analyze.outputs.hang_count > 0
      run: |
        HANGS_DIR="fuzz/artifacts/${{ inputs.target }}/default/hangs"

        if [ ! -d "$HANGS_DIR" ] || [ -z "$(ls -A "$HANGS_DIR" 2>/dev/null)" ]; then
          echo "No hang artifacts to package"
          exit 0
        fi

        mkdir -p fuzz/packaged_hangs
        tar -czf "fuzz/packaged_hangs/hangs-${{ inputs.target }}.tar.gz" \
          -C "$(dirname "$HANGS_DIR")" hangs/

        echo "Packaged hangs:"
        ls -lh fuzz/packaged_hangs/

    - name: Upload hang artifacts
      if: failure() && steps.analyze.outputs.hang_count > 0
      uses: actions/upload-artifact@v4
      with:
        name: fuzz-${{ inputs.mode }}-${{ inputs.target }}-hangs-${{ inputs.run-number }}
        path: |
          fuzz/packaged_hangs/*.tar.gz
          fuzz/artifacts/${{ inputs.target }}/default/fuzzer_stats
        retention-days: 10
        if-no-files-found: ignore


================================================
FILE: .github/actions/lint-test-chart/action.yml
================================================
name: Lint test chart
description: "Run lint test chart"

runs:
  using: "composite"
  steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Set up Helm
        uses: azure/setup-helm@v4

      - uses: actions/setup-python@v5
        with:
          python-version: "3.9"
          check-latest: true

      - name: Chart Rendering Tests
        shell: bash
        run: |
          go test -v ./contrib/charts/dragonfly/...

      - name: Set up chart-testing
        uses: helm/chart-testing-action@v2.6.1

      - name: Run chart-testing (list-changed)
        id: list-changed
        shell: bash
        run: |
          changed=$(ct list-changed --config .ct.yaml)
          if [[ -n "$changed" ]]; then
            echo "changed=true" >> $GITHUB_OUTPUT
          fi

      - name: Run chart-testing (lint)
        shell: bash
        run: |
          ct \
            lint \
            --config .ct.yaml \
            ${{github.event_name == 'workflow_dispatch' && '--all'}} ;

      - name: Create kind cluster
        uses: helm/kind-action@v1

      - name: Install Dependencies
        shell: bash
        run: |
          curl -sL https://github.com/prometheus-operator/prometheus-operator/releases/download/v0.73.0/bundle.yaml | kubectl create -f -

      - name: Getting cluster ready
        shell: bash
        run: |
          kubectl label nodes chart-testing-control-plane key/node-kind=high-memory

      - name: Run chart-testing (install)
        shell: bash
        run: |
          ct \
            install \
            --config .ct.yaml \
            --debug \
            --helm-extra-set-args "--set=image.repository=ghcr.io/${{ github.repository }},probes=null" \
            ${{github.event_name == 'workflow_dispatch' && '--all'}} ;


================================================
FILE: .github/actions/multi-registry-docker-login/action.yml
================================================
name: 'Multi-Registry Docker Login'
description: 'Authenticate with both GHCR and Google Artifact Registry'
inputs:
  GITHUB_TOKEN:
    description: 'GitHub token for GHCR'
    required: true
  GCP_SA_KEY:
    description: 'Google Service Account JSON key'
    required: true

runs:
  using: "composite"
  steps:
    - name: Login to GHCR
      uses: docker/login-action@v3
      with:
        registry: ghcr.io
        username: ${{ github.repository_owner }}
        password: ${{ inputs.GITHUB_TOKEN }}

    - name: Login to Google Artifact Registry
      uses: docker/login-action@v3
      with:
        registry: us-central1-docker.pkg.dev
        username: _json_key
        password: ${{ inputs.GCP_SA_KEY }}


================================================
FILE: .github/actions/regression-tests/action.yml
================================================
name: Regression Tests
description: "Run regression tests"

inputs:
  dfly-executable:
    required: true
    type: string
  gspace-secret:
    required: false
    type: string
  run-only-on-ubuntu-latest:
    # 'true' or 'false' cause boolean
    # is not supported in composite actions
    required: true
    type: string
  build-folder-name:
    required: true
    type: string
  filter:
    required: false
    type: string
  aws-access-key-id:
    required: false
    type: string
    description: "AWS access key ID (optional if using OIDC - credentials set by workflow)"
  aws-secret-access-key:
    required: false
    type: string
    description: "AWS secret access key (optional if using OIDC - credentials set by workflow)"
  s3-bucket:
    required: true
    type: string
  epoll:
    required: false
    type: string

runs:
  using: "composite"
  # bring back timeouts once composite actions start supporting them
  # timeout-minutes: 20
  steps:
    - name: Sync valkey-search tests
      uses: ./.github/actions/sync-valkey-tests

    - name: Free disk space
      if: contains(runner.labels, 'self-hosted') == false
      shell: bash
      run: |
        echo "===================Before freeing up space ============================================"
        df -h
        rm -rf /hostroot/usr/share/dotnet
        rm -rf /hostroot/usr/local/share/boost
        rm -rf /hostroot/usr/local/lib/android
        rm -rf /hostroot/opt/ghc
        echo "===================After freeing up space ============================================"
        df -h

    - name: Install Python test requirements
      shell: bash
      run: |
        cd ${GITHUB_WORKSPACE}/tests
        # https://peps.python.org/pep-0668/#keep-the-marker-file-in-container-images
        if compgen -G '/usr/lib/python3.*/EXTERNALLY-MANAGED' > /dev/null; then
          pip3 install --break-system-packages -r dragonfly/requirements.txt
        else
          pip3 install -r dragonfly/requirements.txt
        fi

    - name: Run S3 snapshot tests with MinIO
      if: inputs.s3-bucket != ''
      shell: bash
      run: |
        echo "=== Running S3 snapshot tests with local MinIO ==="
        cd ${GITHUB_WORKSPACE}/tests

        export DRAGONFLY_PATH="${GITHUB_WORKSPACE}/${{inputs.build-folder-name}}/${{inputs.dfly-executable}}"

        # MinIO binary is downloaded and started by conftest.py when MINIO_S3_ENDPOINT is set
        MINIO_S3_ENDPOINT=http://localhost:9000 timeout 10m pytest -k "s3" --timeout=300 --color=yes dragonfly/snapshot_test.py --log-cli-level=INFO -v

    - name: Run PyTests
      id: main
      shell: bash
      run: |
        ls -l ${GITHUB_WORKSPACE}/
        cd ${GITHUB_WORKSPACE}/tests
        echo "Current commit is ${{github.sha}}"
        # used by PyTests
        export DRAGONFLY_PATH="${GITHUB_WORKSPACE}/${{inputs.build-folder-name}}/${{inputs.dfly-executable}}"
        export ROOT_DIR="${GITHUB_WORKSPACE}/tests/dragonfly/valkey_search"
        export UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 # to crash on errors
        export FILTER="${{inputs.filter}}"

        # Exclude large tests unless explicitly requested
        if [[ "$FILTER" == "large" ]]; then
          : # keep as-is, run only large tests
        elif [[ -n "$FILTER" ]]; then
          FILTER="(not large) and ($FILTER)"
        else
          FILTER="not large"
        fi

        if [[ "${{inputs.epoll}}" == 'epoll' ]]; then
          FILTER="$FILTER and not exclude_epoll"
          # Run only replication tests with epoll
          timeout 80m pytest -m "$FILTER" --durations=10 --timeout=300 --color=yes --json-report --json-report-file=report.json dragonfly --df force_epoll=true --log-cli-level=INFO || code=$?
        else
          # Run only replication tests with iouring
          timeout 80m pytest -m "$FILTER" --durations=10 --timeout=300 --color=yes --json-report --json-report-file=report.json dragonfly --log-cli-level=INFO || code=$?
        fi

        # timeout returns 124 if we exceeded the timeout duration
        if [[ $code -eq 124 ]]; then
          # Add an extra new line here because when tests timeout the first line below continues from the test failure name
          echo "\n"
          echo "🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑"
          echo "🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 TESTS TIMEDOUT 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑"
          echo "🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑"
          # Copy the last log file because we timedout and pytest did not copy it over
          # the /tmp/failed/ folder
          cat /tmp/last_test_log_dir.txt | xargs -I {} mv {}/ /tmp/failed/
          exit 1
        fi

        # when a test fails in pytest it returns 1 but there are other return codes as well so we just check if the code is non zero
        if [[ $code -ne 0 ]]; then
          exit 1
        fi
      env:
        # Add environment variables to enable the S3 snapshot test.
        # AWS credentials: if inputs provided, use them; otherwise rely on workflow OIDC auth
        DRAGONFLY_S3_BUCKET: ${{ inputs.s3-bucket }}
        AWS_ACCESS_KEY_ID: ${{ inputs.aws-access-key-id || env.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ inputs.aws-secret-access-key || env.AWS_SECRET_ACCESS_KEY }}
        AWS_SESSION_TOKEN: ${{ env.AWS_SESSION_TOKEN }}
        AWS_REGION: ${{ env.AWS_REGION || 'us-east-1' }}

    - name: Send notification on failure
      if: failure() && github.ref == 'refs/heads/main'
      shell: bash
      run: |
        get_failed_tests() {
          local report_file=$1
          echo $(jq -r '.tests[] | select(.outcome == "failed") | .nodeid' "$report_file")
        }
        cd ${GITHUB_WORKSPACE}/tests
        failed_tests=""
        if [ -f report.json ]; then
          failed_tests=$(get_failed_tests report.json)
        fi

        KIND="iouring"
        if [[ "${{inputs.epoll}}" == 'epoll' ]]; then
          KIND="epoll"
        fi

        job_link="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
        message="Regression $KIND tests failed.\\n The commit is: ${{github.sha}}.\\n $failed_tests \\n Job Link: ${job_link}\\n"

        curl -s \
          -X POST \
          -H 'Content-Type: application/json' \
          '${{ inputs.gspace-secret }}' \
          -d '{"text": "'"${message}"'"}'
    - name: Copy binary on a self hosted runner
      if: failure() && contains(runner.labels, 'self-hosted')
      shell: bash
      run: |
        cd ${GITHUB_WORKSPACE}/build
        timestamp=$(date +%Y-%m-%d_%H:%M:%S)
        mv ./dragonfly /var/crash/dragonfly_${timestamp}


================================================
FILE: .github/actions/repeat/action.yml
================================================
name: Run Tests On Repeat
description: "Repeat specific tests"

inputs:
  dfly-executable:
    required: true
    type: string
  run-only-on-ubuntu-latest:
    required: true
    type: string
  build-folder-name:
    required: true
    type: string
  expression:
    required: false
    type: string
  aws-access-key-id:
    required: false
    type: string
    description: "AWS access key ID (optional if using OIDC - credentials set by workflow)"
  aws-secret-access-key:
    required: false
    type: string
    description: "AWS secret access key (optional if using OIDC - credentials set by workflow)"
  s3-bucket:
    required: true
    type: string
  count:
    required: true
    type: number
  timeout:
    required: true
    type: string
  epoll:
    required: true
    type: string
  vmodule_expression:
    required: true
    type: string

runs:
  using: "composite"
  steps:
    - name: Repeat pytests
      id: main
      shell: bash
      run: |
        ls -l ${GITHUB_WORKSPACE}/
        cd ${GITHUB_WORKSPACE}/tests
        echo "Current commit is ${{github.sha}}"
        pip3 install -r dragonfly/requirements.txt
        # used by PyTests
        export DRAGONFLY_PATH="${GITHUB_WORKSPACE}/${{inputs.build-folder-name}}/${{inputs.dfly-executable}}"
        export UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 # to crash on errors
        if [[ "${{ inputs.epoll }}" == "epoll" ]]; then
          FORCE_EPOLL="--df force_epoll=true"
        else
          FORCE_EPOLL=""
        fi
        if [[ $"{{ inputs.vmodule_expression }}" != "" ]]; then
          VMOD="--df vmodule=${{ inputs.vmodule_expression }}"
        else
          VMOD=""
        fi
        echo Running command: timeout ${{ inputs.timeout }} pytest ${{ inputs.expression }} --drop-data-after-each-test ${FORCE_EPOLL} ${VMOD} --color=yes --json-report --json-report-file=report.json --log-cli-level=DEBUG --count=${{ inputs.count }}
        timeout ${{ inputs.timeout }} pytest ${{ inputs.expression }} --drop-data-after-each-test ${FORCE_EPOLL} ${VMOD} --color=yes --json-report --json-report-file=report.json --log-cli-level=DEBUG --count=${{ inputs.count }} || code=$?
        # timeout returns 124 if we exceeded the timeout duration
        if [[ $code -eq 124 ]]; then
          # Add an extra new line here because when tests timeout the first line below continues from the test failure name
          echo "\n"
          echo "🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑"
          echo "🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 TESTS TIMEDOUT 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑"
          echo "🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑"
          # Copy the last log file because we timedout and pytest did not copy it over
          # the /tmp/failed/ folder
          cat /tmp/last_test_log_dir.txt | xargs -I {} mv {}/ /tmp/failed/
          exit 1
        fi

        # when a test fails in pytest it returns 1 but there are other return codes as well so we just check if the code is non zero
        if [[ $code -ne 0 ]]; then
          exit 1
        fi
      env:
        # Add environment variables to enable the S3 snapshot test.
        # AWS credentials: if inputs provided, use them; otherwise rely on workflow OIDC auth
        DRAGONFLY_S3_BUCKET: ${{ inputs.s3-bucket }}
        AWS_ACCESS_KEY_ID: ${{ inputs.aws-access-key-id || env.AWS_ACCESS_KEY_ID }}
        AWS_SECRET_ACCESS_KEY: ${{ inputs.aws-secret-access-key || env.AWS_SECRET_ACCESS_KEY }}
        AWS_SESSION_TOKEN: ${{ env.AWS_SESSION_TOKEN }}
        AWS_REGION: ${{ env.AWS_REGION || 'us-east-1' }}


================================================
FILE: .github/actions/sync-valkey-tests/action.yml
================================================
name: Sync valkey-search tests
description: "Synchronizes valkey-search tests using a fixed revision"

runs:
  using: composite
  steps:
    - name: Sync valkey-search tests
      shell: bash
      run: |
        cd ${GITHUB_WORKSPACE}/tests/dragonfly/valkey_search
        # main branch revision
        ./sync-valkey-search-tests.sh 90124dc91756b24cb2e58e5c4eea5b8d53004ea6


================================================
FILE: .github/actions/test-docker/action.yml
================================================
name: Test Docker Image

inputs:
  image_id:
    required: true
    type: string
  name:
    required: true
    type: string

runs:
  using: "composite"
  steps:
    - name: Test Image
      shell: bash
      run: |
        echo "Testing ${{ inputs.name }} image"
        docker pull ${{inputs.image_id}}
        docker image inspect ${{inputs.image_id}}

        # docker run with port-forwarding
        docker run  --name test -d -p 6379:6379 ${{inputs.image_id}}
        until [ "`docker inspect -f {{.State.Health.Status}} test`"=="healthy" ]; do
          sleep 0.1;
        done;


================================================
FILE: .github/bullmq-skipped-tests.txt
================================================
# BullMQ tests excluded from CI runs against Dragonfly
#
# Format: one pattern per line (used as JS regex in mocha --grep --invert)
# Categories:
#   DRAGONFLY_BUG  - Dragonfly does not support this behaviour yet
#   FLAKY          - Test has race conditions / timing issues unrelated to Dragonfly

# ── DRAGONFLY BUG ────────────────────────────────────────────────────────────
# BullMQ Lua scripts access keys that are not declared in KEYS[].
# Dragonfly enforces strict Lua key declaration; allow-undeclared-keys causes
# global transaction mode and breaks other tests.
handle errors.*for flows
Flows - addBulk.*handle errors

# Job.finished: job hash persists after removeOnComplete instead of being deleted.
rejects with missing key for job message

# ── FLAKY ─────────────────────────────────────────────────────────────────────
# deduplication key removal races with the 'deduplicated' QueueEvents listener.
# XREAD from '$' is noted as unstable in upstream BullMQ code.
removes deduplication key

# QueueEvents 'waiting' event: XREAD from '$' is unstable on CI.
# Upstream comment: "additional delay since XREAD from '$' is unstable"
emits waiting when a job has been added

# getWorkers: race between worker 'ready' event and assertion.
gets all workers for this queue only

# getWorkers (shared connection): upstream test file has comment
# "Test is very flaky on CI, so we skip it for now."
gets all workers for a given queue

# Job Scheduler monthly repeat: sinon fake-timer races with real Redis async ops.
# The worker loop does not advance in time before the 200 s timeout expires.
should repeat 7:th day every month at 9:25


================================================
FILE: .github/copilot-instructions.md
================================================
---
description: 'Code review guidelines for GitHub copilot in this project'
applyTo: '**'
excludeAgent: ["coding-agent"]
---

# Code Review Instructions

Keep reviews high-signal and minimal. Only comment on real bugs with high confidence.

## Comment Only When
- The issue is a correctness, security, concurrency, or architecture problem.
- The impact is clear and non-trivial.
- You can point to concrete evidence in the diff (not speculation).

## Avoid
- Style, formatting, naming, or minor performance nits.
- Optional refactors or “nice to have” suggestions.
- Praise, restating the code, or long explanations.
- Duplicate comments for the same root cause.

## Review Style
- Be terse: 1-2 sentences per issue.
- Include file and line references when possible.
- If no issues are found, say “No issues found.”
- Provide concrete suggestions for fixes when possible, or examples to illustrate the problem.


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"

    open-pull-requests-limit: 1
    groups:
      actions:
        patterns:
          - "*"


  - package-ecosystem: "gomod"
    directories:
      - "/contrib/charts/dragonfly"
      - "/tools/replay"
    schedule:
      interval: "weekly"

    open-pull-requests-limit: 1
    #uncomment it to group dependency updates
    #groups:
      #go-mod:
        #patterns:
          #- "*"
    ignore:
      # Disable all updates except security updates
      #remove an item from ignore list to get dependency updates of that kind
      - dependency-name: "*"
        update-types:
          - "version-update:semver-major"
          - "version-update:semver-minor"
          - "version-update:semver-patch"



  - package-ecosystem: "pip"
    directories:
      - "/tests/dragonfly"
      - "/tools"
    schedule:
      interval: "weekly"

    #uncomment it to group dependency updates
    #groups:
      #py-dep:
        #patterns:
          #- "*"
    ignore:
      # Disable all updates except security updates
      #remove an item from ignore list to get dependency updates of that kind
      - dependency-name: "*"
        update-types:
          - "version-update:semver-major"
          - "version-update:semver-minor"
          - "version-update:semver-patch"


================================================
FILE: .github/instructions/code-review.instructions.md
================================================
---
description: 'Code review instructions for Dragonfly'
applyTo: '**'
excludeAgent: ["coding-agent"]
---

# Dragonfly Code Review Instructions

Dragonfly is a high-performance, Redis-compatible in-memory data store written in C++20 with a unique shared-nothing, fiber-based architecture. Code reviews must prioritize correctness, security, and architectural compliance specific to this threading model.

## Review Priorities

### 🔴 CRITICAL (Block merge immediately)

**Threading Model Violations** (causes deadlocks/crashes):
- ❌ **NEVER** use `std::thread`, `std::mutex`, `std::condition_variable`, or standard library threading primitives
- ✅ **ALWAYS** use fiber-aware equivalents: `util::fb2::Mutex`, `util::fb2::Fiber`, `util::fb2::CondVar` from `util/fibers/`

**Architecture Violations**:
- ❌ Cross-shard data access without proper synchronization
- ✅ Per-shard operations only (see `src/server/db_slice.cc` for patterns)

**Security Vulnerabilities**:
- Authentication/authorization bypass in ACL code (`src/server/acl/`)
- Exposed secrets, credentials in code or logs
- Buffer overflows, use-after-free, memory safety issues

**Correctness Issues**:
- Race conditions in fiber scheduling
- Logic errors in transaction handling (`src/server/transaction.cc`)
- Data corruption risks in DashTable operations (`src/core/dash.h`)

### 🟡 IMPORTANT (Requires discussion)

**Code Quality**:
- Missing error handling (should return `OpStatus` from `facade/op_status.h`)
- Obvious memory leaks (check ASAN reports)
- Performance bottlenecks in hot paths (unnecessary allocations, N+1 patterns)

**Test Coverage**:
- New features without tests (both C++ unit tests and Python integration tests)
- Changes to critical paths (transactions, replication, cluster) without test coverage
- Modified code that fails existing tests

**Style Violations** (severe only):
- Not following naming conventions: `snake_case` variables, `PascalCase` functions, `kPascalCase` constants
- Code that won't pass pre-commit hooks (clang-format, 100 char limit)

### 🟢 SUGGESTIONS (Non-blocking, comment only if obvious)

- Over-engineering: adding abstraction layers, feature flags, or configurability not requested
- Missing comments on complex fiber synchronization logic
- Premature optimization without profiling

## Dragonfly-Specific Patterns

### ✅ DO: Correct Patterns

**Threading & Synchronization**:
```cpp
// ✅ CORRECT: Fiber-aware mutex
util::fb2::Mutex mutex_;
std::lock_guard<util::fb2::Mutex> lock(mutex_);

// ✅ CORRECT: Fiber-aware operations
util::fb2::Fiber fb = util::fb2::Fiber("name", [&] { /* work */ });
```


**Per-Shard Design**:
```cpp
// ✅ CORRECT: Operate on shard-local data
void DbSlice::SomeOperation() {
  // Access only this shard's data
  auto& db_slice = cntx->ns->GetCurrentDbSlice();
}
```

### ❌ DON'T: Anti-Patterns

**Threading**:
```cpp
// ❌ WRONG: Standard library threading (causes deadlocks!)
std::mutex mutex_;
std::thread worker;
std::condition_variable cv_;
```

**Global State**:
```cpp
// ❌ WRONG: Global mutable state (breaks shared-nothing architecture)
static std::unordered_map<string, int> global_cache;
```

**Build Commands**:
- ❌ Don't suggest `./tools/docker/build.sh` or `make` for incremental builds
- ✅ Use `cd build-dbg && ninja <target>` instead

## Code Review Checklist

When reviewing Dragonfly code, verify:

1. **Architecture Compliance**:
   - [ ] No standard library threading primitives (`std::thread`, `std::mutex`)
   - [ ] No global mutable state
   - [ ] Fiber-aware synchronization used correctly
   - [ ] Follows per-shard, shared-nothing design

2. **Security**:
   - [ ] No OWASP vulnerabilities (injection, XSS, auth bypass)
   - [ ] No hardcoded secrets or credentials
   - [ ] Input validation on command arguments
   - [ ] Safe memory operations (no buffer overflows)

3. **Testing**:
   - [ ] New functionality has test coverage
   - [ ] Tests build and pass: `cd build-dbg && ninja <test> && ./<test>`
   - [ ] No test regressions

4. **Style & Formatting**:
   - [ ] Follows naming conventions (snake_case vars, PascalCase functions)
   - [ ] Will pass pre-commit checks (clang-format, 100 char limit)
   - [ ] Code compiles without warnings (CI uses `-Werror`)

5. **Helio Submodule**:
   - [ ] No direct edits to `helio/` directory (it's a git submodule)

## Common False Positives to Ignore

These are **NOT** issues in Dragonfly's design. Do not comment on:

1. **Single-threaded-looking code**: Per-shard operations intentionally avoid locks
2. **Custom allocators**: mimalloc is used intentionally for performance
3. **Manual memory management**: Required for performance-critical paths
4. **Complex template metaprogramming**: DashTable uses advanced C++20 features
5. **Missing const**: Not always applicable in high-performance code

## Review Style Guidelines

1. **Be specific**: Reference file:line, explain WHY it's wrong
2. **Show examples**: Demonstrate the correct pattern with code
3. **Prioritize**: Security and correctness over style
4. **Link to docs**: Reference `docs/df-share-nothing.md`, `docs/transaction.md`, etc.
5. **Be concise**: Dragonfly team values focused, actionable feedback

## Example Review Comments

**❌ BAD - Too noisy**:
> "Consider using auto here for type inference"

**✅ GOOD - Actionable and specific**:
> "🔴 CRITICAL: Line 42 uses `std::mutex`. This will cause fiber deadlocks. Replace with `util::fb2::Mutex` from helio/util/fibers/. See src/server/set_family.cc:123 for correct pattern."

**✅ GOOD - Security focused**:
> "🔴 SECURITY: Line 58 doesn't validate `user_input` before passing to eval(). Vulnerable to command injection. Add validation or use SafeEval()."

**✅ GOOD - Architecture violation**:
> "🟡 ARCHITECTURE: Line 91 accesses global `cache_map`. Dragonfly uses shared-nothing design - each shard must have its own cache. See docs/df-share-nothing.md"

---

**Key Files Reference**: See AGENTS.md for complete codebase structure, build commands, and testing procedures.


================================================
FILE: .github/workflows/benchmark.yml
================================================
name: benchmark-tests

on:
  schedule:
    - cron: "0 9 * * *" # run at 6 AM UTC
  workflow_dispatch:

permissions:
  contents: read

jobs:
  benchmark:
    if: github.repository == 'dragonflydb/dragonfly'
    strategy:
      matrix:
        config:
          - operator:
              apiVersion: "dragonflydb.io/v1alpha1"
              kind: "Dragonfly"
              metadata:
                labels:
                  app.kubernetes.io/name: "dragonfly"
                  app.kubernetes.io/instance: "dragonfly-sample"
                  app.kubernetes.io/part-of: "dragonfly-operator"
                  app.kubernetes.io/managed-by: "kustomize"
                  app.kubernetes.io/created-by: "dragonfly-operator"
                name: "dragonfly-sample"
              spec:
                image: "ghcr.io/dragonflydb/dragonfly:latest"
                args: ["--cache_mode"]
                replicas: 2
                resources:
                  requests:
                    cpu: "2"
                    memory: "2000Mi"
                  limits:
                    cpu: "2"
                    memory: "2000Mi"

    runs-on: ubuntu-latest

    container:
      image: ghcr.io/romange/benchmark-dev:latest
      options: --security-opt seccomp=unconfined

    permissions:
      id-token: write

    steps:
      - name: Setup namespace name
        id: setup
        run: echo "namespace=benchmark-$(date +"%Y-%m-%d-%s")" >> $GITHUB_OUTPUT

      - uses: actions/checkout@v6
        with:
          submodules: true

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v5
        with:
          role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
          aws-region: ${{ vars.AWS_REGION }}

      - name: Update kube config
        run: aws eks update-kubeconfig --name "$EKS_CLUSTER_NAME" --region "$AWS_REGION"
        env:
          AWS_REGION: ${{ vars.AWS_REGION }}
          EKS_CLUSTER_NAME: dev

      - name: Scale up
        run: |
          set -x
          aws autoscaling set-desired-capacity --auto-scaling-group-name "$AUTOSCALING_GROUP" --desired-capacity "$DESIRED_CAPACITY"
        env:
          AUTOSCALING_GROUP: ${{ vars.DEV_EKS_AS_GROUP }}
          DESIRED_CAPACITY: 1

      - name: Install the CRD and Operator
        run: |
          # Install the CRD and Operator
          kubectl apply -f https://raw.githubusercontent.com/dragonflydb/dragonfly-operator/main/manifests/dragonfly-operator.yaml

      - name: Apply Configuration
        run: |
          set -x
          kubectl create namespace ${{ steps.setup.outputs.namespace }} || true
          echo '${{ toJson(matrix.config.operator) }}' | kubectl apply -n ${{ steps.setup.outputs.namespace }} -f -

      - name: Wait For Service
        run: |
          set -x
          kubectl wait -n ${{ steps.setup.outputs.namespace }} dragonfly/dragonfly-sample --for=jsonpath='{.status.phase}'=ready --timeout=180s
          kubectl wait -n ${{ steps.setup.outputs.namespace }} pods --selector app=dragonfly-sample --for condition=Ready --timeout=120s
          kubectl describe -n ${{ steps.setup.outputs.namespace }} pod dragonfly-sample-0

      - name: Run Memtier Benchmark
        shell: bash
        run: |
          kubectl apply -n ${{ steps.setup.outputs.namespace }} -f tools/benchmark/k8s-benchmark-job.yaml

      - name: Version upgrade
        shell: bash
        run: |
          # benchmark is running, wait for 30 seconds before version upgrade
          sleep 30
          kubectl patch dragonfly dragonfly-sample -n ${{ steps.setup.outputs.namespace }}  --type merge -p '{"spec":{"image":"ghcr.io/dragonflydb/dragonfly-weekly:latest"}}'

      - name: Wait for Memtier Benchmark fail
        shell: bash
        run: |
          # Memtier benchmark run will fail at some point because old master shutdown on version upgrade
          kubectl wait --for=condition=failed --timeout=120s -n ${{ steps.setup.outputs.namespace }} jobs/memtier-benchmark 2>/dev/null
          kubectl logs -n ${{ steps.setup.outputs.namespace }} -f jobs/memtier-benchmark
          kubectl delete -n ${{ steps.setup.outputs.namespace }} jobs/memtier-benchmark

      - name: Run Memtier Benchmark again
        shell: bash
        run: |
          kubectl apply -n ${{ steps.setup.outputs.namespace }} -f tools/benchmark/k8s-benchmark-job.yaml

          while true; do
            if kubectl wait --for=condition=complete --timeout=0 -n ${{ steps.setup.outputs.namespace }} jobs/memtier-benchmark 2>/dev/null; then
              job_result=0
              break
            fi

            if kubectl wait --for=condition=failed --timeout=0 -n ${{ steps.setup.outputs.namespace }} jobs/memtier-benchmark 2>/dev/null; then
              job_result=1
              break
            fi

            sleep 3
          done

          kubectl logs -n ${{ steps.setup.outputs.namespace }} -f jobs/memtier-benchmark
          if [[ $job_result -eq 1 ]]; then
              exit 1
          fi

      - name: Server checks
        run: |
          nohup kubectl port-forward -n ${{ steps.setup.outputs.namespace }} service/dragonfly-sample 6379:6379 &
          pip install -r tools/requirements.txt
          python3 tools/benchmark/post_run_checks.py

      - name: Get Dragonfly logs
        uses: nick-fields/retry@v3
        if: always()
        with:
          timeout_minutes: 1
          max_attempts: 3
          command: |
            kubectl logs -n ${{ steps.setup.outputs.namespace }} dragonfly-sample-0

      - name: Get Dragonfly replica logs
        uses: nick-fields/retry@v3
        if: always()
        with:
          timeout_minutes: 1
          max_attempts: 3
          command: |
            kubectl logs -n ${{ steps.setup.outputs.namespace }} dragonfly-sample-1

      - name: Describe dragonflydb object
        uses: nick-fields/retry@v3
        if: always()
        with:
          timeout_minutes: 1
          max_attempts: 3
          command: |
            kubectl describe dragonflies.dragonflydb.io -n ${{ steps.setup.outputs.namespace }} dragonfly-sample

      - name: Scale down to zero
        if: always()
        run: |
          set -x
          aws autoscaling set-desired-capacity --auto-scaling-group-name "$AUTOSCALING_GROUP" --desired-capacity 0
        env:
          AUTOSCALING_GROUP: ${{ vars.DEV_EKS_AS_GROUP }}

      - name: Cleanup
        if: always()
        run: |
          set -x
          kubectl delete namespace ${{ steps.setup.outputs.namespace }}
          kubectl delete namespace dragonfly-operator-system

      - name: Send notification on failure
        if: failure() && github.ref == 'refs/heads/main'
        shell: bash
        run: |
          job_link="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
          message="Benchmark tests failed.\\n Job Link: ${job_link}\\n"

          curl -s \
            -X POST \
            -H 'Content-Type: application/json' \
            '${{ secrets.GSPACES_BOT_DF_BUILD }}' \
            -d '{"text": "'"${message}"'"}'


================================================
FILE: .github/workflows/bullmq-tests.yml
================================================
name: bullmq-tests

on:
  schedule:
    - cron: '0 7 * * *' # run at 7 AM daily
  workflow_dispatch:

permissions:
  contents: read

env:
  NODE_VERSION: "22.12.0"

jobs:
  build:
    if: github.repository == 'dragonflydb/dragonfly'
    runs-on: ubuntu-latest
    name: Build
    timeout-minutes: 60

    container:
      image: ghcr.io/romange/ubuntu-dev:20-gcc14
      options: --security-opt seccomp=unconfined
      credentials:
        username: ${{ github.repository_owner }}
        password: ${{ secrets.GITHUB_TOKEN }}

    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true

      - name: Build Dragonfly
        run: |
          cmake -B ${GITHUB_WORKSPACE}/build \
            -DCMAKE_BUILD_TYPE=Release \
            -DWITH_AWS=OFF \
            -DWITH_GCP=OFF \
            -DWITH_UNWIND=OFF \
            -DWITH_GPERF=OFF \
            -GNinja \
            -L
          cd ${GITHUB_WORKSPACE}/build && ninja dragonfly

      - name: Install Node.js
        run: |
          wget -q https://unofficial-builds.nodejs.org/download/release/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64-glibc-217.tar.xz
          tar -xf node-v${NODE_VERSION}-linux-x64-glibc-217.tar.xz
          cp -r node-v${NODE_VERSION}-linux-x64-glibc-217/* /usr/local/
          apt-get update && apt-get install -y jq redis-tools
          npm install -g yarn
          node --version
          yarn --version

      - name: Start Dragonfly
        run: |
          ${GITHUB_WORKSPACE}/build/dragonfly \
            --alsologtostderr \
            --cluster_mode=emulated \
            --lock_on_hashtags \
            --dbfilename= \
            --port 6379 &
          timeout 15s bash -c 'until redis-cli -p 6379 PING 2>/dev/null | grep -q PONG; do sleep 0.1; done'

      - name: Build BullMQ
        run: |
          cd ${GITHUB_WORKSPACE}
          git clone https://github.com/dragonflydb/bullmq
          cd bullmq
          yarn install
          yarn build

      - name: Run BullMQ tests
        run: |
          cd ${GITHUB_WORKSPACE}/bullmq
          SKIP_PATTERN=$(grep -v '^#' ${GITHUB_WORKSPACE}/.github/bullmq-skipped-tests.txt | grep -v '^[[:space:]]*$' | paste -sd '|' || true)
          if [ -n "${SKIP_PATTERN}" ]; then
            BULLMQ_TEST_PREFIX={b} yarn test --grep "${SKIP_PATTERN}" --invert
          else
            BULLMQ_TEST_PREFIX={b} yarn test
          fi

      - name: Upload logs on failure
        if: failure()
        uses: actions/upload-artifact@v6
        with:
          name: unit_logs
          path: /tmp/dragonfly.*

      - name: Send notification on failure
        if: failure() && github.ref == 'refs/heads/main'
        run: |
          job_link="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
          message="BullMQ tests failed.\\n Commit: ${{github.sha}}\\n Job Link: ${job_link}\\n"

          curl -s \
            -X POST \
            -H 'Content-Type: application/json' \
            '${{ secrets.GSPACES_BOT_DF_BUILD }}' \
            -d '{"text": "'"${message}"'"}'


================================================
FILE: .github/workflows/ci.yml
================================================
name: ci-tests

on:
  # push:
  # branches: [ main ]
  pull_request:
    branches: [main]
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  pre-commit:
    if: github.event_name == 'pull_request'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0
      - uses: actions/setup-python@v6
        with:
          python-version: '3.12'
          cache: 'pip'
      - uses: actions/cache@v4
        with:
          path: ~/.cache/pre-commit
          key: pre-commit-${{ runner.os }}-${{ hashFiles('.pre-commit-config.yaml') }}
      - uses: pre-commit/action@v3.0.1
        with:
          extra_args: >-
            --show-diff-on-failure --color=always
            --from-ref ${{ github.event.pull_request.base.sha }}
            --to-ref ${{ github.event.pull_request.head.sha }}
  build:
    strategy:
      matrix:
        # Test of these containers
        container: ["ubuntu-dev:24", "alpine-dev:latest"]
        build-type: [Debug, Release]
        compiler: [{ cxx: g++, c: gcc }]
        # -no-pie to disable address randomization so we could symbolize stacktraces
        cxx_flags: ["-Werror -no-pie"]
        sanitizers: ["NoSanitizers"]
        include:
          - container: "alpine-dev:latest"
            build-type: Debug
            compiler: { cxx: clang++, c: clang }
            cxx_flags: ""
            sanitizers: "NoSanitizers"
          - container: "ubuntu-dev:24"
            build-type: Debug
            compiler: { cxx: clang++, c: clang }
            # https://maskray.me/blog/2023-08-25-clang-wunused-command-line-argument (search for compiler-rt)
            cxx_flags: "-Wno-error=unused-command-line-argument"
            sanitizers: "Sanitizers"

    runs-on: ubuntu-latest
    container:
      image: ghcr.io/romange/${{ matrix.container }}
      # Seems that docker by default prohibits running iouring syscalls
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
      volumes:
        - /:/hostroot
        - /mnt:/mnt
      credentials:
        username: ${{ github.repository_owner }}
        password: ${{ secrets.GITHUB_TOKEN }}

    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true

      - name: Prepare Environment
        run: |
          uname -a
          cmake --version
          mkdir -p ${GITHUB_WORKSPACE}/build
          mount

          echo "===================Before freeing up space ============================================"
          df -h
          rm -rf /hostroot/usr/share/dotnet
          rm -rf /hostroot/usr/local/share/boost
          rm -rf /hostroot/usr/local/lib/android
          rm -rf /hostroot/opt/ghc
          echo "===================After freeing up space ============================================"
          df -h
          touch /mnt/foo
          ls -la /mnt/foo

      - name: System diagnostics
        run: |
          echo "ulimit is"
          ulimit -s
          echo "-----------------------------"
          echo "disk space is:"
          df -h
          echo "-----------------------------"

      - name: Build Dragonfly
        uses: ./.github/actions/builder
        with:
          build-type: ${{matrix.build-type}}
          c-compiler: ${{matrix.compiler.c}}
          cxx-compiler: ${{matrix.compiler.cxx}}
          cxx-flags: ${{matrix.cxx_flags}}
          sanitizers: ${{matrix.sanitizers}}
          with-aws: 'OFF'

      - name: PostFail
        if: failure()
        run: |
          echo "disk space is:"
          df -h

      - name: C++ Unit Tests - IoUring
        run: |
          cd ${GITHUB_WORKSPACE}/build
          echo Run ctest -V -L DFLY

          GLOG_alsologtostderr=1 GLOG_vmodule=rdb_load=1,rdb_save=1,snapshot=1,op_manager=1,op_manager_test=1 \
          FLAGS_fiber_safety_margin=4096 timeout 20m ctest -V -L DFLY -E allocation_tracker_test

          # Run allocation tracker test separately without alsologtostderr because it generates a TON of logs.
          FLAGS_fiber_safety_margin=4096 timeout 5m ./allocation_tracker_test

          timeout 5m ./dragonfly_test
          timeout 5m ./json_family_test --jsonpathv2=false
          timeout 5m ./tiered_storage_test --vmodule=db_slice=2 --logtostderr
          timeout 5m ./search_test --use_numeric_range_tree=false
          timeout 5m ./search_family_test --use_numeric_range_tree=false


      - name: C++ Unit Tests - Epoll
        run: |
          cd ${GITHUB_WORKSPACE}/build

          # Create a rule that automatically prints stacktrace upon segfault
          cat > ./init.gdb <<EOF
          catch signal SIGSEGV
          command
          bt
          end
          EOF

          gdb -ix ./init.gdb --batch -ex r --args ./dragonfly_test --force_epoll
          GLOG_alsologtostderr=1 FLAGS_fiber_safety_margin=4096 FLAGS_force_epoll=true GLOG_vmodule=rdb_load=1,rdb_save=1,snapshot=1 \
          timeout 20m ctest -V -L DFLY -E allocation_tracker_test

          FLAGS_fiber_safety_margin=4096 FLAGS_force_epoll=true timeout 5m ./allocation_tracker_test

      - name: C++ Unit Tests - IoUring with cluster mode
        run: |
          cd ${GITHUB_WORKSPACE}/build
          FLAGS_fiber_safety_margin=4096 FLAGS_cluster_mode=emulated timeout 20m ctest -V -L DFLY

      - name: C++ Unit Tests - IoUring with cluster mode and FLAGS_lock_on_hashtags
        run: |
          cd ${GITHUB_WORKSPACE}/build
          FLAGS_fiber_safety_margin=4096 FLAGS_cluster_mode=emulated FLAGS_lock_on_hashtags=true timeout 20m ctest -V -L DFLY

      - name: Upload unit logs on failure
        if: failure()
        uses: actions/upload-artifact@v6
        with:
          name: unit_logs
          path: /tmp/*INFO*

      - name: Run regression tests
        if: matrix.container == 'ubuntu-dev:24' && matrix.sanitizers == 'NoSanitizers'
        uses: ./.github/actions/regression-tests
        with:
          dfly-executable: dragonfly
          run-only-on-ubuntu-latest: true
          build-folder-name: build
          # Non-release build will not run tests marked as opt_only
          # "not empty" string is needed for release build because pytest command can not get empty string for filter
          filter: ${{ matrix.build-type == 'Release' && 'not debug_only' || 'not opt_only' }}

      - name: Upload regression logs on failure
        if: failure()
        uses: actions/upload-artifact@v6
        with:
          name: regression_logs
          path: /tmp/failed/*

  lint-test-chart:
    runs-on: ubuntu-latest
    needs: [build]
    steps:
      - uses: actions/checkout@v6
      - uses: ./.github/actions/lint-test-chart

  large-tests-arm:
    runs-on: CI-LARGE-ARM

    permissions:
      id-token: write
      contents: read

    container:
      image: ghcr.io/romange/ubuntu-dev:24
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
      volumes:
        - /var/crash:/var/crash
        - /:/hostroot
        - /mnt:/mnt

    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true

      - name: Print environment info
        run: |
          cat /proc/cpuinfo
          ulimit -a
          env
          lsblk -l

      - name: Build Dragonfly
        uses: ./.github/actions/builder
        with:
          build-type: Release
          targets: 'dragonfly'

      - name: Authenticate to AWS
        # Runs if it's NOT a PR, OR if the PR originates from the same repository (not a fork)
        if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
        uses: aws-actions/configure-aws-credentials@v5
        with:
          role-to-assume: ${{ secrets.AWS_CI_S3_ROLE_ARN }}
          aws-region: us-east-1

      - name: Run large tests on ARM
        uses: ./.github/actions/regression-tests
        with:
          dfly-executable: dragonfly
          gspace-secret: ${{ secrets.GSPACES_BOT_DF_BUILD }}
          build-folder-name: build
          run-only-on-ubuntu-latest: true
          filter: large
          s3-bucket: ${{ secrets.S3_REGTEST_BUCKET }}

      - name: Upload logs on failure
        if: failure()
        uses: actions/upload-artifact@v6
        with:
          name: large-tests-arm-logs
          path: /tmp/failed/*


================================================
FILE: .github/workflows/copilot-setup-steps.yml
================================================
# Copilot Build Environment Setup Steps
# This file contains steps to configure the Dragonfly build environment
# with AWS, GCP, GPERF, and UNWIND disabled for faster development builds

name: Copilot setup steps

# Automatically run the setup steps when they are changed to allow for easy validation, and
# allow manual testing through the repository's "Actions" tab
on:
  workflow_dispatch:
  push:
    paths:
      - .github/workflows/copilot-setup-steps.yml
  pull_request:
    paths:
      - .github/workflows/copilot-setup-steps.yml

jobs:
  # The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot.
  copilot-setup-steps:
    runs-on: ubuntu-latest
    permissions:
      contents: read

    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true

      - name: Install required system dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y libboost-context-dev

      - name: Configure CMake build (Debug, no AWS/GCP)
        run: ./helio/blaze.sh -DWITH_AWS=OFF -DWITH_GCP=OFF -DWITH_GPERF=OFF

      - name: Install pre-commit
        run: pip3 install pre-commit

# Notes:
# - The build directory will be created at build-dbg/
# - Disabling AWS/GCP significantly speeds up compilation
# - WITH_GPERF=OFF disables Google Performance Tools
# - Use ninja for faster parallel builds


================================================
FILE: .github/workflows/cov.yml
================================================
name: Daily Coverage

on:
    schedule:
      - cron: '0 6 * * *' # run at 6 AM UTC
    workflow_dispatch:

jobs:
  build:
    if: github.repository == 'dragonflydb/dragonfly'
    # The CMake configure and build commands are platform agnostic and should work equally
    # well on Windows or Mac.  You can convert this to a matrix build if you need
    # cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - container: "ubuntu-dev:24"
            build-type: Debug
            compiler: {cxx: g++, c: gcc}
            cxx_flags: "-fprofile-arcs -ftest-coverage"
    timeout-minutes: 300
    container:
      image: ghcr.io/romange/${{ matrix.container }}
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
      volumes:
        - /:/hostroot
        - /mnt:/mnt
      credentials:
        username: ${{ github.repository_owner }}
        password: ${{ secrets.GITHUB_TOKEN }}

    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true
      - name: Delete Space
        run: |
          df -h
          rm -rf /hostroot/usr/share/dotnet
          rm -rf /hostroot/usr/local/share/boost
          rm -rf /hostroot/usr/local/lib/android
          rm -rf /hostroot/opt/ghc
          echo "***************After Deletion***************************"
          df -h
      - name: Install dependencies
        run: |
          uname -a
          cmake --version
          mkdir -p ${{github.workspace}}/build
          apt update && apt install -y lcov pip
      - name: Cache build deps
        id: cache-deps
        uses: actions/cache@v5
        with:
          path: |
            ~/.ccache
            ${{github.workspace}}/build/_deps
          key: ${{ runner.os }}-deps-${{ github.base_ref }}-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-deps-${{ github.base_ref }}-

      - name: Configure CMake
        run: |
          pip install -r tests/dragonfly/requirements.txt
          cmake -B build \
            -DCMAKE_BUILD_TYPE=${{matrix.build-type}} \
            -GNinja \
            -DCMAKE_C_COMPILER="${{matrix.compiler.c}}" \
            -DCMAKE_CXX_COMPILER="${{matrix.compiler.cxx}}" \
            -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
            -DCMAKE_CXX_FLAGS="${{matrix.cxx_flags}}" \
            -L
          pwd
          cd build && pwd
      - name: Build
        run: |
          cd $GITHUB_WORKSPACE/build
          echo "-----------------------------"
          ninja src/all

      - name: Run C++ Unit Tests
        run: |
          cd $GITHUB_WORKSPACE/build
          ctest -V -L DFLY

      - name: Run Python Integration Tests
        run: |
          cd $GITHUB_WORKSPACE/build
          export DRAGONFLY_PATH=`pwd`/dragonfly
          pytest ../tests/dragonfly/ --durations=10 --timeout=300 --color=yes --log-cli-level=INFO

      - name: Generate Coverage Report
        run: |
          cd $GITHUB_WORKSPACE/build
          lcov -c -d . -o main_coverage.info
          lcov --remove main_coverage.info -o main_coverage.info '/usr/*' '*/_deps/*' '*/third_party/*'
          genhtml main_coverage.info --ignore-errors source --output-directory covout -p $GITHUB_WORKSPACE
          ls ./
          echo ls covout
          ls covout/
      - name: Upload coverage to Codecov
        uses: codecov/codecov-action@v4
        with:
          files: build/main_coverage.info
          fail_ci_if_error: true
          token: ${{ secrets.CODECOV_TOKEN }}
      - name: Upload coverage
        uses: actions/upload-artifact@v6
        with:
          name: coverage-report
          path: build/covout/
          if-no-files-found: error


================================================
FILE: .github/workflows/daily-builds.yml
================================================
name: daily-builds

on:
  schedule:
    - cron: '0 6 * * *' # run at 6 AM UTC
  workflow_dispatch:

jobs:
  build:
    if: github.repository == 'dragonflydb/dragonfly'
    # The CMake configure and build commands are platform agnostic and should work equally
    # well on Windows or Mac.  You can convert this to a matrix build if you need
    # cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ubuntu-latest
    name: Build ${{ matrix.name }}
    strategy:
      matrix:
        include:
          # Build with these flags
          - name: generic
            container: alpine-dev
            flags: "-DMARCH_OPT=-march=x86-64"
          - name: fedora
            container: fedora:30-gcc14

    timeout-minutes: 45

    container:
      image: ghcr.io/romange/${{ matrix.container }}
      options: --security-opt seccomp=unconfined
      credentials:
        username: ${{ github.repository_owner }}
        password: ${{ secrets.GITHUB_TOKEN }}

    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true

      - name: Show compiler version
        run: |
          echo "=== Compiler Version ==="
          ${CXX:-g++} --version
          echo "=== CMake Version ==="
          cmake --version
          echo "=== glibc Version ==="
          ldd --version | head -1 || true
          mkdir -p $GITHUB_WORKSPACE/build

      - name: Configure & Build
        run: |
          cd $GITHUB_WORKSPACE/build
          cmake .. -DCMAKE_BUILD_TYPE=Debug -GNinja ${{ matrix.flags }}
          ninja src/all
      - name: Test
        run: |
            cd $GITHUB_WORKSPACE/build
            ctest -V -L DFLY

      - name: Send notification on failure
        if: failure() && github.ref == 'refs/heads/main'
        run: |
          job_link="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
          message="Daily build (${{ matrix.name }}) failed.\\n Commit: ${{github.sha}}\\n Job Link: ${job_link}\\n"

          curl -s \
            -X POST \
            -H 'Content-Type: application/json' \
            '${{ secrets.GSPACES_BOT_DF_BUILD }}' \
            -d '{"text": "'"${message}"'"}'

  build-macos:
    if: github.repository == 'dragonflydb/dragonfly'
    runs-on: macos-15
    timeout-minutes: 45
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true

      - name: Install dependencies
        run: |

          # Remove Python3 symlinks in /usr/local/bin as workaround to brew update issues
          # https://github.com/actions/setup-python/issues/577
          rm /usr/local/bin/2to3* || :
          rm /usr/local/bin/idle3* || :
          rm /usr/local/bin/pydoc* || :
          rm /usr/local/bin/python3* || :
          brew update && brew install ninja boost automake zstd bison autoconf libtool

          mkdir -p $GITHUB_WORKSPACE/build

      - name: Configure & Build
        run: |
          cd $GITHUB_WORKSPACE/build

          export PATH=/opt/homebrew/bin:$PATH
          export PATH=/opt/homebrew/opt/bison/bin/:$PATH

          which bison
          bison --version

          # Check system clang version
          clang --version
          clang++ --version

          # Verify current macOS SDK
          xcrun --show-sdk-path

          autoconf --help
          autoreconf --help

          echo "*************************** START BUILDING **************************************"
          # Configure for using current macOS SDK
          export SDKROOT=$(xcrun --sdk macosx --show-sdk-path)
          echo "Using SDK: $SDKROOT"

          # Use system clang/clang++ with macOS SDK
          cmake .. -DCMAKE_BUILD_TYPE=Debug -GNinja \
            -DCMAKE_C_COMPILER=clang \
            -DCMAKE_CXX_COMPILER=clang++ \
            -DCMAKE_OSX_SYSROOT="$SDKROOT" \
            -DCMAKE_OSX_DEPLOYMENT_TARGET=15.0

          ninja src/all

      - name: Test
        run: |
            cd $GITHUB_WORKSPACE/build
            ctest -V -L DFLY

      - name: Send notification on failure
        if: failure() && github.ref == 'refs/heads/main'
        run: |
          job_link="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
          message="Daily build (macOS) failed.\\n Commit: ${{github.sha}}\\n Job Link: ${job_link}\\n"

          curl -s \
            -X POST \
            -H 'Content-Type: application/json' \
            '${{ secrets.GSPACES_BOT_DF_BUILD }}' \
            -d '{"text": "'"${message}"'"}'


================================================
FILE: .github/workflows/docker-dev-release.yml
================================================
name: Development Docker Build

on:
  schedule:
    - cron: '15 0 * * *'
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

env:
  image: ghcr.io/dragonflydb/dragonfly-dev
  GCS_IMAGE: us-central1-docker.pkg.dev/dragonflydb-public/dragonfly-registry/dragonfly-dev

jobs:
  build_and_tag:
    if: github.repository == 'dragonflydb/dragonfly'
    name: Build and Push ${{matrix.flavor}} ${{ matrix.os.arch }} image
    strategy:
      matrix:
        flavor: [alpine,ubuntu]
        os:
          - image: ubuntu-24.04
            arch: amd64
          - image: ubuntu-24.04-arm
            arch: arm64

    runs-on: ${{ matrix.os.image }}
    permissions:
      contents: read
      packages: write
      id-token: write
    steps:
      - name: checkout
        uses: actions/checkout@v6
        with:
          fetch-depth: 1
          submodules: true

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to Registries
        uses: ./.github/actions/multi-registry-docker-login
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}

      - name: Authenticate to Google Cloud
        uses: google-github-actions/auth@v3
        with:
          credentials_json: ${{ secrets.GCP_SA_KEY }}

      - name: Configure AWS Credentials
        uses: aws-actions/configure-aws-credentials@v5
        with:
          role-to-assume: ${{ secrets.AWS_CI_S3_ROLE_ARN }}
          aws-region: us-east-1

      - name: Get Build Information
        id: build_info
        run: |
          echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT

      - name: Docker meta
        id: metadata
        uses: docker/metadata-action@v5
        with:
          images: |
            ${{ env.image }}
            ${{ env.GCS_IMAGE }}
          tags: |
            type=sha,enable=true,prefix=${{ matrix.flavor}}-,suffix=-${{ matrix.os.arch }},format=short
          labels: |
            org.opencontainers.image.vendor=DragonflyDB LTD
            org.opencontainers.image.title=Dragonfly Development Image
            org.opencontainers.image.description=The fastest in-memory store
      - name: Build image
        id: build
        uses: docker/build-push-action@v6
        with:
          context: .
          push: true
          provenance: false  # Prevent pushing a docker manifest
          tags: |
            ${{ steps.metadata.outputs.tags }}
          labels: ${{ steps.metadata.outputs.labels }}
          file: tools/packaging/Dockerfile.${{ matrix.flavor }}-dev
          cache-from: type=gha,scope=tagged${{ matrix.flavor }}
          cache-to: type=gha,scope=tagged${{ matrix.flavor }},mode=max
          load: true  # Load the build images into the local docker.
      - name: Test Image
        run: |
          echo ${{ steps.build.outputs.digest }}
          image_tags=(${{ steps.metadata.outputs.tags }})

          # install redis-tools
          sudo apt-get install redis-tools -y

          for image_tag in "${image_tags[@]}"; do
            echo "Testing image: ${image_tag}"
            docker image inspect ${image_tag}
            echo "Testing ${{ matrix.flavor }} image"

            # docker run with port-forwarding
            docker run -d -p 6379:6379 ${image_tag}
            sleep 5
            redis-cli -h localhost ping | grep -q "PONG" || exit 1
            docker stop $(docker ps -q --filter ancestor=${image_tag})
          done

      - name: Extract and Upload Binaries
        if: matrix.flavor == 'ubuntu'  # Only run once per flavor
        run: |
          # Get the image tag
          image_tags=(${{ steps.metadata.outputs.tags }})
          image_tag=${image_tags[0]}

          # Extract version from the image
          echo "Extracting version from image..."
          VERSION=$(docker run --rm ${image_tag} dragonfly --version | sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g" | head -n1 | cut -d' ' -f2 | cut -d'-' -f1)
          # Check if version starts with a release version (v*.*.*)
          if [[ ! $VERSION =~ ^v[0-9]+\.[0-9]+\.[0-9]+ ]]; then
            # Get the latest release version to use as prefix
            LATEST_RELEASE=$(curl -s https://api.github.com/repos/dragonflydb/dragonfly/releases/latest | jq -r .tag_name)
            VERSION="${LATEST_RELEASE}+${VERSION}"
          fi
          echo "Dragonfly version: $VERSION"

          echo "Extracting binary from ${image_tag} for ${{ matrix.os.arch }}"

          # Create a temporary container and copy the binary
          container_id=$(docker create ${image_tag})
          docker cp ${container_id}:/usr/local/bin/dragonfly ./dragonfly
          docker rm ${container_id}

          # Create a tar archive
          if [[ "${{ matrix.os.arch }}" == "arm64" ]]; then
            arch_name="aarch64"
          else
            arch_name="x86_64"
          fi
          tar_name="dragonfly-${arch_name}-dbgsym.tar.gz"
          tar czf ${tar_name} dragonfly

          # Upload to GCS
          echo "Uploading ${tar_name} to GCS"
          gcloud storage cp "$tar_name" "gs://${{ secrets.STAGING_BINARY_BUCKET }}/dragonfly/$VERSION/$tar_name"

          # Upload to AWS
          echo "Uploading ${tar_name} to AWS"
          aws s3 cp "$tar_name" "s3://${{ secrets.STAGING_BINARY_BUCKET }}/dragonfly/$VERSION/$tar_name"

          # Cleanup
          rm -f dragonfly ${tar_name}

    outputs:
      # matrix jobs outputs override each other, but we use the same sha
      # for all images, so we can use the same output name.
      sha: ${{ steps.build_info.outputs.short_sha }}

  merge_manifest:
    if: github.repository == 'dragonflydb/dragonfly'
    needs: [build_and_tag]
    runs-on: ubuntu-latest
    strategy:
      matrix:
        flavor: [alpine,ubuntu]
    steps:
      - name: checkout
        uses: actions/checkout@v6

      - name: Login to Registries
        uses: ./.github/actions/multi-registry-docker-login
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}

      - name: Merge and Push
        run: |
            # Function to create and push manifests for a given registry
            create_and_push_manifests() {
              local registry=$1
              local flavor=$2
              local sha=$3

              # Create and push the manifest like dragonfly-dev:alpine-<sha>
              local sha_tag="${registry}:${flavor}-${sha}"
              docker manifest create ${sha_tag} --amend ${sha_tag}-amd64 --amend ${sha_tag}-arm64
              docker manifest push ${sha_tag}

              # Create and push the manifest like dragonfly-dev:alpine
              local flavor_tag="${registry}:${flavor}"
              docker manifest create ${flavor_tag} --amend ${sha_tag}-amd64 --amend ${sha_tag}-arm64
              docker manifest push ${flavor_tag}
            }

            # GitHub Container Registry manifests
            create_and_push_manifests "${{ env.image }}" "${{ matrix.flavor }}" "${{ needs.build_and_tag.outputs.sha }}"

            # Google Artifact Registry manifests
            create_and_push_manifests "${{ env.GCS_IMAGE }}" "${{ matrix.flavor }}" "${{ needs.build_and_tag.outputs.sha }}"


================================================
FILE: .github/workflows/docker-release2.yml
================================================
name: Docker Release-v2

on:
  workflow_dispatch:
    inputs:
      TAG_NAME:
        description: 'Tag name that the major tag will point to'
        required: true
      PRERELEASE:
        description: 'Whether this is a prerelease'
        type: boolean
        required: true

  release:
    types: [published]

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

env:
  TAG_NAME: ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }}
  IS_PRERELEASE: ${{ github.event.release.prerelease || github.event.inputs.PRERELEASE }}
  IMAGE: ghcr.io/dragonflydb/dragonfly
  GCS_IMAGE: us-central1-docker.pkg.dev/dragonflydb-public/dragonfly-registry/dragonfly

jobs:
  build_and_tag:
    name: Build and Push ${{matrix.flavor}} ${{ matrix.os.arch }} image
    strategy:
      matrix:
        flavor: [ubuntu]
        os:
          - image: ubuntu-24.04
            arch: amd64
          - image: ubuntu-24.04-arm
            arch: arm64

    runs-on: ${{ matrix.os.image }}
    permissions:
      contents: read
      packages: write
      id-token: write

    steps:
      - name: checkout
        uses: actions/checkout@v6
        with:
          fetch-depth: 0
          submodules: true
      - name: Set up Docker Build
        uses: docker/setup-buildx-action@v3

      - name: Login to Registries
        uses: ./.github/actions/multi-registry-docker-login
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}

      - name: Fetch release asset
        uses: dsaltares/fetch-gh-release-asset@1.1.2
        with:
          version: "tags/${{ env.TAG_NAME }}"
          regex: true
          file: "dragonfly-.*\\.tar\\.gz"
          target: 'releases/'
          token: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract artifacts
        run: |
          echo "Event prerelease ${{ github.event.release.prerelease }}"
          echo "Input prerelease ${{ github.event.inputs.PRERELEASE }}"
          ls -l
          ls -l releases
          for f in releases/*.tar.gz; do tar xvfz $f -C releases; done
          rm releases/*.tar.gz

      - name: Docker meta
        id: metadata
        uses: docker/metadata-action@v5
        with:
          images: |
            ${{ env.IMAGE }}
            ${{ env.GCS_IMAGE }}
          flavor: |
            latest=false
            prefix=${{ matrix.flavor}}-
            suffix=-${{ matrix.os.arch }}
          tags: |
            type=semver,pattern={{version}},enable=true,value=${{ env.TAG_NAME }}
            type=semver,pattern={{raw}},enable=true,value=${{ env.TAG_NAME }}
            type=ref,event=pr
          labels: |
            org.opencontainers.image.vendor=DragonflyDB LTD
            org.opencontainers.image.title=Dragonfly Production Image
            org.opencontainers.image.description=The fastest in-memory store
            org.opencontainers.image.version=${{ env.TAG_NAME }}

      - name: Build image
        id: build
        uses: docker/build-push-action@v6
        with:
          context: .
          push: true
          provenance: false  # Prevent pushing a docker manifest
          tags: |
            ${{ steps.metadata.outputs.tags }}
          labels: ${{ steps.metadata.outputs.labels }}
          file: tools/packaging/Dockerfile.${{ matrix.flavor }}-prod
          cache-from: type=gha,scope=prod-${{ matrix.flavor }}
          cache-to: type=gha,scope=prod-${{ matrix.flavor }},mode=max
          load: true  # Load the build images into the local docker.

      - name: Test Image
        uses: ./.github/actions/test-docker
        timeout-minutes: 1
        with:
          image_id: ${{ env.IMAGE }}@${{ steps.build.outputs.digest }}
          name: ${{ matrix.flavor }}-${{ matrix.os.arch }}

      - id: output-sha
        run: |
          echo "sha_${{ matrix.os.arch }}=${{ steps.build.outputs.digest }}" >> $GITHUB_OUTPUT
    outputs:
      sha_amd: ${{ steps.output-sha.outputs.sha_amd64 }}
      sha_arm: ${{ steps.output-sha.outputs.sha_arm64 }}

  merge_manifest:
    needs: [build_and_tag]
    runs-on: ubuntu-latest
    strategy:
      matrix:
        flavor: [ubuntu]
    steps:
      - name: checkout
        uses: actions/checkout@v6

      - name: Login to Registries
        uses: ./.github/actions/multi-registry-docker-login
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}

      - name: Merge and Push
        run: |
            # Function to create and push manifests for a given registry
            create_and_push_manifests() {
              local registry=$1
              local sha_amd=$2
              local sha_arm=$3
              local flavor=$4
              local tag_name=$5
              local is_prerelease=$6

              # Function for semantic version comparison
              # Returns true if current_version >= latest_version
              semver_cmp() {
                local current_version=$1
                local latest_version=$2
                local should_update=true

                # Extract major.minor.patch components
                IFS='.' read -ra CURRENT_PARTS <<< "$current_version"
                IFS='.' read -ra LATEST_PARTS <<< "$latest_version"

                # Pad arrays to same length for comparison
                while [ ${#CURRENT_PARTS[@]} -lt 3 ]; do CURRENT_PARTS+=(0); done
                while [ ${#LATEST_PARTS[@]} -lt 3 ]; do LATEST_PARTS+=(0); done

                # Compare major.minor.patch numerically
                if (( 10#${CURRENT_PARTS[0]} < 10#${LATEST_PARTS[0]} )); then
                  should_update=false
                elif (( 10#${CURRENT_PARTS[0]} == 10#${LATEST_PARTS[0]} )) && (( 10#${CURRENT_PARTS[1]} < 10#${LATEST_PARTS[1]} )); then
                  should_update=false
                elif (( 10#${CURRENT_PARTS[0]} == 10#${LATEST_PARTS[0]} )) && (( 10#${CURRENT_PARTS[1]} == 10#${LATEST_PARTS[1]} )) && (( 10#${CURRENT_PARTS[2]} < 10#${LATEST_PARTS[2]} )); then
                  should_update=false
                fi

                # Log debug info to stderr instead of stdout
                echo "Version comparison: current=${CURRENT_PARTS[0]}.${CURRENT_PARTS[1]}.${CURRENT_PARTS[2]} vs latest=${LATEST_PARTS[0]}.${LATEST_PARTS[1]}.${LATEST_PARTS[2]}" >&2

                # Return only the result
                echo $should_update
              }

              if [[ "$is_prerelease" == 'true' ]]; then
                # Create and push the manifest like dragonfly:alpha-ubuntu
                tag="${registry}:alpha-${flavor}"
                docker manifest create ${tag} --amend ${sha_amd} --amend ${sha_arm}
                docker manifest push ${tag}
              elif [[ "$flavor" == 'ubuntu' ]]; then
                # Checking if this version should be tagged as latest
                echo "Checking if ${tag_name} should be tagged as latest..."

                # Remove 'v' prefix if present for semantic comparison
                current_version=${tag_name#v}

                # Get the current latest version by running the latest image
                latest_version=""
                if docker pull ${registry}:latest &>/dev/null; then
                  echo "Found latest tag, checking its version..."

                  # First try to get version from image labels using docker inspect
                  echo "Method 1: Trying to get version from image labels..."
                  label_version=$(docker image inspect --format '{{ index .Config.Labels "org.opencontainers.image.version" }}' ${registry}:latest 2>/dev/null || echo "")

                  if [[ -n "$label_version" ]]; then
                    echo "Found version from image labels: $label_version"

                    # Extract version from format like "ubuntu-1.28.1-arm64"
                    if [[ $label_version == ubuntu-*-* ]]; then
                      # Extract the middle part (version) from ubuntu-VERSION-arch
                      latest_full_version=$(echo "$label_version" | cut -d'-' -f2)
                    else
                      # Use the label as is
                      latest_full_version=$label_version
                    fi

                    echo "Extracted version: $latest_full_version"
                  else
                    # Fallback to running the container if label inspect failed
                    echo "Method 2: Falling back to container execution..."
                    latest_full_version=$(docker run --rm --entrypoint /bin/sh ${registry}:latest -c "dragonfly --version | cut -d' ' -f2 | head -n 1")
                  fi

                  echo "Latest full version: ${latest_full_version}"

                  # Extract only the semantic version part (before any dash)
                  latest_version=$(echo "${latest_full_version}" | cut -d'-' -f1)
                  # Remove 'v' prefix if present
                  latest_version=${latest_version#v}
                  echo "Current latest version: ${latest_version}"
                else
                  echo "No latest tag found yet or couldn't pull it"
                fi

                # Compare versions only if we have a latest version
                should_update_latest=true
                if [[ -n "$latest_version" ]]; then
                  # Call our semver comparison function
                  should_update_latest=$(semver_cmp "$current_version" "$latest_version")
                fi

                if [[ "$should_update_latest" == true ]]; then
                  echo "Version ${tag_name} is newer than or equal to current latest, updating latest tag"
                  tag="${registry}:latest"
                  # Create and push the manifest like dragonfly:latest
                  docker manifest create ${tag} --amend ${sha_amd} --amend ${sha_arm}
                  docker manifest push ${tag}
                else
                  echo "Version ${tag_name} is older than current latest (${latest_version}), NOT updating latest tag"
                fi
              fi

              # Create and push the manifest like dragonfly:v1.26.4
              tag="${registry}:${tag_name}"
              docker manifest create ${tag} --amend ${sha_amd} --amend ${sha_arm}
              docker manifest push ${tag}
            }

            # GitHub Container Registry manifests
            ghcr_sha_amd=${{ env.IMAGE }}@${{ needs.build_and_tag.outputs.sha_amd }}
            ghcr_sha_arm=${{ env.IMAGE }}@${{ needs.build_and_tag.outputs.sha_arm }}
            create_and_push_manifests "${{ env.IMAGE }}" "$ghcr_sha_amd" "$ghcr_sha_arm" "${{ matrix.flavor }}" "${{ env.TAG_NAME }}" "${{ env.IS_PRERELEASE }}"

            # Google Artifact Registry manifests
            gar_sha_amd=${{ env.GCS_IMAGE }}@${{ needs.build_and_tag.outputs.sha_amd }}
            gar_sha_arm=${{ env.GCS_IMAGE }}@${{ needs.build_and_tag.outputs.sha_arm }}
            create_and_push_manifests "${{ env.GCS_IMAGE }}" "$gar_sha_amd" "$gar_sha_arm" "${{ matrix.flavor }}" "${{ env.TAG_NAME }}" "${{ env.IS_PRERELEASE }}"

  release_helm_and_notify:
    needs: [merge_manifest]
    runs-on: ubuntu-latest
    permissions:
      contents: write
      packages: write
      pull-requests: write
    steps:
    - name: print_env
      run: env

    - name: checkout
      uses: actions/checkout@v6
      with:
        token: ${{ secrets.DRAGONFLY_TOKEN }}  # PAT to push to main
        fetch-depth: 0

    - name: Install helm
      uses: azure/setup-helm@v4

    - name: Setup Go
      uses: actions/setup-go@v6

    - name: Configure Git
      if: env.IS_PRERELEASE != 'true'
      run: |
        git config user.name "$GITHUB_ACTOR"
        git config user.email "$GITHUB_ACTOR@users.noreply.github.com"

    - name: Update helm chart
      if: env.IS_PRERELEASE != 'true'
      run: |
        git checkout -b helm-chart-update/${{ env.TAG_NAME }} origin/main
        sed -Ei \
            -e 's/^(version\:) .*/\1 '${{ env.TAG_NAME }}'/g' \
            -e 's/^(appVersion\:) .*/\1 "'${{ env.TAG_NAME }}'"/g' \
            contrib/charts/dragonfly/Chart.yaml

        go test ./contrib/charts/dragonfly/... -update

        git commit \
          -m 'chore(helm-chart): update to ${{ env.TAG_NAME }}' \
          contrib/charts/dragonfly/Chart.yaml \
          contrib/charts/dragonfly/ci || true

    - name: Push Helm chart as OCI to Github
      if: env.IS_PRERELEASE != 'true'
      run: |
        echo "${{ secrets.GITHUB_TOKEN }}" | \
          helm registry login -u ${{ github.actor }} --password-stdin ghcr.io

        helm package contrib/charts/dragonfly

        helm push dragonfly-${{ env.TAG_NAME }}.tgz oci://ghcr.io/${{ github.repository }}/helm

    - name: Discord notification
      env:
        DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
      uses: Ilshidur/action-discord@d2594079a10f1d6739ee50a2471f0ca57418b554
      with:
        args: 'DragonflyDB version [${{ env.TAG_NAME }}](https://github.com/dragonflydb/dragonfly/releases/tag/${{ env.TAG_NAME }}) has been released 🎉'

    - name: Re-build Docs
      if: env.IS_PRERELEASE != 'true'
      run: |
        curl -s -X POST '${{ secrets.VERCEL_DOCS_WEBHOOK }}'

    - name: Create Helm Chart PR
      if: env.IS_PRERELEASE != 'true'
      env:
        GH_TOKEN: ${{ secrets.DRAGONFLY_TOKEN }}
      run: |
        git push origin helm-chart-update/${{ env.TAG_NAME }}
        gh pr create \
          --base main \
          --head helm-chart-update/${{ env.TAG_NAME }} \
          --title 'chore(helm-chart): update to ${{ env.TAG_NAME }}' \
          --body 'Automated Helm chart version bump to ${{ env.TAG_NAME }}.' \
          --reviewer vyavdoshenko


================================================
FILE: .github/workflows/epoll-regression-tests.yml
================================================
name: Epoll Regression Tests

on:
  schedule:
    - cron: "0 0/3 * * *"
  workflow_dispatch:

jobs:
  build:
    if: github.repository == 'dragonflydb/dragonfly'
    strategy:
      matrix:
        # Test of these containers
        container: ["ubuntu-dev:24"]
        proactor: [Epoll]
        build-type: [Debug]
        runner: [ubuntu-latest, [self-hosted, linux, ARM64]]

    runs-on: ${{ matrix.runner }}

    permissions:
      id-token: write
      contents: read

    container:
      image: ghcr.io/romange/${{ matrix.container }}
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
      volumes:
        - /var/crash:/var/crash
        - /:/hostroot
        - /mnt:/mnt
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true

      - name: Print environment info
        run: |
          cat /proc/cpuinfo
          ulimit -a
          env

      - name: Build Dragonfly
        uses: ./.github/actions/builder
        with:
          build-type: ${{matrix.build-type}}
          targets: 'dragonfly'

      - name: Authenticate to AWS
        uses: aws-actions/configure-aws-credentials@v5
        with:
          role-to-assume: ${{ secrets.AWS_CI_S3_ROLE_ARN }}
          aws-region: us-east-1

      - name: Run regression tests action
        uses: ./.github/actions/regression-tests
        with:
          dfly-executable: dragonfly
          gspace-secret: ${{ secrets.GSPACES_BOT_DF_BUILD }}
          build-folder-name: build
          filter: ${{ matrix.build-type == 'Release' && 'not empty' || 'not opt_only' }}
          s3-bucket: ${{ secrets.S3_REGTEST_BUCKET }}
          # Chain ternary oprator of the form (which can be nested)
          # (expression == condition && <true expression> || <false expression>)
          epoll: ${{ matrix.proactor == 'Epoll' && 'epoll' || 'iouring' }}

      - name: Upload logs on failure
        if: failure()
        uses: actions/upload-artifact@v6
        with:
          name: logs
          path: /tmp/failed/*

  lint-test-chart:
    if: github.repository == 'dragonflydb/dragonfly'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: ./.github/actions/lint-test-chart


================================================
FILE: .github/workflows/fuzz-long.yml
================================================
name: AFL++ Long Fuzzing Campaign

on:
  schedule:
    # Run nightly at 2 AM UTC
    - cron: '0 2 * * *'
  workflow_dispatch:
    inputs:
      resp_duration:
        description: 'RESP fuzzing duration in minutes'
        required: false
        default: '60'
        type: string
      memcache_duration:
        description: 'Memcache fuzzing duration in minutes'
        required: false
        default: '30'
        type: string

concurrency:
  group: ${{ github.workflow }}
  cancel-in-progress: true

jobs:
  fuzz-long:
    if: github.repository == 'dragonflydb/dragonfly'
    runs-on: CI-LARGE-86
    timeout-minutes: 120

    strategy:
      fail-fast: false
      matrix:
        include:
          - target: resp
            duration: '60'
          - target: memcache
            duration: '30'

    container:
      image: ghcr.io/romange/ubuntu-dev:24-afl
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
      credentials:
        username: ${{ github.repository_owner }}
        password: ${{ secrets.GITHUB_TOKEN }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v6
        with:
          submodules: true

      - name: Run AFL++ long fuzzing campaign (${{ matrix.target }})
        uses: ./.github/actions/fuzzing
        with:
          mode: long
          target: ${{ matrix.target }}
          duration-minutes: ${{ matrix.target == 'resp' && (github.event.inputs.resp_duration || matrix.duration) || (github.event.inputs.memcache_duration || matrix.duration) }}
          run-number: ${{ github.run_number }}

      - name: Send notification on failure
        if: failure() && github.ref == 'refs/heads/main'
        run: |
          job_link="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
          message="AFL++ ${{ matrix.target }} fuzzing found crashes.\\n Commit: ${{github.sha}}\\n Job Link: ${job_link}\\n"

          curl -s \
            -X POST \
            -H 'Content-Type: application/json' \
            '${{ secrets.GSPACES_BOT_DF_BUILD }}' \
            -d '{"text": "'"${message}"'"}'


================================================
FILE: .github/workflows/fuzz-pr.yml
================================================
# Run AFL++ fuzzing on PRs that touch C++ code.
#
# For each PR, an LLM analyzes the diff and generates:
#   1. Targeted seed files — initial inputs crafted to exercise the changed code paths.
#      (A "seed" is a RESP-encoded sequence of Redis commands that the fuzzer starts from
#       and mutates; see fuzz/seeds/resp/*.resp for the existing seed corpus.)
#   2. Focus command list — commands the mutator should prefer (~70% of the time),
#      so mutations concentrate on the affected code instead of spreading randomly.
#
# The fuzzer then runs for 15 minutes in "smoke" mode (stop on first crash).
# When ANTHROPIC_API_KEY is unavailable (e.g. fork PRs), seed generation is skipped
# and the fuzzer uses the existing seed corpus as-is.
#
# Additionally, if the PR touches memcache-related code (memcache_parser, mc_family,
# fuzz/memcache_mutator.py, or fuzz/seeds/memcache/), a focused memcache fuzzing step
# runs automatically after RESP fuzzing passes, reusing the already-built binary.
name: AFL++ PR Fuzzing

on:
  pull_request:
    branches: [main]
    paths:
      - 'src/**/*.cc'
      - 'src/**/*.h'
      - 'helio/**/*.cc'
      - 'helio/**/*.h'
      - 'fuzz/**'
      - '.github/workflows/fuzz-pr.yml'
      - '.github/actions/fuzzing/**'
  workflow_dispatch:
    inputs:
      duration:
        description: 'Fuzzing duration in minutes'
        required: false
        default: '15'
        type: string
      memcache-duration:
        description: 'Memcache fuzzing duration in minutes'
        required: false
        default: '10'
        type: string

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  fuzz-pr:
    runs-on: CI-LARGE-86
    timeout-minutes: 60

    container:
      image: ghcr.io/romange/ubuntu-dev:24-afl
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
      credentials:
        username: ${{ github.repository_owner }}
        password: ${{ secrets.GITHUB_TOKEN }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v6
        with:
          submodules: true
          fetch-depth: 0

      - name: Generate PR diff
        id: diff
        run: |
          if [ "${{ github.event_name }}" = "pull_request" ]; then
            git config --global --add safe.directory "$GITHUB_WORKSPACE"
            BASE=${{ github.event.pull_request.base.sha }}
            HEAD_SHA=${{ github.event.pull_request.head.sha }}
            MERGE_BASE=$(git merge-base "$BASE" "$HEAD_SHA")
            git diff "$MERGE_BASE".."$HEAD_SHA" > /tmp/pr_diff.txt
          else
            echo "" > /tmp/pr_diff.txt
          fi

          DIFF_LINES=$(wc -l < /tmp/pr_diff.txt)
          echo "diff_lines=${DIFF_LINES}" >> "$GITHUB_OUTPUT"

          echo "::group::PR diff summary"
          echo "C++ diff lines: ${DIFF_LINES}"
          if [ "$DIFF_LINES" -gt 0 ]; then
            echo "Changed files:"
            grep '^diff --git' /tmp/pr_diff.txt | sed 's|diff --git a/.* b/|  |' || true
          else
            echo "No C++ file changes in this PR — seed generation will be skipped"
          fi
          echo "::endgroup::"

      - name: Generate targeted seeds
        id: seeds
        run: |
          pip install 'anthropic>=0.39,<1' 2>/dev/null || pip install --break-system-packages 'anthropic>=0.39,<1' 2>/dev/null || true

          SEEDS_DIR="${GITHUB_WORKSPACE}/fuzz/seeds/pr_targeted"
          mkdir -p "$SEEDS_DIR"

          python3 fuzz/generate_targeted_seeds.py \
            --output-dir "$SEEDS_DIR" \
            < /tmp/pr_diff.txt

          FOCUS=""
          if [ -f "$SEEDS_DIR/focus_commands.json" ]; then
            FOCUS=$(cat "$SEEDS_DIR/focus_commands.json")
          fi
          echo "focus_commands=${FOCUS}" >> "$GITHUB_OUTPUT"
          echo "seeds_dir=${SEEDS_DIR}" >> "$GITHUB_OUTPUT"

          SEED_COUNT=$(ls "$SEEDS_DIR"/*.resp 2>/dev/null | wc -l || echo 0)

          echo "::group::Seed generation results"
          echo "Seeds generated: ${SEED_COUNT}"
          echo "Focus commands: ${FOCUS:-none}"
          if [ "$SEED_COUNT" -gt 0 ]; then
            ls -la "$SEEDS_DIR"/*.resp
          fi
          echo "::endgroup::"

          # Job summary
          {
            echo "### Fuzzing Seed Generation"
            echo ""
            if [ "$SEED_COUNT" -gt 0 ]; then
              echo "- **Seeds generated:** ${SEED_COUNT}"
              echo "- **Focus commands:** \`${FOCUS}\`"
            elif [ "$(wc -l < /tmp/pr_diff.txt)" -eq 0 ]; then
              echo "- No C++ changes in PR — using default seed corpus"
            elif [ -z "$ANTHROPIC_API_KEY" ]; then
              echo "- No API key — using default seed corpus"
            else
              echo "- LLM did not produce usable seeds — using default seed corpus"
            fi
          } >> "$GITHUB_STEP_SUMMARY"
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}

      - name: Run AFL++ PR fuzzing
        uses: ./.github/actions/fuzzing
        with:
          mode: smoke
          duration-minutes: ${{ github.event.inputs.duration || '15' }}
          run-number: ${{ github.run_number }}
          extra-seeds-dir: ${{ steps.seeds.outputs.seeds_dir }}
          focus-commands: ${{ steps.seeds.outputs.focus_commands }}

      # Reuses the binary built by the RESP step above (build: false).
      # Only runs when RESP fuzzing passed (default success() condition) and memcache
      # code was actually touched in this PR.
      - name: Check if memcache-related files changed
        id: memcache-check
        run: |
          if [ "${{ github.event_name }}" = "pull_request" ]; then
            CHANGED=$(grep -E '^diff --git a/(src/(facade/memcache|server/mc_family)|fuzz/(memcache_mutator|seeds/memcache))' /tmp/pr_diff.txt || true)
            if [ -n "$CHANGED" ]; then
              echo "run=true" >> "$GITHUB_OUTPUT"
              echo "Memcache-related files changed — will run memcache fuzzing:"
              echo "$CHANGED" | sed 's|diff --git a/.* b/|  |'
            else
              echo "run=false" >> "$GITHUB_OUTPUT"
              echo "No memcache-related files changed — skipping memcache fuzzing"
            fi
          else
            echo "run=true" >> "$GITHUB_OUTPUT"
            echo "Manual trigger — running memcache fuzzing"
          fi

      - name: Run AFL++ memcache fuzzing
        if: success() && steps.memcache-check.outputs.run == 'true'
        uses: ./.github/actions/fuzzing
        with:
          mode: smoke
          target: memcache
          build: 'false'
          duration-minutes: ${{ github.event.inputs['memcache-duration'] || '10' }}
          run-number: ${{ github.run_number }}


================================================
FILE: .github/workflows/generate-osrepo-site.yml
================================================
name: generate-site
on:
  workflow_dispatch:
  release:
    types: [published]

jobs:
  gen-site:
    runs-on: ubuntu-latest
    env:
      SiteRoot: _site

    name: Generate index and site assets
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v6

      - name: Install packaging tools
        # RPM tools are available on ubuntu
        run: sudo apt install -y rpm gpg createrepo-c dpkg-dev reprepro

      - name: Setup requirements
        working-directory: tools/packaging/osrepos
        run: pip install -r requirements.txt

      - name: Download packages
        working-directory: tools/packaging/osrepos
        run: python scripts/fetch-releases.py $SiteRoot

      - name: Import GPG key
        id: gpg-import
        uses: crazy-max/ghaction-import-gpg@v6
        with:
          gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }}

      - name: Sign RPMs
        shell: sh
        working-directory: tools/packaging/osrepos
        run: sh scripts/sign-rpms.sh ${{ steps.gpg-import.outputs.fingerprint }}

      - name: Create YUM repository
        # Creates metadata for YUM/DNF repository, the files were copied in the download step
        shell: sh
        working-directory: tools/packaging/osrepos
        run: createrepo_c -v $SiteRoot/rpm

      - name: Sign YUM repository
        shell: sh
        working-directory: tools/packaging/osrepos
        run: gpg --armor --detach-sign $SiteRoot/rpm/repodata/repomd.xml

      - name: Create APT repository
        # The configuration for apt repo is in tools/packaging/osrepos/reprepro-config,
        # which ensures the same GPG key used elsewhere in this action is used to sign
        # the repository
        shell: sh
        working-directory: tools/packaging/osrepos
        run: sh -x scripts/generate-apt-repo.sh

      - name: Prepare assets
        working-directory: tools/packaging/osrepos
        run: |
          cp -aRv dragonfly.repo pgp-key.public dragonfly.sources $SiteRoot/
          rm -rf $SiteRoot/deb/conf

      - name: Generate Directory Listings
        working-directory: tools/packaging/osrepos
        run: python scripts/generate-index.py $SiteRoot

      - name: Authenticate
        uses: 'google-github-actions/auth@v3'
        with:
          project_id: 'dragonflydb'
          credentials_json: ${{ secrets.GCP_BUCKET_CREDENTIALS }}

      - name: GCloud setup
        uses: 'google-github-actions/setup-gcloud@v3'

      - name: Deploy site
        working-directory: tools/packaging/osrepos
        run: |
          gcloud storage rm ${{ secrets.GCP_PACKAGES_BUCKET }}/**
          gcloud storage rsync $SiteRoot ${{ secrets.GCP_PACKAGES_BUCKET }} --recursive --delete-unmatched-destination-objects

      - name: Notify on failure
        if: failure()
        run: |
          job_link="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
          message="Package repo generation failed.\nCommit: ${{ github.sha }}\nJob: ${job_link}"
          curl -sSf -X POST -H 'Content-Type: application/json' '${{ secrets.GSPACES_BOT_DF_BUILD }}' -d '{"text": "'"${message}"'"}'


================================================
FILE: .github/workflows/heavy-tests.yml
================================================
name: Heavy Tests

on:
  schedule:
    - cron: "0 0/6 * * *"
  workflow_dispatch:

jobs:
  build:
    if: github.repository == 'dragonflydb/dragonfly'
    strategy:
      matrix:
        # Test of these containers
        container: ["ubuntu-dev:24"]
        proactor: [Uring]
        build-type: [Release]
        runner: [CI-LARGE-86, CI-LARGE-ARM]

    runs-on: ${{ matrix.runner }}

    permissions:
      id-token: write
      contents: read

    container:
      image: ghcr.io/romange/${{ matrix.container }}
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
      volumes:
        - /var/crash:/var/crash
        - /:/hostroot
        - /mnt:/mnt
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true

      - name: Print environment info
        run: |
          cat /proc/cpuinfo
          ulimit -a
          env
          lsblk -l

      - name: Build Dragonfly
        uses: ./.github/actions/builder
        with:
          build-type: ${{matrix.build-type}}
          targets: 'dragonfly'

      - name: Authenticate to AWS
        uses: aws-actions/configure-aws-credentials@v5
        with:
          role-to-assume: ${{ secrets.AWS_CI_S3_ROLE_ARN }}
          aws-region: us-east-1

      - name: Run heavy tests
        uses: ./.github/actions/regression-tests
        with:
          dfly-executable: dragonfly
          gspace-secret: ${{ secrets.GSPACES_BOT_DF_BUILD }}
          build-folder-name: build
          filter: large
          s3-bucket: ${{ secrets.S3_REGTEST_BUCKET }}

      - name: Upload logs on failure
        if: failure()
        uses: actions/upload-artifact@v6
        with:
          name: logs-${{ matrix.runner }}
          path: /tmp/failed/*


================================================
FILE: .github/workflows/ioloop-v2-regtests.yml
================================================
name: RegTests IoLoopV2

# Manually triggered only
on:
  workflow_dispatch:

jobs:
  build:
    strategy:
      matrix:
        # Test of these containers
        container: ["ubuntu-dev:20-gcc14"]
        proactor: [Uring]
        build-type: [Debug, Release]
        runner: [ubuntu-latest, [self-hosted, linux, ARM64]]

    runs-on: ${{ matrix.runner }}

    permissions:
      id-token: write
      contents: read

    container:
      image: ghcr.io/romange/${{ matrix.container }}
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
      volumes:
        - /var/crash:/var/crash
        - /:/hostroot
        - /mnt:/mnt

    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true

      - name: Print environment info
        run: |
          cat /proc/cpuinfo
          ulimit -a
          env

      - name: Build Dragonfly
        uses: ./.github/actions/builder
        with:
          build-type: ${{matrix.build-type}}
          targets: 'dragonfly'

      - name: Authenticate to AWS
        uses: aws-actions/configure-aws-credentials@v5
        with:
          role-to-assume: ${{ secrets.AWS_CI_S3_ROLE_ARN }}
          aws-region: us-east-1

      - name: Run regression tests action
        uses: ./.github/actions/regression-tests
        with:
          dfly-executable: dragonfly
          gspace-secret: ${{ secrets.GSPACES_BOT_DF_BUILD }}
          build-folder-name: build
          filter: ${{ matrix.build-type == 'Release' && 'not debug_only and not tls' || 'not opt_only and not tls' }}
          s3-bucket: ${{ secrets.S3_REGTEST_BUCKET }}

      - name: Upload logs on failure
        if: failure()
        uses: actions/upload-artifact@v6
        with:
          name: logs
          path: /tmp/failed/*

  lint-test-chart:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: ./.github/actions/lint-test-chart


================================================
FILE: .github/workflows/mastodon-ruby-tests.yml
================================================
name: Mastodon ruby tests
on:
  schedule:
    - cron: '0 6 * * *' # run at 6 AM UTC
  workflow_dispatch:


jobs:
  build-and-test:
    if: github.repository == 'dragonflydb/dragonfly'
    runs-on: ubuntu-latest
    name: Build and run tests

    services:
      postgres:
        image: postgres:14-alpine
        env:
          POSTGRES_PASSWORD: postgres
          POSTGRES_USER: postgres
        options: >-
          --health-cmd pg_isready
          --health-interval 10ms
          --health-timeout 3s
          --health-retries 50
        ports:
          - 5432:5432

      redis:
        image: docker.dragonflydb.io/dragonflydb/dragonfly:latest
        options: >-
          --health-cmd "redis-cli ping"
          --health-interval 10ms
          --health-timeout 3s
          --health-retries 50
        ports:
          - 6379:6379

    env:
      DB_HOST: localhost
      DB_USER: postgres
      DB_PASS: postgres
      RAILS_ENV: test
      ALLOW_NOPAM: true
      PAM_ENABLED: true
      PAM_DEFAULT_SERVICE: pam_test
      PAM_CONTROLLED_SERVICE: pam_test_controlled
      OIDC_ENABLED: true
      OIDC_SCOPE: read
      SAML_ENABLED: true
      CAS_ENABLED: true
      BUNDLE_WITH: 'pam_authentication test'
      GITHUB_RSPEC: false

    steps:
      - name: Checkout mastodon
        uses: actions/checkout@v6
        with:
          repository: mastodon/mastodon
      - name: Install pre-requisites
        run: |
          sudo apt update
          sudo apt install -y libicu-dev libidn11-dev libvips42 ffmpeg imagemagick libpam-dev
      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.4
          bundler-cache: true
      - name: Enable corepack
        shell: bash
        run: corepack enable
      - name: Install all production yarn packages
        shell: bash
        run: yarn workspaces focus --production
      - name: Set up Node.js
        uses: actions/setup-node@v6
        with:
          node-version-file: '.nvmrc'
      - name: Precompile assets
        run: |-
          bin/rails assets:precompile
      - name: Load database schema
        run: |
          bin/rails db:setup
          bin/flatware fan bin/rails db:test:prepare
      - name: Run tests
        env:
          SPEC_OPTS: '--exclude-pattern "**/self_destruct_scheduler_spec.rb"'
        run: |
          unset COVERAGE
          bin/flatware rspec -r ./spec/flatware_helper.rb
      - name: Notify on failures
        if: failure()
        shell: bash
        run: |
          job_link="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
          message="Mastodon ruby tests failed.\\n The commit is: ${{github.sha}}.\\n Job Link: ${job_link}\\n"
          curl -s \
            -X POST \
            -H 'Content-Type: application/json' \
            '${{ secrets.GSPACES_BOT_DF_BUILD }}' \
            -d '{"text": "'"${message}"'"}'


================================================
FILE: .github/workflows/package-install.yml
================================================
name: package-install-tests

on:
  schedule:
    - cron: '0 6 * * *'
  workflow_dispatch:
  workflow_run:
    workflows: ["generate-site"]
    types: [completed]

jobs:
  test-rpm:
    runs-on: ubuntu-latest
    if: github.repository == 'dragonflydb/dragonfly' && (github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success')
    container:
      image: ghcr.io/romange/fedora:30
    steps:
      - name: Install on fedora
        run: |
          curl -Lo /etc/yum.repos.d/dragonfly.repo https://packages.dragonflydb.io/dragonfly.repo
          dnf clean all
          dnf makecache
          dnf -y install dragonfly
          dragonfly --version

  test-deb-ubuntu:
    runs-on: ubuntu-latest
    if: github.repository == 'dragonflydb/dragonfly' && (github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success')
    container:
      image: ghcr.io/romange/ubuntu:noble
    steps:
      - name: Install on ubuntu
        run: |
          apt update
          apt install -y curl
          curl -Lo /usr/share/keyrings/dragonfly-keyring.public https://packages.dragonflydb.io/pgp-key.public
          curl -Lo /etc/apt/sources.list.d/dragonfly.sources https://packages.dragonflydb.io/dragonfly.sources
          apt update
          apt install -y dragonfly
          dragonfly --version

  notify-on-failure:
    runs-on: ubuntu-latest
    needs: [test-rpm, test-deb-ubuntu]
    if: github.repository == 'dragonflydb/dragonfly' && always() && (needs.test-rpm.result == 'failure' || needs.test-deb-ubuntu.result == 'failure')
    steps:
      - name: Notify on failure
        run: |
          job_link="${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
          message="Package install tests failed.\nCommit: ${{ github.sha }}\nJob: ${job_link}"
          curl -sSf -X POST -H 'Content-Type: application/json' '${{ secrets.GSPACES_BOT_DF_BUILD }}' -d '{"text": "'"${message}"'"}'


================================================
FILE: .github/workflows/regression-tests.yml
================================================
name: Regression Tests

on:
  schedule:
    - cron: "0 0/3 * * *"
  workflow_dispatch:

jobs:
  build:
    if: github.repository == 'dragonflydb/dragonfly'
    strategy:
      matrix:
        # Test of these containers
        container: ["ubuntu-dev:24"]
        proactor: [Uring]
        build-type: [Debug, Release]
        runner: [ubuntu-latest, [self-hosted, linux, ARM64]]

    runs-on: ${{ matrix.runner }}

    permissions:
      id-token: write
      contents: read

    container:
      image: ghcr.io/romange/${{ matrix.container }}
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
      volumes:
        - /var/crash:/var/crash
        - /:/hostroot
        - /mnt:/mnt
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true

      - name: Print environment info
        run: |
          cat /proc/cpuinfo
          ulimit -a
          env
          lsblk -l

      - name: Build Dragonfly
        uses: ./.github/actions/builder
        with:
          build-type: ${{matrix.build-type}}
          targets: 'dragonfly'

      - name: Authenticate to AWS
        uses: aws-actions/configure-aws-credentials@v5
        with:
          role-to-assume: ${{ secrets.AWS_CI_S3_ROLE_ARN }}
          aws-region: us-east-1

      - name: Run regression tests action
        uses: ./.github/actions/regression-tests
        with:
          dfly-executable: dragonfly
          gspace-secret: ${{ secrets.GSPACES_BOT_DF_BUILD }}
          build-folder-name: build
          filter: ${{ matrix.build-type == 'Release' && 'not debug_only' || 'not opt_only' }}
          s3-bucket: ${{ secrets.S3_REGTEST_BUCKET }}

      - name: Upload logs on failure
        if: failure()
        uses: actions/upload-artifact@v6
        with:
          name: logs
          path: /tmp/failed/*

  lint-test-chart:
    if: github.repository == 'dragonflydb/dragonfly'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: ./.github/actions/lint-test-chart


================================================
FILE: .github/workflows/release.yml
================================================
name: Version Release

on:
  push:
    tags:
    - 'v*'

permissions:
  contents: write

env:
  RELEASE_DIR: build-release

jobs:
  create-release:
    runs-on: ubuntu-latest
    steps:
      - name: Create Release
        uses: ncipollo/release-action@v1
        with:
          allowUpdates: true
          omitBody: true
          prerelease: true
          draft: true
          token: ${{ secrets.GITHUB_TOKEN }}

  build-arm:
    runs-on: ubuntu-24.04-arm
    name: Build arm64 on ubuntu-24.04-arm
    needs: create-release
    container:
      image: ghcr.io/romange/ubuntu-dev:20-gcc14
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
    steps:
    - uses: actions/checkout@v6
      with:
        submodules: true
    - name: Build artifacts
      run: |
            # Work around https://github.com/actions/checkout/issues/766
            git config --global --add safe.directory "$GITHUB_WORKSPACE"
            git describe --always --tags ${{ github.sha }}
            ./tools/release.sh
            ./tools/packaging/generate_debian_package.sh ${{ env.RELEASE_DIR }}/dragonfly-aarch64
            mv dragonfly_*.deb ${{ env.RELEASE_DIR }}/

    - name: Upload
      uses: actions/upload-artifact@v6
      with:
        name: dragonfly-aarch64
        path: |
          ${{ env.RELEASE_DIR }}/dragonfly-*tar.gz
          ${{ env.RELEASE_DIR }}/dragonfly_*.deb
          ${{ env.RELEASE_DIR }}/dfly_bench-*tar.gz

  build-native:
    runs-on: ubuntu-latest
    needs: create-release
    strategy:
      matrix:
        include:
          # Build with these flags
          - name: debian
            container: ubuntu-dev:20-gcc14
          - name: rpm
            container: fedora:30-gcc14
    container:
      image: ghcr.io/romange/${{ matrix.container }}
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
      # Some tests which launch their own containers need a mounted volume to write through files
      # into child containers
      volumes:
        - /mnt:/mnt

    steps:
    - uses: actions/checkout@v6
      with:
        submodules: true
    - name: Configure
      run: |
          if [ -f /etc/redhat-release ]; then
            dnf install -y rpm-build libstdc++-static
          fi
    - name: Build artifacts
      timeout-minutes: 25
      run: |
          # Work around https://github.com/actions/checkout/issues/766
          git config --global --add safe.directory "$GITHUB_WORKSPACE"
          git describe --always --tags ${{ github.sha }}

          # set WITH_SIMSIMD=OFF for fedora:30
          if [ "${{ matrix.name }}" == 'rpm' ]; then
            export WITH_SIMSIMD="OFF"
          fi
          ./tools/release.sh

          # once the build is over, we want to generate a Debian package
          if [ -f /etc/debian_version ]; then
            ./tools/packaging/generate_debian_package.sh ${{ env.RELEASE_DIR }}/dragonfly-x86_64
          else
            echo "Creating package for ${{github.ref_name}}"
            ./tools/packaging/rpm/build_rpm.sh ${{ env.RELEASE_DIR }}/dragonfly-x86_64.tar.gz ${{github.ref_name}}
          fi

    - name: Save artifacts
      run: |
          # place all artifacts at the same location
          set -eu
          mkdir -p results-artifacts
          if [ -f /etc/debian_version ]; then
            mv ${{ env.RELEASE_DIR }}/dragonfly-*tar.gz results-artifacts
            mv dragonfly_*.deb results-artifacts
            mv ${{ env.RELEASE_DIR }}/dfly_bench-*tar.gz results-artifacts
          else
            ls -l *.rpm
            mv ./*.rpm ./results-artifacts/
          fi

    - name: Upload
      uses: actions/upload-artifact@v6
      with:
        name: dragonfly-amd64-${{ matrix.name }}
        path: results-artifacts/*

  test-regression:
    needs: [build-native, build-arm]
    runs-on: ${{ matrix.runner }}
    strategy:
      matrix:
        include:
          - name: amd64
            runner: ubuntu-latest
            artifact: dragonfly-amd64-debian
            binary: dragonfly-x86_64
          - name: arm64
            runner: ubuntu-24.04-arm
            artifact: dragonfly-aarch64
            binary: dragonfly-aarch64
    container:
      image: ghcr.io/romange/ubuntu-dev:24
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
      volumes:
        - /mnt:/mnt
    steps:
    - uses: actions/checkout@v6
      with:
        submodules: true
    - name: Download artifacts
      uses: actions/download-artifact@v7
      with:
        name: ${{ matrix.artifact }}
        path: results-artifacts
    - name: Extract artifacts
      run: |
        set -eu
        mkdir -p ${{ env.RELEASE_DIR }}
        tar -xzf results-artifacts/dragonfly-*dbgsym.tar.gz -C ${{ env.RELEASE_DIR }}
    - name: Run regression tests
      uses: ./.github/actions/regression-tests
      with:
        dfly-executable: ${{ matrix.binary }}
        gspace-secret: ${{ secrets.GSPACES_BOT_DF_BUILD }}
        build-folder-name: ${{ env.RELEASE_DIR }}
        filter: 'not debug_only'

  publish_release:
    runs-on: ubuntu-latest
    needs: test-regression
    steps:
      - uses: actions/download-artifact@v7
        name: Download files
        with:
          path: artifacts
      - name: See all the artifacts
        run: |
          ls -lR artifacts/
      - uses: ncipollo/release-action@v1
        with:
          artifacts: "artifacts/dragonfly-*/*"
          allowUpdates: true
          draft: true
          prerelease: true
          omitNameDuringUpdate: true
          token: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .github/workflows/repeat-tests.yml
================================================
name: Repeat Tests

on:
  workflow_dispatch:
    inputs:
      branch:
        description: "The branch on which tests will be repeated"
        type: string
        required: false
      commit:
        description: "A specific commit SHA to test (takes precedence over branch)"
        type: string
        required: false
      count:
        description: "The number of times the tests will be repeated"
        type: number
        required: false
        default: 1
      expression:
        description: "A pytest expression which will filter the tests"
        required: true
        type: string
      timeout:
        description: "Overall timeout for all test runs"
        required: false
        type: string
        default: "60m"
      epoll:
        description: "Force epoll mode in test"
        required: false
        type: string
        default: "no"
      use_release:
        description: "Use latest release instead of building dragonfly"
        required: false
        type: string
        default: "no"
      vmodule_expression:
        description: "Emit verbose dragonfly logs for modules, eg x=2,y=3"
        required: false
        type: string
        default: ""
      build_type:
        description: "Build type: Debug or Release"
        required: false
        type: choice
        options:
          - Debug
          - Release
        default: "Debug"

jobs:
  build:
    strategy:
      matrix:
        container: ["ubuntu-dev:24"]
        proactor: [Uring]
        build-type: ["${{ inputs.build_type || 'Debug' }}"]
        runner: [ubuntu-latest]

    runs-on: ${{ matrix.runner }}

    permissions:
      id-token: write
      contents: read

    container:
      image: ghcr.io/romange/${{ matrix.container }}
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
      volumes:
        - /var/crash:/var/crash

    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true
          ref: ${{ inputs.commit || inputs.branch }}

      - name: Print environment info
        run: |
          cat /proc/cpuinfo
          ulimit -a
          env

      - name: Fetch release
        shell: bash
        if: ${{ inputs.use_release == 'yes' }}
        run: |
          mkdir "${GITHUB_WORKSPACE}"/build
          cd "${GITHUB_WORKSPACE}"/build
          wget -q https://github.com/dragonflydb/dragonfly/releases/latest/download/dragonfly-x86_64.tar.gz
          tar xf dragonfly-x86_64.tar.gz
          mv dragonfly-x86_64 dragonfly
          ls -l

      - name: Build Dragonfly
        if: ${{ inputs.use_release != 'yes' }}
        uses: ./.github/actions/builder
        with:
          build-type: ${{matrix.build-type}}
          targets: 'dragonfly'

      - name: Sync valkey tests
        uses: ./.github/actions/sync-valkey-tests
      - name: Authenticate to AWS
        uses: aws-actions/configure-aws-credentials@v5
        with:
          role-to-assume: ${{ secrets.AWS_CI_S3_ROLE_ARN }}
          aws-region: us-east-1

      - name: Run tests on repeat
        uses: ./.github/actions/repeat
        with:
          run-only-on-ubuntu-latest: true
          dfly-executable: dragonfly
          build-folder-name: build
          s3-bucket: ${{ secrets.S3_REGTEST_BUCKET }}
          expression: ${{ inputs.expression }}
          count: ${{ inputs.count }}
          timeout: ${{ inputs.timeout }}
          epoll: ${{ inputs.epoll }}
          vmodule_expression: ${{ inputs.vmodule_expression }}

      - name: Upload logs on failure
        if: failure()
        uses: actions/upload-artifact@v6
        with:
          name: logs
          path: /tmp/failed/*

      - name: Copy binary on a self hosted runner
        if: failure()
        run: |
          # We must use sh syntax.
          if [ "$RUNNER_ENVIRONMENT" = "self-hosted" ]; then
            cd ${GITHUB_WORKSPACE}/build
            timestamp=$(date +%Y-%m-%d_%H:%M:%S)
            mv ./dragonfly /var/crash/dragonfy_${timestamp}
          fi


================================================
FILE: .github/workflows/test-fakeredis.yml
================================================
---
name: Test Dragonfly/Fakeredis

on:
  workflow_dispatch:
  pull_request:

permissions:
  contents: read
  checks: write

concurrency:
  group: dragonfly-${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  test:
    runs-on: ubuntu-latest
    container:
      image: ghcr.io/romange/ubuntu-dev:22
      options: --security-opt seccomp=unconfined --sysctl "net.ipv6.conf.all.disable_ipv6=0"
    strategy:
      fail-fast: false
    name: "Run tests: "
    permissions:
      pull-requests: write
      checks: read

    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true

      - name: Install dependencies
        env:
          PYTHON_KEYRING_BACKEND: keyring.backends.null.Keyring
        shell: bash
        working-directory: tests/fakeredis
        run: |
          pip install poetry
          echo "$HOME/.poetry/bin" >> $GITHUB_PATH
          poetry install
      - name: Configure CMake
        run: |
          cmake -B ${GITHUB_WORKSPACE}/build \
            -DCMAKE_BUILD_TYPE=Debug -DWITH_AWS:BOOL=OFF -DWITH_GCP:BOOL=OFF -DWITH_GPERF:BOOL=OFF \
            -GNinja -L
          cd ${GITHUB_WORKSPACE}/build && pwd

      - name: Build
        run: |
          cd ${GITHUB_WORKSPACE}/build
          ninja dragonfly
          echo "-----------------------------"

          # The order of redirect is important
          ./dragonfly --proactor_threads=4  --noversion_check --port=6380  \
           --lua_resp2_legacy_float 1> /tmp/dragonfly.log 2>&1 &

      - name: Run tests
        working-directory: tests/fakeredis
        run: |
          # Some tests are pending on #5383
          poetry run pytest test/ \
          --ignore test/test_hypothesis/test_transaction.py \
          --ignore test/test_hypothesis/test_zset.py \
          --ignore test/test_hypotesis_joint/test_joint.py \
          --junit-xml=results-tests.xml  --html=report-tests.html -v
        continue-on-error: false  # Fail the job if tests fail

      - name: Show Dragonfly stats
        if: always()
        run: |
          redis-cli -p 6380 INFO ALL
      - name: Upload Tests Result xml
        if: always()
        uses: actions/upload-artifact@v6
        with:
          name: tests-result-logs
          path: |
            /tmp/dragonfly.*

      - name: Upload Tests Result html
        if: always()
        uses: actions/upload-artifact@v6
        with:
          name: report-tests.html
          path: tests/fakeredis/report-tests.html

      - name: Publish Test Report
        if: ${{ github.event_name == 'pull_request' }}
        uses: mikepenz/action-junit-report@v6
        with:
          report_paths: tests/fakeredis/results-tests.xml
          # Do not create a check run
          # annotate_only: true

  publish-html-results:
    name: Publish HTML Test Results to GitHub Pages
    needs: test
    if: ${{ github.ref == 'refs/heads/main' }}
    runs-on: ubuntu-latest
    permissions:
      pages: write      # to deploy to Pages
      id-token: write   # to verify the deployment originates from an appropriate source
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    steps:
      - name: Bundle Tests Result to one artifact
        uses: actions/upload-artifact/merge@v6
        with:
          delete-merged: true
          name: test-results-html
          pattern: '*.html'

      - name: Download html pages
        uses: actions/download-artifact@v7
        with:
          name: test-results-html
          path: results/

      - uses: actions/setup-python@v6
        with:
          cache-dependency-path: tests/fakeredis/poetry.lock
          python-version: "3.10"

      - name: Merge html results
        run: |
          pip install pytest-html-merger && mkdir merged
          pytest_html_merger -i results/ -o merged/index.html

      - name: Publish to GitHub Pages
        uses: actions/upload-pages-artifact@v4
        with:
          path: merged/
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4
        with:
          token: '${{ secrets.GITHUB_TOKEN }}'


================================================
FILE: .gitignore
================================================
build/*
build-*
clang/*
clang-*
.vscode/*.db
.vscode/settings.json
.vscode/launch.json
third_party
genfiles/*
*.sublime-*
*.orig
.tags
!third_party/include/*
*.pyc
/CMakeLists.txt.user
_deps
releases
.DS_Store
.idea/*
.hypothesis
.secrets
cmake-build-debug
.venv/
fuzz/artifacts/
fuzz/corpus/
tools/replay/traffic-replay

# Valkey-search integration tests (synced from external repo)
tests/dragonfly/valkey_search/integration/
_codeql_build_dir/


================================================
FILE: .gitmodules
================================================
[submodule "helio"]
	path = helio
	url = https://github.com/romange/helio.git


================================================
FILE: .gitorderfile
================================================
*.py
*.md
*.in
*.txt
*.sh
*.yml
*.h
*.cc
*.lua
*.go
*


================================================
FILE: .nvmrc
================================================
22.19


================================================
FILE: .pre-commit-config.yaml
================================================
default_stages: [pre-commit]
exclude: |
    (?x)(
      src/redis/.* |
      src/huff/.* |
      contrib/charts/dragonfly/ci/.* |
      patches/.*
    )
repos:
  - repo: local
    hooks:
      - id: conventional-commits
        name: Conventional Commit Minder
        entry: contrib/scripts/conventional-commits
        language: script
        stages: [commit-msg]
      - id: signed-commit
        name: Signed Commit Enforcer
        entry: contrib/scripts/signed-commit
        language: script
        stages: [commit-msg]

  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.3.0
    hooks:
      - id: trailing-whitespace
      - id: end-of-file-fixer

  - repo: https://github.com/pre-commit/mirrors-clang-format
    rev: v14.0.6
    hooks:
      - id: clang-format
        name: Clang formatting

  - repo: https://github.com/psf/black
    rev: 25.1.0
    hooks:
      - id: black


================================================
FILE: .pre-commit-hooks.yaml
================================================
- id: conventional-commits
  name: Conventional Commits Minder
  entry: contrib/scripts/conventional-commits
  language: script
  description: Conventional Commits Enforcement at the `git commit` client-side level
  always_run: true
  stages: [commit-msg]

- id: signed-commit
  name: Signed Commit Enforcer
  entry: contrib/scripts/signed-commit
  language: script
  description: Ensures all commits contain a Signed-off-by line
  always_run: true
  stages: [commit-msg]


================================================
FILE: .snyk
================================================
# Snyk (https://snyk.io) policy file
exclude:
 global:
   - tests/integration/**
   - contrib/charts/**


================================================
FILE: .vscode/c_cpp_properties.json
================================================
{
  "configurations": [
    {
      "name": "Linux",
      "includePath": [
        "${default}"
      ],
      "cStandard": "c17",
      "cppStandard": "c++17",
      "intelliSenseMode": "${default}",
      "compileCommands": "${workspaceFolder}/build-dbg/compile_commands.json",
      "configurationProvider": "ms-vscode.cmake-tools"
    }
  ],
  "version": 4
}


================================================
FILE: AGENTS.md
================================================
# Dragonfly Development Guide

> **Essential reference for working with the Dragonfly codebase**
> Architecture, build system, testing infrastructure, and development workflows.

---

## Table of Contents

1. [Critical Workflow Rules](#critical-workflow-rules)
2. [Quick Command Reference](#quick-command-reference)
3. [Project Overview](#project-overview)
4. [Repository Structure](#repository-structure)
5. [Build Instructions](#build-instructions)
6. [Testing](#testing)
7. [CI/CD Pipeline](#cicd-pipeline)
8. [Code Style & Pre-commit Hooks](#code-style--pre-commit-hooks)
9. [Third-Party Dependencies](#third-party-dependencies)
10. [Platform Support](#platform-support)
11. [CMake Build Options](#cmake-build-options)
12. [Key Files Reference](#key-files-reference)
13. [Common Pitfalls](#common-pitfalls)
14. [Debugging Tips](#debugging-tips)
15. [Validation Checklist](#validation-checklist)

---

## Critical Workflow Rules

**MANDATORY - Always Follow This Order:**

1. ✅ **Read Before Edit** - Always read files before modifying
2. ✅ **Use Correct Build Commands** - See [Quick Command Reference](#quick-command-reference) below
3. ✅ **Test After Changes** - Build and run a relevant unit test -
   `ninja <unit_test> && ./unit_test`
4. ✅ **Format Code** - `pre-commit run --files <files>`
5. ✅ **Follow Architecture** - See [Architecture Patterns](#architecture-patterns) below

### Pull Request Guidelines

**Conciseness is Key**: PR descriptions should be short, focused, and easy to scan.
- **Title**: Imperative, descriptive (e.g., "Fix fiber stack overflow in test_reply_guard_oom")
- **Summary**: 1-2 sentences explaining *what* changed and *why*
- **Changes**: Bullet points for key changes
- **Fixes**: Link issues (e.g., "Fixes #123")
- **Commit messages**: Keep every line (subject and body) <= 100 characters; wrap long descriptions

---

## Quick Command Reference

**CRITICAL: Read the full sections below for context. These are shortcuts only.**

### Building (see [Build Instructions](#build-instructions) for details)

```bash
# Debug build (for development)
./helio/blaze.sh
cd build-dbg && ninja dragonfly              # Build main binary
cd build-dbg && ninja generic_family_test    # Build specific test

# Release build (for production/benchmarking)
./helio/blaze.sh -release
cd build-opt && ninja dragonfly
```

### Testing (see [Testing](#testing) for details)

```bash
# C++ Unit Tests
cd build-dbg
ctest -V -L DFLY                                    # Run all tests
./generic_family_test                               # Run specific test binary
./generic_family_test --gtest_filter="Set.*"        # Run specific test case
```

### Code Formatting

```bash
# Setup (once)
pipx install pre-commit clang-format black
pre-commit install

# Format code
pre-commit run --files <files>              # Format specific files
pre-commit run --all-files                  # Format all files
```

### Common Operations

```bash
# Check git status
git status

# Check current branch
git branch

# View recent commits
git log --oneline -10
```

---

## Architecture Patterns

**Code Style**: [.clang-format](.clang-format) - snake_case vars, PascalCase functions, kPascalCase constants

**DO ✅**:
- Fiber-aware: `util::fb2::Mutex`, `util::fb2::Fiber` → [helio/util/fibers/](helio/util/fibers/)
- Per-shard ops (no global state) → [docs/df-share-nothing.md](docs/df-share-nothing.md)
- Command pattern → [src/server/set_family.cc](src/server/set_family.cc)
- Error handling: `OpStatus` → [src/server/common.h](src/server/common.h)
- Test patterns → [tests/dragonfly/conftest.py](tests/dragonfly/conftest.py)

**DON'T ❌**:
- `std::thread`, `std::mutex` (deadlocks!)
- Global mutable state
- Edit without reading
- Skip tests
- Use `./tools/docker/build.sh` for local development (use `ninja` instead)
- Use `make` for incremental builds (use `ninja` instead)

---

## Project Overview

**Dragonfly** is a high-performance, Redis and Memcached compatible in-memory data store written in C++20. It delivers significantly higher throughput than traditional single-threaded Redis implementations through innovative architectural choices.

### Key Characteristics

- **Language**: C++20 (Google C++ Style Guide 2020 version)
- **Architecture**: Shared-nothing multi-threaded design (via `helio` library)
- **Performance**: Uses io_uring (Linux 5.11+) for high-performance async I/O, with epoll fallback
- **Threading Model**: Fiber-based cooperative multitasking with lock-free data structures
- **Build System**: CMake + Ninja via `helio/blaze.sh` wrapper script
- **Target Platform**: Linux (kernel 5.11+ recommended), FreeBSD support available
- **Protocols**: Redis RESP2/RESP3, Memcached binary protocol
- **Compatibility**: Drop-in replacement for Redis API coverage

### Architectural Highlights

**For detailed architecture documentation, see [docs/df-share-nothing.md](docs/df-share-nothing.md)**

1. **Shared-Nothing Design**: Each thread operates independently with its own data structures, minimizing lock contention
2. **Helio Framework**: Custom I/O and threading library built on io_uring/epoll with fiber support
3. **DashTable**: Novel hash table implementation optimized for multi-core systems - see [docs/dashtable.md](docs/dashtable.md)
4. **Transaction Model**: Non-blocking optimistic transactions - see [docs/transaction.md](docs/transaction.md)
5. **Tiering Support**: Optional disk-backed storage for large datasets
6. **Search Module**: Full-text search capabilities (when enabled with WITH_SEARCH)

---

## Repository Structure

```
dragonfly/
├── src/                      # Main C++ source code
│   ├── server/               # Core server implementation
│   │   ├── dfly_main.cc      # Main entry point
│   │   ├── main_service.cc   # Service lifecycle & command routing
│   │   ├── db_slice.cc       # Per-thread database shard
│   │   ├── engine_shard_set.cc # Shard management
│   │   ├── cluster/          # Cluster mode implementation
│   │   ├── journal/          # Replication journal
│   │   ├── tiering/          # Tiered storage
│   │   ├── search/           # Search module
│   │   └── acl/              # Access control lists
│   ├── core/                 # Core data structures
│   │   ├── dash.h            # DashTable hash table
│   │   ├── dense_set.h       # Compact set implementation
│   │   ├── string_map.h      # Optimized string-keyed maps
│   │   ├── search/           # Search core algorithms
│   │   └── json/             # JSON support
│   ├── facade/               # Network & command handling
│   │   ├── dragonfly_connection.cc # Connection management
│   │   ├── redis_parser.cc   # RESP protocol parser
│   │   └── memcache_parser.cc # Memcached protocol
│   └── redis/                # Redis-specific implementations
│       └── lua/              # Lua scripting support
│
├── helio/                    # Git submodule: I/O and threading library
│   │                         # ** DO NOT EDIT unless contributing to helio **
│   ├── util/                 # Utilities: fibers, I/O, synchronization
│   ├── io/                   # io_uring & epoll abstraction
│   └── blaze.sh              # Build configuration wrapper
│
├── tests/                    # Test suite
│   ├── dragonfly/            # Python pytest integration/regression tests
│   │   ├── conftest.py       # Pytest fixtures & configuration
│   │   ├── requirements.txt  # Python test dependencies
│   │   └── *.py              # Test files
│   └── pytest.ini            # Pytest configuration & markers
│
├── docs/                     # Documentation
│   ├── build-from-source.md  # Build instructions
│   ├── dashtable.md          # DashTable internals
│   ├── transaction.md        # Transaction model
│   ├── df-share-nothing.md   # Shared-nothing architecture
│   └── differences.md        # Differences from Redis
│
├── contrib/                  # Utilities
│   ├── docker/               # Docker configurations
│   └── charts/dragonfly/     # Helm chart for Kubernetes
│
├── tools/                    # Benchmarking & utility tools
│   └── packaging/            # Packaging scripts
│
├── CMakeLists.txt            # Root CMake configuration
├── .clang-format             # C++ formatting rules (clang-format v14.0.6)
├── .pre-commit-config.yaml   # Pre-commit hooks configuration
├── pyproject.toml            # Python formatting (Black, 100 chars)
└── CONTRIBUTING.md           # Contribution guidelines
```

### Critical Paths to Remember

- **Main entry**: `src/server/dfly_main.cc`
- **Command dispatch**: `src/server/main_service.cc`
- **Data storage**: `src/server/db_slice.cc`
- **Networking**: `src/facade/dragonfly_connection.cc`
- **Helio library**: `helio/` (I/O and threading library)

---

## Build Instructions

**For complete build instructions, see [docs/build-from-source.md](docs/build-from-source.md)**

### Quick Start

**Debug build** (for development):
```bash
./helio/blaze.sh
cd build-dbg && ninja dragonfly
./dragonfly --alsologtostderr
```

**Release build** (for production/benchmarking):
```bash
./helio/blaze.sh -release
cd build-opt && ninja dragonfly
```

**Production release build** (static linking, optimized):
```bash
make release           # Configure + build
make package           # Create release packages with debug symbols
```

The [Makefile](Makefile) builds production releases with:
- Static linking: libstdc++, libgcc, Boost, OpenSSL
- Architecture optimizations (x86_64: `-march=core2 -msse4.1 -mtune=skylake`)
- Debug symbols (compressed)
- Output: `build-release/dragonfly-{arch}.tar.gz`

**Common build options**:
- See [docs/build-from-source.md](docs/build-from-source.md) for all options

---

## Testing

**For complete testing documentation, see [tests/README.md](tests/README.md)**

### Quick Reference

**C++ Unit Tests**:
```bash
cd build-dbg
ctest -V -L DFLY                                    # Run all tests
./generic_family_test                               # Run specific test binary
./generic_family_test --gtest_filter="Set.*"        # Run specific test case
```

---

## CI/CD Pipeline

**For complete CI configuration, see [.github/workflows/ci.yml](.github/workflows/ci.yml)**

The CI workflow runs on all PRs and includes:
- **Pre-commit checks**: clang-format, black formatters
- **Build matrix**: Multiple OS/compiler/sanitizer combinations (Ubuntu 20/24, Alpine, GCC/Clang, ASAN/UBSAN)
- **Test execution**: C++ unit tests, Python integration tests, cluster mode tests
- **Additional validations**: Helm charts, Docker image builds

---

## Code Style & Pre-commit Hooks

**For complete contribution guidelines, see [CONTRIBUTING.md](CONTRIBUTING.md)**

**Code style configuration files**:
- **C++**: [.clang-format](.clang-format) - Google C++ Style Guide (2020), clang-format v14.0.6, 100 char limit
- **Python**: [pyproject.toml](pyproject.toml) - Black formatter, 100 char limit, PEP 8 compliant
- **Pre-commit hooks**: [.pre-commit-config.yaml](.pre-commit-config.yaml) - Automated formatting checks

**Quick setup**:
```bash
pipx install pre-commit clang-format black
pre-commit install
pre-commit run --all-files                          # Run all formatters
```

---

## Third-Party Dependencies

**Key Libraries**: Abseil (strings/flags), Boost 1.71+ (context/intrusive), mimalloc (allocator), jsoncons (JSON), OpenSSL (TLS), libunwind (traces)

**Build artifacts**: `build-dbg/third_party/` - DO NOT edit

**For complete dependency info, see [docs/build-from-source.md](docs/build-from-source.md)**

---

## Platform Support

**Linux**: Primary platform. Kernel 5.11+ (io_uring), 5.1+ (basic), < 5.1 (epoll fallback)
- Check: `uname -r`
- Force epoll: `--proactor_type=epoll`
- Docker: `--security-opt seccomp=unconfined`

**FreeBSD**: Supported (kqueue backend)

**macOS**: Not supported for production (use Docker/Linux)

**For complete platform info, see [docs/build-from-source.md](docs/build-from-source.md)**

---

## CMake Build Options

**For complete list of build options, see [docs/build-from-source.md](docs/build-from-source.md)**

### Common Options

Pass options to `helio/blaze.sh` with `-D` prefix:

```bash
./helio/blaze.sh -DWITH_SEARCH=OFF -DWITH_AWS=ON
```

**Most useful options**:
- `WITH_ASAN=ON` / `WITH_USAN=ON` - Enable sanitizers for debugging
- `WITH_SEARCH=OFF` - Disable search module for faster builds
- `WITH_AWS=OFF` / `WITH_GCP=OFF` - Disable cloud libraries
- `WITH_TIERING=OFF` - Disable disk storage
- `USE_MOLD=ON` - Faster linking with LTO (production builds)

**Quick configurations**:
```bash
# Minimal build (fast compilation)
./helio/blaze.sh -DWITH_GPERF=OFF -DWITH_AWS=OFF -DWITH_GCP=OFF -DWITH_TIERING=OFF -DWITH_SEARCH=OFF

# Full-featured (all options ON by default)
./helio/blaze.sh

# Production optimized
./helio/blaze.sh -release -DUSE_MOLD=ON
```

---

## Key Files Reference

Quick reference to the most important files in the codebase.

| Purpose | File Path |
|---------|-----------|
| **Entry Points & Core** | |
| Main entry point | `src/server/dfly_main.cc` |
| Server lifecycle & command routing | `src/server/main_service.cc` |
| Per-thread database shard | `src/server/db_slice.cc` |
| Shard management | `src/server/engine_shard_set.cc` |
| **Data Structures** | |
| DashTable hash table | `src/core/dash.h` |
| Dense set implementation | `src/core/dense_set.h` |
| String map | `src/core/string_map.h` |
| **Networking** | |
| Connection handling | `src/facade/dragonfly_connection.cc` |
| Redis protocol parser | `src/facade/redis_parser.cc` |
| Memcached protocol parser | `src/facade/memcache_parser.cc` |
| **Build System** | |
| Root CMake config | `CMakeLists.txt` |
| Build script wrapper | `helio/blaze.sh` |
| Server CMake config | `src/server/CMakeLists.txt` |
| **CI/CD** | |
| Main CI workflow | `.github/workflows/ci.yml` |
| Pre-commit config | `.pre-commit-config.yaml` |
| **Code Style** | |
| C++ formatting | `.clang-format` |
| Python formatting | `pyproject.toml` |
| **Testing** | |
| Pytest configuration | `tests/pytest.ini` |
| Pytest fixtures | `tests/dragonfly/conftest.py` |
| Test requirements | `tests/dragonfly/requirements.txt` |
| **Documentation** | |
| Build instructions | `docs/build-from-source.md` |
| Architecture overview | `docs/df-share-nothing.md` |
| DashTable internals | `docs/dashtable.md` |
| Transaction model | `docs/transaction.md` |
| **Configuration** | |
| Contributing guide | `CONTRIBUTING.md` |
| CLA agreement | `CLA.txt` |

---

## Common Pitfalls

1. **Pre-commit not installed**: `pipx install pre-commit clang-format black && pre-commit install`
2. **Wrong binary**: Debug: `build-dbg/dragonfly`, Release: `build-opt/dragonfly`
3. **Wrong build command**: Use `cd build-dbg && ninja <target>`, NOT `./tools/docker/build.sh`
4. **Test timeouts**: `timeout 20m ctest -V -L DFLY`
5. **ASAN leaks**: Check CI, suppress in `helio/util/asan_suppressions.txt`
6. **Helio modifications**: DON'T edit `helio/` (it's a git submodule - changes go upstream)
7. **CodeQL checks**: DON'T run codeql_checker when testing changes - it's slow and unnecessary for development

---

## Debugging Tips

**Logging**: `--alsologtostderr --v=1 --vmodule=module=2`

**ASAN**: `ASAN_OPTIONS=detect_leaks=1:symbolize=1`, suppressions: `helio/util/asan_suppressions.txt`

**CI reproduction**: See [.github/workflows/ci.yml](.github/workflows/ci.yml)

**Troubleshooting**: Check fiber deadlocks (use `util::fb2` not `std::mutex`), timeout issues (`--test_timeout`), ASAN reports

---

## Validation Checklist

Before claiming a task is complete, verify:

### Code Quality

- [ ] Code compiles without errors: `cd build-dbg && ninja dragonfly`
- [ ] Code compiles without warnings (CI uses `-Werror`)
- [ ] Code follows Google C++ Style Guide (run `clang-format`)
- [ ] No new ASAN/UBSAN violations

### Testing

- [ ] All existing C++ unit tests pass: `ctest -V -L DFLY`
- [ ] New feature has corresponding test coverage
- [ ] Tests pass in both Debug and Release builds
- [ ] Tests pass with ASAN/UBSAN enabled (if applicable)
- [ ] **DO NOT run codeql_checker** - it's slow and unnecessary for development testing

### Pre-commit & Style

- [ ] Pre-commit hooks installed: `pre-commit install`
- [ ] Code formatted with clang-format (C++) and black (Python)

### Documentation

- [ ] Public APIs have comments explaining purpose
- [ ] Complex algorithms have explanatory comments
- [ ] README or docs updated if behavior changes
- [ ] No commented-out code left in final commit

### Performance

- [ ] No obvious performance regressions (run benchmarks if needed)
- [ ] No unnecessary allocations in hot paths
- [ ] Lock-free data structures used where appropriate


================================================
FILE: CLA.txt
================================================
Thanks for your interest in contributing to Dragonfly™. By contributing to this project
in any way form or media you grant DragonflyDB Ltd. and its affiliates a perpetual, worldwide, non-exclusive, free of charge, royalty-free, irrevocable license to use,
modify, make available, reproduce, make derivatives, publicly display and perform, sublicense, sell, and distribute your contributions and any derivatives thereof as part of Dragonfly™.
You represent that You are legally entitled to grant the above license. You acknowledge that DragonflyDB currently distributes Dragonfly™ under the Business Source License 1.1 (BSL-1.1) license, and agree that your contribution may be distributed under BSL-1.1 as part of Dragonfly™. You also represent that your contributions are your original work and that neither the content contributed, nor making the contribution to Dragonfly™ violates any third party’ rights. If you are making this contribution while being engaged by any other company or entity, please make sure you have the necessary permissions required to do so.


================================================
FILE: CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.15 FATAL_ERROR)
set(PROJECT_CONTACT romange@gmail.com)

include(CheckCXXCompilerFlag)

enable_testing()

set(CMAKE_EXPORT_COMPILE_COMMANDS 1)

# AFL++ fuzzing support - must be set BEFORE project() command
option(USE_AFL "Enable AFL++ fuzzing" OFF)
if(USE_AFL)
  # Automatically set AFL++ compilers if not already set
  if(NOT CMAKE_C_COMPILER MATCHES "afl-" AND NOT CMAKE_CXX_COMPILER MATCHES "afl-")
    find_program(AFL_CC afl-clang-fast)
    find_program(AFL_CXX afl-clang-fast++)

    if(AFL_CC AND AFL_CXX)
      message(STATUS "AFL++ fuzzing enabled - setting compilers")
      set(CMAKE_C_COMPILER ${AFL_CC})
      set(CMAKE_CXX_COMPILER ${AFL_CXX})
    else()
      message(FATAL_ERROR "USE_AFL=ON but AFL++ compilers not found!\n"
              "Please install AFL++: apt install afl++ or build from source\n"
              "https://github.com/AFLplusplus/AFLplusplus")
    endif()
  endif()
endif()

# Set targets in folders
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
project(DRAGONFLY C CXX)
set(CMAKE_CXX_STANDARD 20)

# Disabled because it has false positives with ref-counted intrusive pointers.
CHECK_CXX_COMPILER_FLAG("-Wuse-after-free" HAS_USE_AFTER_FREE_WARN)
if (HAS_USE_AFTER_FREE_WARN)
    set(CMAKE_CXX_FLAGS "-Wno-use-after-free ${CMAKE_CXX_FLAGS}")
endif()

if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
    set(CMAKE_CXX_FLAGS "-Wthread-safety -Werror=thread-safety ${CMAKE_CXX_FLAGS}")
endif()

# We can not use here CHECK_CXX_COMPILER_FLAG because systems that do not support sanitizers
# fail during linking time.
set(CMAKE_REQUIRED_FLAGS "-fsanitize=address")
check_cxx_source_compiles("int main() { return 0; }" SUPPORT_ASAN)

set(CMAKE_REQUIRED_FLAGS "-fsanitize=undefined")
check_cxx_source_compiles("int main() { return 0; }" SUPPORT_USAN)
set(CMAKE_REQUIRED_FLAGS "")

# We must define all the required variables from the root cmakefile, otherwise
# they just disappear.
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/helio/cmake" ${CMAKE_MODULE_PATH})
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
option(DF_USE_SSL "Provide support for SSL connections" ON)

find_package(OpenSSL)

# AFL++ configuration - must be before sanitizer checks
if(USE_AFL)
  message(STATUS "AFL++ fuzzing mode active")
  message(STATUS "  C compiler: ${CMAKE_C_COMPILER}")
  message(STATUS "  C++ compiler: ${CMAKE_CXX_COMPILER}")

  # Add USE_AFL as compile definition so #ifdef USE_AFL works in code
  add_compile_definitions(USE_AFL)

  # AFL++ requires specific compiler flags for coverage instrumentation
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")

  # Force disable sanitizers when fuzzing (AFL++ incompatible with ASAN/UBSAN)
  message(STATUS "Disabling sanitizers (incompatible with AFL++ fuzzing)")
  set(WITH_ASAN OFF CACHE BOOL "Disable ASAN for fuzzing" FORCE)
  set(WITH_USAN OFF CACHE BOOL "Disable UBSAN for fuzzing" FORCE)

  # Disable AWS and GCP for fuzzing builds (not needed, reduces build time)
  message(STATUS "Disabling AWS and GCP integrations for fuzzing")
  set(WITH_AWS OFF CACHE BOOL "Disable AWS for fuzzing" FORCE)
  set(WITH_GCP OFF CACHE BOOL "Disable GCP for fuzzing" FORCE)
endif()

option(WITH_ASAN "Enable -fsanitize=address" OFF)
if (SUPPORT_ASAN AND WITH_ASAN)
  message(STATUS "address sanitizer enabled")
  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address")
endif()

option(WITH_USAN "Enable -fsanitize=undefined" OFF)
if (SUPPORT_USAN AND WITH_USAN)
  message(STATUS "ub sanitizer enabled")
  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=undefined")
endif()

include(third_party)
include(internal)

include_directories(src)
include_directories(helio)

add_subdirectory(helio)
add_subdirectory(src)


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
  overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
  advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
  address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
https://github.com/dragonflydb/dragonfly/discussions.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior,  harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to Dragonfly DB

Thank you for your interest in Dragonfly DB.

Feel free to browse our [Discussions](https://github.com/dragonflydb/dragonfly/discussions) and [Issues](https://github.com/dragonflydb/dragonfly/issues)

## Build from source

See [building from source](./docs/build-from-source.md)

Please note that to build a development/debug version,
it's better to alter the configure and build steps above with:

```sh
./helio/blaze.sh   # without '-release' flag. Creates build-dbg subfolder
cd build-dbg && ninja dragonfly
```

## Before you make your changes

```sh
cd dragonfly   # project root

# Make sure you have 'pre-commit', 'clang-format' and black is installed
pipx install pre-commit clang-format
pipx install pre-commit black

# IMPORTANT! Enable our pre-commit message hooks
# This will ensure your commits match our formatting requirements
pre-commit install
```

This step must be done on each machine you wish to develop and contribute from to activate the `commit-msg` and `commit` hooks client-side.

Once you have done these things, we look forward to adding your contributions and improvements to the Dragonfly DB project.

## Unit testing

```
# Build a specific test
cd build-dbg && ninja [test_name]
# e.g cd build-dbg && ninja generic_family_test

# Run
./[test_name]
# e.g ./generic_family_test
```

## Rendering Helm golden files

A Golang golden test is included in the dragonfly helm chart. This test will render the chart and compare the output to a golden file. If the output has changed, the test will fail and the golden file will need to be updated. This can be done by running:

```bash
cd contrib/charts/dragonfly
go test -v ./... -update
```

This makes it easy to see the changes in the rendered output without having to manually run the `helm template` and diff the output.

## Signoff Commits

All community submissions must include a signoff.

```bash
git commit -s -m '...'
```

## Squash Commits

Please squash all commits for a change into a single commit (this can be done using "git rebase -i"). Do your best to have a well-formed commit message for the change.

## Use Conventional Commits

This repo uses [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)

The Conventional Commits specification is a lightweight convention on top of commit messages.
It provides an easy set of rules for creating an explicit commit history;
which makes it easier to write automated tools on top of.
This convention dovetails with [SemVer](http://semver.org),
by describing the features, fixes, and breaking changes made in commit messages.

The commit message should be structured as follows:

---

```
<type>[optional scope]: <description>

[optional body]

[optional footer(s)]
```

---

This repo uses automated tools to standardize the formatting of code, text files, and commits.

- [Pre-commit hooks](#pre-commit-hooks) validate and automatically apply code
   formatting rules.

## `pre-commit` hooks

The Dragonfly DB team has agreed to systematically use several pre-commit hooks to
normalize the formatting of code. You need to install and enable pre-commit to have these used
when you do your commits.

## Codebase guidelines

This repo conforms to the Google's C++ Style Guide. Keep in mind we use an older version of the
style guide which can be found [here](https://github.com/google/styleguide/blob/505ba68c74eb97e6966f60907ce893001bedc706/cppguide.html).

Any exceptions to the rules specified in the style guide will be documented here.

## License terms for contributions

Please see our [CLA agreement](./CLA.txt)

## THANK YOU FOR YOUR CONTRIBUTIONS


================================================
FILE: CONTRIBUTORS.md
================================================
# Contributors (alphabetical by surname)

* **[Amir Alperin](https://github.com/iko1)**
* **[Philipp Born](https://github.com/tamcore)**
  * Helm Chart
* **[Meng Chen](https://github.com/matchyc)**
* **[Yuxuan Chen](https://github.com/YuxuanChen98)**
* **[Pawel Kaplinski](https://github.com/pawelKapl)**
* **[Redha Lhimeur](https://github.com/redhal)**
* **[Braydn Moore](https://github.com/braydnm)**
* **[Logan Raarup](https://github.com/logandk)**
* **[Ryan Russell](https://github.com/ryanrussell)**
  * Docs & Code Readability
* **[Ali-Akber Saifee](https://github.com/alisaifee)**
* **[Elle Y](https://github.com/inohime)**
* **[ATM SALEH](https://github.com/ATM-SALEH)**
* **[Shohei Shiraki](https://github.com/highpon)**
* **[Leonardo Mello](https://github.com/lsvmello)**
* **[Nico Coetzee](https://github.com/nicc777)**


================================================
FILE: LICENSE.md
================================================
# Dragonfly Business Source License 1.1

<u>License</u>: Business Source License 1.1 [BSL 1.1](https://spdx.org/licenses/BUSL-1.1.html)

<u>Licensor</u>: DragonflyDB, Ltd.

<u>Licensed Work</u>: Dragonfly including the software components, or any portion of them, and any modification.

<u>Change Date</u>: March 1, 2029

<u>Change License</u>: [Apache License, Version
2.0](https://www.apache.org/licenses/LICENSE-2.0), as published by the
Apache Foundation.

<u>Additional Use Grant</u>: You may make use of the Licensed Work (i) only as part of your own product or service, provided it is not an in-memory data store product or service; and (ii) provided that you do not use, provide, distribute, or make available the Licensed Work as a Service.
A “Service” is a commercial offering, product, hosted, or managed service, that allows third parties (other than your own employees and contractors acting on your behalf) to access and/or use the Licensed Work or a substantial set of the features or functionality of the Licensed Work to third parties as a software-as-a-service, platform-as-a-service, infrastructure-as-a-service or other similar services that compete with Licensor products or services.

Text of BSL 1.1

The Licensor hereby grants you the right to copy, modify, create
derivative works, redistribute, and make non-production use of the
Licensed Work. The Licensor may make an Additional Use Grant, above,
permitting limited production use.

Effective on the Change Date, or the fourth anniversary of the first
publicly available distribution of a specific version of the Licensed
Work under this License, whichever comes first, the Licensor hereby
grants you rights under the terms of the Change License, and the rights
granted in the paragraph above terminate.

If your use of the Licensed Work does not comply with the requirements
currently in effect as described in this License, you must purchase a
commercial license from the Licensor, its affiliated entities, or
authorized resellers, or you must refrain from using the Licensed Work.

All copies of the original and modified Licensed Work, and derivative
works of the Licensed Work, are subject to this License. This License
applies separately for each version of the Licensed Work and the Change
Date may vary for each version of the Licensed Work released by
Licensor.

You must conspicuously display this License on each original or modified
copy of the Licensed Work. If you receive the Licensed Work in original
or modified form from a third party, the terms and conditions set forth
in this License apply to your use of that work.

Any use of the Licensed Work in violation of this License will
automatically terminate your rights under this License for the current
and all other versions of the Licensed Work.

This License does not grant you any right in any trademark or logo of
Licensor or its affiliates (provided that you may use a trademark or
logo of Licensor as expressly required by this License).

TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED
ON AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND
CONDITIONS, EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION)
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
NON-INFRINGEMENT, AND TITLE.


================================================
FILE: Makefile
================================================
BUILD_ARCH := $(shell uname -m)
RELEASE_NAME := "dragonfly-${BUILD_ARCH}"
HELIO_RELEASE_FLAGS = -DHELIO_RELEASE_FLAGS="-g"
HELIO_USE_STATIC_LIBS = ON
HELIO_OPENSSL_USE_STATIC_LIBS = ON
HELIO_ENABLE_GIT_VERSION = ON
HELIO_WITH_UNWIND ?= OFF
RELEASE_DIR=build-release
WITH_SIMSIMD ?= ON

# Some distributions (old fedora) have incorrect dependencies for crypto
# so we add -lz for them.
LINKER_FLAGS=-lz

# equivalent to: if $(uname_m) == x86_64 || $(uname_m) == amd64
# Override HELIO_MARCH_OPT via environment: make HELIO_MARCH_OPT="-march=native"
ifneq (, $(filter $(BUILD_ARCH),x86_64 amd64))
HELIO_MARCH_OPT ?= -march=core2 -msse4.1 -mpopcnt -mtune=skylake
endif

# For release builds we link statically libstdc++ and libgcc. Currently,
# all the release builds are performed by gcc.
LINKER_FLAGS += -static-libstdc++ -static-libgcc

# Optional ASAN support: make ASAN=1 release
ifdef ASAN
SANITIZE_COMPILE_FLAGS = -fsanitize=address -Wno-maybe-uninitialized
SANITIZE_LINK_FLAGS = -fsanitize=address
endif

HELIO_FLAGS = -DHELIO_RELEASE_FLAGS="-g" \
			  -DCMAKE_CXX_FLAGS="$(SANITIZE_COMPILE_FLAGS)" \
			  -DCMAKE_EXE_LINKER_FLAGS="$(LINKER_FLAGS) $(SANITIZE_LINK_FLAGS)" \
              -DBoost_USE_STATIC_LIBS=$(HELIO_USE_STATIC_LIBS) \
              -DOPENSSL_USE_STATIC_LIBS=$(HELIO_OPENSSL_USE_STATIC_LIBS) \
              -DENABLE_GIT_VERSION=$(HELIO_ENABLE_GIT_VERSION) \
              -DWITH_SIMSIMD=$(WITH_SIMSIMD) \
              -DWITH_UNWIND=$(HELIO_WITH_UNWIND) -DMARCH_OPT="$(HELIO_MARCH_OPT)"

.PHONY: default

configure:
	cmake -L -B $(RELEASE_DIR) -DCMAKE_BUILD_TYPE=Release -GNinja $(HELIO_FLAGS)

build:
	cd $(RELEASE_DIR); \
	ninja dfly_bench dragonfly && ldd dragonfly

package:
	cd $(RELEASE_DIR); \
	tar cvfz $(RELEASE_NAME)-dbgsym.tar.gz dragonfly ../LICENSE.md; \
	objcopy \
		--remove-section=".debug_*" \
		--remove-section="!.debug_line" \
		--compress-debug-sections \
		dragonfly \
		$(RELEASE_NAME); \
	tar cvfz $(RELEASE_NAME).tar.gz $(RELEASE_NAME) ../LICENSE.md; \
	objcopy \
		--remove-section=".debug_*" \
		--remove-section="!.debug_line" \
		--compress-debug-sections \
		dfly_bench \
		dfly_bench-$(BUILD_ARCH); \
	tar cvfz dfly_bench-$(BUILD_ARCH).tar.gz dfly_bench-$(BUILD_ARCH)

release: configure build

default: release


================================================
FILE: README.ja-JP.md
================================================
<p align="center">
  <a href="https://dragonflydb.io">
    <img  src="/.github/images/logo-full.svg"
      width="284" border="0" alt="Dragonfly">
  </a>
</p>

[![ci-tests](https://github.com/dragonflydb/dragonfly/actions/workflows/ci.yml/badge.svg)](https://github.com/dragonflydb/dragonfly/actions/workflows/ci.yml) [![Twitter URL](https://img.shields.io/twitter/follow/dragonflydbio?style=social)](https://twitter.com/dragonflydbio)

その他の言語:  [English](README.md) [简体中文](README.zh-CN.md) [한국어](README.ko-KR.md) [Português](README.pt-BR.md)

[Web サイト](https://www.dragonflydb.io/) • [ドキュメント](https://dragonflydb.io/docs) • [クイックスタート](https://www.dragonflydb.io/docs/getting-started) • [コミュニティ Discord](https://discord.gg/HsPjXGVH85) • [Dragonfly Forum](https://dragonfly.discourse.group/) • [Join the Dragonfly Community](https://www.dragonflydb.io/community)

[GitHub Discussions](https://github.com/dragonflydb/dragonfly/discussions) • [GitHub Issues](https://github.com/dragonflydb/dragonfly/issues) • [コントリビュート](https://github.com/dragonflydb/dragonfly/blob/main/CONTRIBUTING.md)

## 世界最速のインメモリデータストア

Dragonfly は最新のアプリケーションワークロードのために構築されたインメモリデータストアです。

Redis や Memcached の API と完全に互換性があるため、Dragonfly を採用するためにコードを変更する必要はありません。従来のインメモリデータストアと比較して、Dragonfly は 25 倍のスループット、より低いテールレイテンシでより高いキャッシュヒット率、そして容易な垂直スケーラビリティを提供します。

## コンテンツ

- [ベンチマーク](#ベンチマーク)
- [クイックスタート](https://github.com/dragonflydb/dragonfly/tree/main/docs/quick-start)
- [コンフィグ](#コンフィグ)
- [ロードマップとステータス](#ロードマップとステータス)
- [デザイン決定](#デザイン決定)
- [バックグラウンド](#バックグラウンド)

## <a name="ベンチマーク"><a/>ベンチマーク

<img src="http://static.dragonflydb.io/repo-assets/aws-throughput.svg" width="80%" border="0"/>

ベンチマークでは、Dragonfly は Redis と比較して 25 倍のスループットを示し、c6gn.16xlarge で 3.8M QPS を超えました。

Dragonfly のピークスループットにおける 99 パーセンタイルのレイテンシ指標:

| op    | r6g   | c6gn  | c7g   |
|-------|-------|-------|-------|
| set   | 0.8ms | 1ms   | 1ms   |
| get   | 0.9ms | 0.9ms | 0.8ms |
| setex | 0.9ms | 1.1ms | 1.3ms |

*すべてのベンチマークは `memtier_benchmark` (下記参照) を使い、スレッド数はサーバーとインスタンスタイプごとに調整しました。`memtier` は別の c6gn.16xlarge マシンで実行した。SETEX ベンチマークの有効期限は 500 に設定し、テストが終了しても有効であることを確認しました。*

```bash
  memtier_benchmark --ratio ... -t <threads> -c 30 -n 200000 --distinct-client-seed -d 256 \
     --expiry-range=...
```

パイプラインモード `--pipeline=30` では、Dragonfly は SET 操作で **10M QPS**、GET 操作で **15M QPS** に達する。

### Dragonfly vs. Memcached

AWS 上の c6gn.16xlarge インスタンスで Dragonfly と Memcached を比較した。

同程度のレイテンシで、Dragonfly のスループットは Memcached のスループットを書き込みと読み込みの両方のワークロードで上回った。Dragonfly は、[Memcached の書き込みパス](docs/memcached_benchmark.md)での競合により、書き込みワークロードでより優れたレイテンシを示しました。

#### SET ベンチマーク

| Server    | QPS(thousands qps) | latency 99% | 99.9%   |
|:---------:|:------------------:|:-----------:|:-------:|
| Dragonfly |  🟩 3844           |🟩 0.9ms     | 🟩 2.4ms |
| Memcached |   806              |   1.6ms     | 3.2ms    |

#### GET ベンチマーク

| Server    | QPS(thousands qps) | latency 99% | 99.9%   |
|-----------|:------------------:|:-----------:|:-------:|
| Dragonfly | 🟩 3717            |   1ms       | 2.4ms   |
| Memcached |   2100             |  🟩 0.34ms  | 🟩 0.6ms |


Memcached は読み取りベンチマークでより低いレイテンシを示したが、スループットも低かった。

### メモリ効率

メモリ効率をテストするために、`debug populate 5000000 key 1024` コマンドを使用して Dragonfly と Redis に ~5GB のデータを入れ、`memtier` コマンドで更新トラフィックを送信し、`bgsave` コマンドでスナップショットを開始しました。

この図は、各サーバがメモリ効率の面でどのような挙動を示したかを示している。

<img src="http://static.dragonflydb.io/repo-assets/bgsave-memusage.svg" width="70%" border="0"/>

Dragonfly はアイドル状態では Redis よりも 30% メモリ効率が高く、スナップショットフェーズではメモリ使用量の目に見える増加は見られなかった。ピーク時には Redis のメモリ使用量は Dragonfly の 3 倍近くまで増加しました。

Dragonfly はスナップショットをより早く、数秒以内に終了させました。

Dragonfly のメモリ効率の詳細については、[Dashtable ドキュメント](/docs/dashtable.md)を参照してください。



## <a name="コンフィグ"><a/>コンフィグ

Dragonfly は一般的な Redis の引数をサポートしています。例えば `dragonfly --requirepass=foo --bind localhost`。

Dragonfly は現在、以下の Redis 固有の引数をサポートしています:
 * `port`: Redis 接続ポート (`default: 6379`).
 * `bind`: ローカルホストからの接続のみを許可する場合は `localhost` を、**その IP** アドレスへの接続 (つまり外部からの接続) を許可する場合はパブリック IP アドレスを指定する。
 * `requirepass`: AUTH 認証用のパスワード (`default: ""`)。
 * `maxmemory`: データベースが使用するメモリの上限 (人間が読めるバイト数) (`default: 0`)。 `maxmemory` に `0` を指定すると、プログラムが自動的に最大メモリ使用量を決定する。
 * `dir`: Dragonfly Docker はデフォルトで `/data` フォルダをスナップショットに使用し、CLI は `""` を使用する。`v` の Docker オプションでホストフォルダにマッピングできる。
 * `dbfilename`: データベースを保存・ロードするファイル名 (`default: dump`).

Dragonfly 特有の議論もある:
 * `memcached_port`: Memcached 互換 API を有効にするポート (`default: disabled`)。
 * `keys_output_limit`: `keys` コマンドで返されるキーの最大数(`default: 8192`)。`keys` は危険なコマンドであることに注意してください。あまりに多くのキーを取得するとメモリ使用量が増大するため、結果を切り捨てています。
 * `dbnum`: `select` でサポートされるデータベースの最大数。
 * `cache_mode`: 以下の[斬新なキャッシュデザイン](#斬新なキャッシュデザイン)のセクションを参照してください。
 * `hz`: キーの有効期限評価頻度 (`default: 100`)。この頻度が低いと、アイドル時の CPU 使用量が少なくなるが、その分古くなったキーをクリアする速度が遅くなる。
 * `primary_port_http_enabled`: もし `true` (`default: true`) なら、メイン TCP ポートで HTTP コンソールにアクセスできるようにする。
 * `admin_port`: 割り当てられたポートのコンソールへの管理者アクセスを有効にする(`default: disabled`)。HTTP と RESP プロトコルの両方をサポートする。
 * `admin_bind`: 管理コンソールの TCP 接続を指定されたアドレスにバインドする(`default: any`)。HTTP と RESP の両方のプロトコルをサポートする。
 * `admin_nopass`: 割り当てられたポートで、認証トークンなしでコンソールへのオープン管理アクセスを有効にする (`default: false`)。HTTP と RESP の両方のプロトコルをサポートする。
 * `cluster_mode`: サポートするクラスターモード (`default: ""`)。現在は `emulated` のみをサポートしている。
 * `cluster_announce_ip`: クラスタコマンドがクライアントにアナウンスする IP。

### 一般的なオプションを使用した開始スクリプトの例:

```bash
./dragonfly-x86_64 --logtostderr --requirepass=youshallnotpass --cache_mode=true -dbnum 1 --bind localhost --port 6379  --maxmemory=12gb --keys_output_limit=12288 --dbfilename dump.rdb
```

また、`dragonfly --flagfile <filename>` を実行することで、設定ファイルから引数を指定することもできる。ファイルには 1 行に 1 つのフラグを記述し、キーと値のフラグには空白の代わりに等号を記述します。

ログの管理や TLS のサポートなど、その他のオプションについては `dragonfly --help` を実行してください。

## <a name="ロードマップとステータス"><a/>ロードマップとステータス

Dragonfly は現在、~185 個の Redis コマンドと、`cas` 以外のすべての Memcached コマンドをサポートしている。ほぼ Redis 5 API と同等ですが、Dragonfly の次のマイルストーンは基本的な機能を安定させ、レプリケーション API を実装することです。まだ実装されていないコマンドで必要なものがあれば、issue を開いてください。

Dragonfly ネイティブのレプリケーションについては、桁違いに高速な分散ログフォーマットを設計中です。

レプリケーション機能に続いて、Redis バージョン 3-6 の API に不足しているコマンドを追加していく予定です。

現在 Dragonfly がサポートしているコマンドについては、[コマンドリファレンス](https://dragonflydb.io/docs/category/command-reference)をご覧ください。

## <a name="デザイン決定"><a/> デザイン決定

### 斬新なキャッシュデザイン

Dragonfly には、シンプルでメモリ効率の良い、単一の統一された適応型キャッシュアルゴリズムがあります。

`cache_mode=true` フラグを渡すことでキャッシュモードを有効にすることができます。このモードをオンにすると、Dragonfly は将来つまずく可能性が最も低いアイテムを退避させますが、`maxmemory` の限界に近づいたときのみ退避させます。

### 比較的正確な有効期限

有効期限は 8 年以内。

ミリ秒精度の有効期限(PEXPIRE、PSETEX など)は、**2^28ms** を超える期限については、最も近い秒に丸められます。この誤差は 0.001% 以下であり、大きな範囲であれば許容範囲となります。

Dragonfly の期限と Redis の実装の詳細な違いについては、[こちら](docs/differences.md)を参照してください。

### ネイティブ HTTP コンソールと Prometheus 互換メトリクス

デフォルトでは、Dragonfly はメイン TCP ポート(6379)経由での HTTP アクセスを許可しています。その通り、Redis プロトコル経由でも HTTP プロトコル経由でも Dragonfly に接続することができます。ブラウザで試してみてください。HTTP アクセスには現在あまり情報がありませんが、将来的にはデバッグや管理に役立つ情報が含まれるようになる予定です。

Prometheus 互換のメトリクスを見るには、URL `:6379/metrics` にアクセスしてください。

Prometheus からエクスポートされたメトリクスは Grafana ダッシュボードと互換性があります[こちらを参照](tools/local/monitoring/grafana/provisioning/dashboards/dashboard.json)。


重要です!HTTP コンソールは安全なネットワーク内でアクセスすることを想定しています。Dragonfly の TCP ポートを外部に公開する場合は、`--http_admin_console=false` または `--nohttp_admin_console` でコンソールを無効にすることをお勧めします。


## <a name="バックグラウンド"><a/>バックグラウンド

Dragonfly は、インメモリデータストアを 2022 年に設計したらどのようになるかという実験から始まりました。メモリストアのユーザーとして、またクラウド企業で働いたエンジニアとしての経験から学んだ教訓をもとに、Dragonfly では 2 つの重要な特性を維持する必要があると考えました: それは、すべてのオペレーションにおける原子性の保証と、非常に高いスループットにおけるミリ秒以下の低レイテンシーです。

私たちの最初の課題は、パブリッククラウドで現在利用可能なサーバーを使用して、CPU、メモリー、I/O リソースをフルに活用する方法でした。これを解決するために、私たちは[シェアードナッシングアーキテクチャ](https://en.wikipedia.org/wiki/Shared-nothing_architecture)を使用しています。このアーキテクチャでは、各スレッドが辞書データのスライスを独自に管理できるように、スレッド間でメモリストアの鍵空間を分割することができます。これらのスライスを "shards" と呼ぶ。シェアードナッシングアーキテクチャのスレッドと I/O 管理のためのライブラリは、[こちら](https://github.com/romange/helio)でオープンソースで提供されています。

複数キー操作に対する原子性保証を提供するために、我々は最近の学術研究の進歩を利用している。Dragonfly のトランザクションフレームワークの開発には、論文 ["VLL: a lock manager redesign for main memory database systems"](https://www.cs.umd.edu/~abadi/papers/vldbj-vll.pdf) を選びました。シェアードナッシングアーキテクチャと VLL の選択により、ミューテックスやスピンロックを使用せずにアトミックなマルチ
Download .txt
gitextract_74218km6/

├── .agent/
│   └── rules/
│       └── ANTIGRAVITY_INSTRUCTIONS.md
├── .circleci/
│   └── config.yml
├── .clang-format
├── .clang-tidy
├── .clangd
├── .claude/
│   ├── hooks/
│   │   └── format-after-edit.sh
│   ├── settings.json
│   └── skills/
│       └── reproduce-fuzz-crash/
│           └── SKILL.md
├── .ct.yaml
├── .cursorrules
├── .devcontainer/
│   ├── alpine/
│   │   ├── devcontainer.json
│   │   └── post-create.sh
│   ├── fedora/
│   │   └── devcontainer.json
│   ├── fedora41/
│   │   └── devcontainer.json
│   ├── ubuntu20/
│   │   ├── cmake-tools-kits.json
│   │   ├── devcontainer.json
│   │   └── post-create.sh
│   ├── ubuntu20-gcc14/
│   │   └── devcontainer.json
│   ├── ubuntu22/
│   │   ├── devcontainer.json
│   │   └── post-create.sh
│   └── ubuntu24/
│       └── devcontainer.json
├── .dockerignore
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── config.yml
│   │   └── feature_request.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── actions/
│   │   ├── builder/
│   │   │   └── action.yml
│   │   ├── fuzzing/
│   │   │   └── action.yml
│   │   ├── lint-test-chart/
│   │   │   └── action.yml
│   │   ├── multi-registry-docker-login/
│   │   │   └── action.yml
│   │   ├── regression-tests/
│   │   │   └── action.yml
│   │   ├── repeat/
│   │   │   └── action.yml
│   │   ├── sync-valkey-tests/
│   │   │   └── action.yml
│   │   └── test-docker/
│   │       └── action.yml
│   ├── bullmq-skipped-tests.txt
│   ├── copilot-instructions.md
│   ├── dependabot.yml
│   ├── instructions/
│   │   └── code-review.instructions.md
│   └── workflows/
│       ├── benchmark.yml
│       ├── bullmq-tests.yml
│       ├── ci.yml
│       ├── copilot-setup-steps.yml
│       ├── cov.yml
│       ├── daily-builds.yml
│       ├── docker-dev-release.yml
│       ├── docker-release2.yml
│       ├── epoll-regression-tests.yml
│       ├── fuzz-long.yml
│       ├── fuzz-pr.yml
│       ├── generate-osrepo-site.yml
│       ├── heavy-tests.yml
│       ├── ioloop-v2-regtests.yml
│       ├── mastodon-ruby-tests.yml
│       ├── package-install.yml
│       ├── regression-tests.yml
│       ├── release.yml
│       ├── repeat-tests.yml
│       └── test-fakeredis.yml
├── .gitignore
├── .gitmodules
├── .gitorderfile
├── .nvmrc
├── .pre-commit-config.yaml
├── .pre-commit-hooks.yaml
├── .snyk
├── .vscode/
│   └── c_cpp_properties.json
├── AGENTS.md
├── CLA.txt
├── CMakeLists.txt
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── CONTRIBUTORS.md
├── LICENSE.md
├── Makefile
├── README.ja-JP.md
├── README.ko-KR.md
├── README.md
├── README.pt-BR.md
├── README.zh-CN.md
├── TODO.md
├── contrib/
│   ├── charts/
│   │   └── dragonfly/
│   │       ├── .helmignore
│   │       ├── Chart.yaml
│   │       ├── README.md
│   │       ├── ci/
│   │       │   ├── affinity-values.golden.yaml
│   │       │   ├── affinity-values.yaml
│   │       │   ├── command_extraargs-values.golden.yaml
│   │       │   ├── command_extraargs-values.yaml
│   │       │   ├── commonlabels-values.golden.yaml
│   │       │   ├── commonlabels-values.yaml
│   │       │   ├── extracontainer-string-values.golden.yaml
│   │       │   ├── extracontainer-string-values.yaml
│   │       │   ├── extracontainer-tpl-values.golden.yaml
│   │       │   ├── extracontainer-tpl-values.yaml
│   │       │   ├── extraenv-and-passwordSecret-values.golden.yaml
│   │       │   ├── extraenv-and-passwordSecret-values.yaml
│   │       │   ├── extraenv-values.golden.yaml
│   │       │   ├── extraenv-values.yaml
│   │       │   ├── extravolumes-values.golden.yaml
│   │       │   ├── extravolumes-values.yaml
│   │       │   ├── initcontainer-string-values.golden.yaml
│   │       │   ├── initcontainer-string-values.yaml
│   │       │   ├── initcontainer-tpl-values.golden.yaml
│   │       │   ├── initcontainer-tpl-values.yaml
│   │       │   ├── password-old-env-values.golden.yaml
│   │       │   ├── password-old-env-values.yaml
│   │       │   ├── passwordsecret-values.golden.yaml
│   │       │   ├── passwordsecret-values.tpl.golden.yaml
│   │       │   ├── passwordsecret-values.tpl.yaml
│   │       │   ├── passwordsecret-values.yaml
│   │       │   ├── persistence-and-existing-secret.golden.yaml
│   │       │   ├── persistence-and-existing-secret.yaml
│   │       │   ├── persistent-values.golden.yaml
│   │       │   ├── persistent-values.yaml
│   │       │   ├── priorityclassname-values.golden.yaml
│   │       │   ├── priorityclassname-values.yaml
│   │       │   ├── prometheusrules-values.golden.yaml
│   │       │   ├── prometheusrules-values.yaml
│   │       │   ├── resources-values.golden.yaml
│   │       │   ├── resources-values.yaml
│   │       │   ├── securitycontext-values.golden.yaml
│   │       │   ├── securitycontext-values.yaml
│   │       │   ├── service-loadbalancer-ip.golden.yaml
│   │       │   ├── service-loadbalancer-ip.yaml
│   │       │   ├── service-monitor-values.golden.yaml
│   │       │   ├── service-monitor-values.yaml
│   │       │   ├── taints-tolerations-values.golden.yaml
│   │       │   ├── taints-tolerations-values.yaml
│   │       │   ├── tls-values.golden.yaml
│   │       │   ├── tls-values.yaml
│   │       │   ├── tolerations-values.golden.yaml
│   │       │   └── tolerations-values.yaml
│   │       ├── go.mod
│   │       ├── go.sum
│   │       ├── golden_test.go
│   │       ├── templates/
│   │       │   ├── NOTES.txt
│   │       │   ├── _helpers.tpl
│   │       │   ├── _pod.tpl
│   │       │   ├── certificate.yaml
│   │       │   ├── deployment.yaml
│   │       │   ├── extra-manifests.yaml
│   │       │   ├── metrics-service.yaml
│   │       │   ├── prometheusrule.yaml
│   │       │   ├── service.yaml
│   │       │   ├── serviceaccount.yaml
│   │       │   ├── servicemonitor.yaml
│   │       │   ├── statefulset.yaml
│   │       │   └── tls-secret.yaml
│   │       └── values.yaml
│   ├── docker/
│   │   ├── README.md
│   │   └── docker-compose.yml
│   └── scripts/
│       ├── conventional-commits
│       └── signed-commit
├── docs/
│   ├── README.md
│   ├── async-tiering.md
│   ├── cluster-node-health.md
│   ├── coordinator.excalidraw
│   ├── dashtable.md
│   ├── dense_set.excalidraw
│   ├── dense_set.md
│   ├── df-share-nothing.md
│   ├── differences.md
│   ├── faq.md
│   ├── memcached_benchmark.md
│   ├── memory_bgsave.tsv
│   ├── namespaces.md
│   ├── quick-start/
│   │   └── README.md
│   ├── rdbsave.excalidraw
│   ├── rdbsave.md
│   ├── shard-serialization.md
│   ├── thread-per-core.excalidraw
│   └── transaction.md
├── fuzz/
│   ├── FUZZING.md
│   ├── dict/
│   │   ├── memcache.dict
│   │   └── resp.dict
│   ├── generate_targeted_seeds.py
│   ├── memcache_mutator.py
│   ├── package_crash.sh
│   ├── replay_crash.py
│   ├── resp_mutator.py
│   ├── run_fuzzer.sh
│   ├── seeds/
│   │   ├── memcache/
│   │   │   ├── add_replace.mc
│   │   │   ├── append_prepend.mc
│   │   │   ├── cas.mc
│   │   │   ├── delete.mc
│   │   │   ├── expiry.mc
│   │   │   ├── flags.mc
│   │   │   ├── flush.mc
│   │   │   ├── gat.mc
│   │   │   ├── incr_decr.mc
│   │   │   ├── large_value.mc
│   │   │   ├── meta_commands.mc
│   │   │   ├── multiget.mc
│   │   │   ├── noreply.mc
│   │   │   ├── set_get.mc
│   │   │   └── stats_version.mc
│   │   └── resp/
│   │       ├── acl.resp
│   │       ├── acl_ops.resp
│   │       ├── acl_ops2.resp
│   │       ├── bf_add.resp
│   │       ├── bitfield.resp
│   │       ├── bitfield_ops.resp
│   │       ├── bitops.resp
│   │       ├── bloom_ops.resp
│   │       ├── client.resp
│   │       ├── config.resp
│   │       ├── copy.resp
│   │       ├── del.resp
│   │       ├── eval.resp
│   │       ├── expire_ops.resp
│   │       ├── function.resp
│   │       ├── function_ops.resp
│   │       ├── generic_ops.resp
│   │       ├── generic_ops2.resp
│   │       ├── geo_ops.resp
│   │       ├── geo_ops2.resp
│   │       ├── geoadd.resp
│   │       ├── get.resp
│   │       ├── getdel.resp
│   │       ├── hash_ops.resp
│   │       ├── hash_ops2.resp
│   │       ├── hll_ops.resp
│   │       ├── hset.resp
│   │       ├── json.resp
│   │       ├── json_ops.resp
│   │       ├── json_ops2.resp
│   │       ├── list_blocking.resp
│   │       ├── list_ops.resp
│   │       ├── lmpop.resp
│   │       ├── lpos.resp
│   │       ├── lpush.resp
│   │       ├── memory.resp
│   │       ├── monitor.resp
│   │       ├── mset.resp
│   │       ├── multi_type_pipeline.resp
│   │       ├── object.resp
│   │       ├── pfadd.resp
│   │       ├── ping.resp
│   │       ├── pipeline.resp
│   │       ├── pubsub_ops.resp
│   │       ├── pubsub_ops2.resp
│   │       ├── rename.resp
│   │       ├── rpoplpush.resp
│   │       ├── sadd.resp
│   │       ├── scan_hscan.resp
│   │       ├── script_ops.resp
│   │       ├── script_ops2.resp
│   │       ├── sdiffstore.resp
│   │       ├── search_ops.resp
│   │       ├── search_ops2.resp
│   │       ├── server_ops.resp
│   │       ├── server_ops2.resp
│   │       ├── set.resp
│   │       ├── set_ops.resp
│   │       ├── set_ops2.resp
│   │       ├── smove.resp
│   │       ├── sort.resp
│   │       ├── srandmember.resp
│   │       ├── stream_ops.resp
│   │       ├── stream_ops2.resp
│   │       ├── string_ops.resp
│   │       ├── string_ops2.resp
│   │       ├── subscribe.resp
│   │       ├── throttle.resp
│   │       ├── transaction.resp
│   │       ├── transaction_ops2.resp
│   │       ├── watch.resp
│   │       ├── watch_multi.resp
│   │       ├── xadd.resp
│   │       ├── xread.resp
│   │       ├── zadd.resp
│   │       ├── zmpop.resp
│   │       ├── zrangebyscore.resp
│   │       ├── zset_ops.resp
│   │       └── zset_ops2.resp
│   └── triage_crashes.sh
├── go.work
├── go.work.sum
├── patches/
│   └── mimalloc-v2.2.4/
│       ├── 0_base.patch
│       ├── 1_add_stat_type.patch
│       ├── 2_return_stat.patch
│       ├── 3_track_full_size.patch
│       └── 4_fix_heap_collect.patch
├── pyproject.toml
├── src/
│   ├── .gitignore
│   ├── CMakeLists.txt
│   ├── GetGitRevisionDescription.cmake
│   ├── GetGitRevisionDescription.cmake.in
│   ├── common/
│   │   ├── arg_range.h
│   │   ├── backed_args.h
│   │   ├── heap_size.h
│   │   └── string_or_view.h
│   ├── core/
│   │   ├── CMakeLists.txt
│   │   ├── allocation_tracker.cc
│   │   ├── allocation_tracker.h
│   │   ├── allocation_tracker_test.cc
│   │   ├── bloom.cc
│   │   ├── bloom.h
│   │   ├── bloom_test.cc
│   │   ├── bptree_set.h
│   │   ├── bptree_set_test.cc
│   │   ├── cms.cc
│   │   ├── cms.h
│   │   ├── cms_test.cc
│   │   ├── collection_entry.h
│   │   ├── compact_object.cc
│   │   ├── compact_object.h
│   │   ├── compact_object_test.cc
│   │   ├── dash.h
│   │   ├── dash_bench.cc
│   │   ├── dash_internal.h
│   │   ├── dash_test.cc
│   │   ├── dense_set.cc
│   │   ├── dense_set.h
│   │   ├── detail/
│   │   │   ├── bitpacking.cc
│   │   │   ├── bitpacking.h
│   │   │   ├── bptree_internal.h
│   │   │   ├── gen_utils.h
│   │   │   ├── listpack.cc
│   │   │   ├── listpack.h
│   │   │   ├── listpack_wrap.cc
│   │   │   ├── listpack_wrap.h
│   │   │   └── stateless_allocator.h
│   │   ├── dfly_core_test.cc
│   │   ├── dict_builder.cc
│   │   ├── dict_builder.h
│   │   ├── dict_builder_test.cc
│   │   ├── dragonfly_core.cc
│   │   ├── expire_period.h
│   │   ├── extent_tree.cc
│   │   ├── extent_tree.h
│   │   ├── extent_tree_test.cc
│   │   ├── flatbuffers.h
│   │   ├── flatbuffers_test.cc
│   │   ├── generate_bin_sizes.py
│   │   ├── glob_matcher.cc
│   │   ├── glob_matcher.h
│   │   ├── huff_coder.cc
│   │   ├── huff_coder.h
│   │   ├── intent_lock.h
│   │   ├── interpreter.cc
│   │   ├── interpreter.h
│   │   ├── interpreter_polyfill.h
│   │   ├── interpreter_test.cc
│   │   ├── json/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── detail/
│   │   │   │   ├── common.h
│   │   │   │   ├── flat_dfs.cc
│   │   │   │   ├── flat_dfs.h
│   │   │   │   ├── interned_blob.cc
│   │   │   │   ├── interned_blob.h
│   │   │   │   ├── interned_string.cc
│   │   │   │   ├── interned_string.h
│   │   │   │   ├── jsoncons_dfs.cc
│   │   │   │   └── jsoncons_dfs.h
│   │   │   ├── driver.cc
│   │   │   ├── driver.h
│   │   │   ├── interned_blob_test.cc
│   │   │   ├── json_object.cc
│   │   │   ├── json_object.h
│   │   │   ├── json_test.cc
│   │   │   ├── jsonpath_grammar.y
│   │   │   ├── jsonpath_lexer.lex
│   │   │   ├── jsonpath_test.cc
│   │   │   ├── lexer_impl.cc
│   │   │   ├── lexer_impl.h
│   │   │   ├── path.cc
│   │   │   └── path.h
│   │   ├── linear_search_map.h
│   │   ├── linear_search_map_test.cc
│   │   ├── listpack_test.cc
│   │   ├── memory_test.cc
│   │   ├── mi_memory_resource.cc
│   │   ├── mi_memory_resource.h
│   │   ├── oah_entry.cc
│   │   ├── oah_entry.h
│   │   ├── oah_set.h
│   │   ├── oah_set_test.cc
│   │   ├── overloaded.h
│   │   ├── page_usage/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── page_usage_stats.cc
│   │   │   └── page_usage_stats.h
│   │   ├── page_usage_stats_test.cc
│   │   ├── qlist.cc
│   │   ├── qlist.h
│   │   ├── qlist_test.cc
│   │   ├── score_map.cc
│   │   ├── score_map.h
│   │   ├── score_map_test.cc
│   │   ├── sds_utils.cc
│   │   ├── sds_utils.h
│   │   ├── search/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── ast_expr.cc
│   │   │   ├── ast_expr.h
│   │   │   ├── base.cc
│   │   │   ├── base.h
│   │   │   ├── block_list.cc
│   │   │   ├── block_list.h
│   │   │   ├── block_list_test.cc
│   │   │   ├── compressed_sorted_set.cc
│   │   │   ├── compressed_sorted_set.h
│   │   │   ├── compressed_sorted_set_test.cc
│   │   │   ├── hnsw_alg.h
│   │   │   ├── hnsw_index.cc
│   │   │   ├── hnsw_index.h
│   │   │   ├── index_result.h
│   │   │   ├── indices.cc
│   │   │   ├── indices.h
│   │   │   ├── lexer.lex
│   │   │   ├── mrmw_mutex.h
│   │   │   ├── mrmw_mutex_test.cc
│   │   │   ├── parser.y
│   │   │   ├── query_driver.cc
│   │   │   ├── query_driver.h
│   │   │   ├── range_tree.cc
│   │   │   ├── range_tree.h
│   │   │   ├── range_tree_test.cc
│   │   │   ├── rax_tree.h
│   │   │   ├── rax_tree_test.cc
│   │   │   ├── renewable_quota.cc
│   │   │   ├── renewable_quota.h
│   │   │   ├── scanner.h
│   │   │   ├── search.cc
│   │   │   ├── search.h
│   │   │   ├── search_parser_test.cc
│   │   │   ├── search_test.cc
│   │   │   ├── sort_indices.cc
│   │   │   ├── sort_indices.h
│   │   │   ├── stateless_allocator.h
│   │   │   ├── synonyms.cc
│   │   │   ├── synonyms.h
│   │   │   ├── tag_types.h
│   │   │   ├── vector_utils.cc
│   │   │   └── vector_utils.h
│   │   ├── segment_allocator.cc
│   │   ├── segment_allocator.h
│   │   ├── size_tracking_channel.h
│   │   ├── small_string.cc
│   │   ├── small_string.h
│   │   ├── sorted_map.cc
│   │   ├── sorted_map.h
│   │   ├── sorted_map_test.cc
│   │   ├── sse_port.h
│   │   ├── string_map.cc
│   │   ├── string_map.h
│   │   ├── string_map_test.cc
│   │   ├── string_set.cc
│   │   ├── string_set.h
│   │   ├── string_set_test.cc
│   │   ├── task_queue.cc
│   │   ├── task_queue.h
│   │   ├── testdata/
│   │   │   ├── ids.txt.zst
│   │   │   └── list.txt.zst
│   │   ├── tiering_types.cc
│   │   ├── tiering_types.h
│   │   ├── top_keys.cc
│   │   ├── top_keys.h
│   │   ├── top_keys_test.cc
│   │   ├── topk.cc
│   │   ├── topk.h
│   │   ├── topk_test.cc
│   │   ├── tx_queue.cc
│   │   ├── tx_queue.h
│   │   └── zstd_test.cc
│   ├── external_libs.cmake
│   ├── facade/
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── cmd_arg_parser.cc
│   │   ├── cmd_arg_parser.h
│   │   ├── cmd_arg_parser_test.cc
│   │   ├── command_id.h
│   │   ├── conn_context.h
│   │   ├── connection_ref.h
│   │   ├── disk_backed_queue.cc
│   │   ├── disk_backed_queue.h
│   │   ├── disk_backed_queue_test.cc
│   │   ├── dragonfly_connection.cc
│   │   ├── dragonfly_connection.h
│   │   ├── dragonfly_listener.cc
│   │   ├── dragonfly_listener.h
│   │   ├── error.h
│   │   ├── facade.cc
│   │   ├── facade_stats.h
│   │   ├── facade_test.cc
│   │   ├── facade_test.h
│   │   ├── facade_types.h
│   │   ├── memcache_parser.cc
│   │   ├── memcache_parser.h
│   │   ├── memcache_parser_test.cc
│   │   ├── ok_main.cc
│   │   ├── op_status.cc
│   │   ├── op_status.h
│   │   ├── parsed_command.cc
│   │   ├── parsed_command.h
│   │   ├── redis_parser.cc
│   │   ├── redis_parser.h
│   │   ├── redis_parser_test.cc
│   │   ├── reply_builder.cc
│   │   ├── reply_builder.h
│   │   ├── reply_builder_test.cc
│   │   ├── reply_capture.cc
│   │   ├── reply_capture.h
│   │   ├── reply_mode.h
│   │   ├── reply_payload.h
│   │   ├── resp_expr.cc
│   │   ├── resp_expr.h
│   │   ├── resp_expr_test_utils.cc
│   │   ├── resp_expr_test_utils.h
│   │   ├── resp_parser.cc
│   │   ├── resp_parser.h
│   │   ├── resp_parser_test.cc
│   │   ├── resp_srv_parser.cc
│   │   ├── resp_srv_parser.h
│   │   ├── resp_srv_parser_test.cc
│   │   ├── resp_validator.cc
│   │   ├── service_interface.cc
│   │   ├── service_interface.h
│   │   ├── socket_utils.cc
│   │   ├── socket_utils.h
│   │   ├── tls_helpers.cc
│   │   └── tls_helpers.h
│   ├── huff/
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── hist.h
│   │   ├── huf.h
│   │   └── mem.h
│   ├── redis/
│   │   ├── CMakeLists.txt
│   │   ├── LICENSE.redis
│   │   ├── config.h
│   │   ├── crc16.c
│   │   ├── crc16.h
│   │   ├── crc64.c
│   │   ├── crc64.h
│   │   ├── crcspeed.c
│   │   ├── crcspeed.h
│   │   ├── debug.c
│   │   ├── dict.c
│   │   ├── dict.h
│   │   ├── endianconv.h
│   │   ├── geo.c
│   │   ├── geo.h
│   │   ├── geohash.c
│   │   ├── geohash.h
│   │   ├── geohash_helper.c
│   │   ├── geohash_helper.h
│   │   ├── hiredis.c
│   │   ├── hiredis.h
│   │   ├── hyperloglog.c
│   │   ├── hyperloglog.h
│   │   ├── intset.c
│   │   ├── intset.h
│   │   ├── listpack.c
│   │   ├── listpack.h
│   │   ├── lua/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── bit/
│   │   │   │   └── bit.c
│   │   │   ├── cjson/
│   │   │   │   ├── fpconv.c
│   │   │   │   ├── fpconv.h
│   │   │   │   ├── lua_cjson.c
│   │   │   │   ├── strbuf.c
│   │   │   │   └── strbuf.h
│   │   │   ├── cmsgpack/
│   │   │   │   └── lua_cmsgpack.c
│   │   │   └── struct/
│   │   │       └── lua_struct.c
│   │   ├── lzf.h
│   │   ├── lzfP.h
│   │   ├── lzf_c.c
│   │   ├── lzf_d.c
│   │   ├── rax.c
│   │   ├── rax.h
│   │   ├── rax_malloc.h
│   │   ├── rdb.h
│   │   ├── read.c
│   │   ├── read.h
│   │   ├── redis_aux.c
│   │   ├── redis_aux.h
│   │   ├── sds.c
│   │   ├── sds.h
│   │   ├── sdsalloc.h
│   │   ├── siphash.c
│   │   ├── stream.h
│   │   ├── t_stream.c
│   │   ├── util.c
│   │   ├── util.h
│   │   ├── ziplist.c
│   │   ├── ziplist.h
│   │   ├── zmalloc.c
│   │   ├── zmalloc.h
│   │   └── zmalloc_mi.c
│   └── server/
│       ├── CMakeLists.txt
│       ├── acl/
│       │   ├── acl_commands_def.h
│       │   ├── acl_family.cc
│       │   ├── acl_family.h
│       │   ├── acl_family_test.cc
│       │   ├── acl_log.cc
│       │   ├── acl_log.h
│       │   ├── user.cc
│       │   ├── user.h
│       │   ├── user_registry.cc
│       │   ├── user_registry.h
│       │   ├── validator.cc
│       │   └── validator.h
│       ├── bitops_family.cc
│       ├── bitops_family_test.cc
│       ├── blocking_controller.cc
│       ├── blocking_controller.h
│       ├── blocking_controller_test.cc
│       ├── bloom_family.cc
│       ├── bloom_family_test.cc
│       ├── channel_store.cc
│       ├── channel_store.h
│       ├── cluster/
│       │   ├── CMakeLists.txt
│       │   ├── cluster_config.cc
│       │   ├── cluster_config.h
│       │   ├── cluster_config_test.cc
│       │   ├── cluster_defs.cc
│       │   ├── cluster_defs.h
│       │   ├── cluster_family.cc
│       │   ├── cluster_family.h
│       │   ├── cluster_family_test.cc
│       │   ├── cluster_utility.cc
│       │   ├── cluster_utility.h
│       │   ├── coordinator.cc
│       │   ├── coordinator.h
│       │   ├── incoming_slot_migration.cc
│       │   ├── incoming_slot_migration.h
│       │   ├── outgoing_slot_migration.cc
│       │   ├── outgoing_slot_migration.h
│       │   └── slot_set.h
│       ├── cluster_support.cc
│       ├── cluster_support.h
│       ├── cmd_support.cc
│       ├── cmd_support.h
│       ├── cms_family.cc
│       ├── cms_family_test.cc
│       ├── collection_family_fallback.cc
│       ├── command_families.h
│       ├── command_registry.cc
│       ├── command_registry.h
│       ├── common.cc
│       ├── common.h
│       ├── common_types.h
│       ├── config_registry.cc
│       ├── config_registry.h
│       ├── conn_context.cc
│       ├── conn_context.h
│       ├── container_utils.cc
│       ├── container_utils.h
│       ├── db_slice.cc
│       ├── db_slice.h
│       ├── debugcmd.cc
│       ├── debugcmd.h
│       ├── detail/
│       │   ├── compressor.cc
│       │   ├── compressor.h
│       │   ├── decompress.cc
│       │   ├── decompress.h
│       │   ├── save_stages_controller.cc
│       │   ├── save_stages_controller.h
│       │   ├── snapshot_storage.cc
│       │   ├── snapshot_storage.h
│       │   ├── table.h
│       │   └── wrapped_json_path.h
│       ├── dfly_bench.cc
│       ├── dfly_main.cc
│       ├── dflycmd.cc
│       ├── dflycmd.h
│       ├── dragonfly_test.cc
│       ├── engine_shard.cc
│       ├── engine_shard.h
│       ├── engine_shard_set.cc
│       ├── engine_shard_set.h
│       ├── engine_shard_set_test.cc
│       ├── error.cc
│       ├── error.h
│       ├── execution_state.cc
│       ├── execution_state.h
│       ├── family_utils.cc
│       ├── family_utils.h
│       ├── generic_family.cc
│       ├── generic_family.h
│       ├── generic_family_test.cc
│       ├── geo_family.cc
│       ├── geo_family_test.cc
│       ├── hll_family.cc
│       ├── hll_family_test.cc
│       ├── hset_family.cc
│       ├── hset_family.h
│       ├── hset_family_test.cc
│       ├── http_api.cc
│       ├── http_api.h
│       ├── journal/
│       │   ├── CMakeLists.txt
│       │   ├── cmd_serializer.cc
│       │   ├── cmd_serializer.h
│       │   ├── executor.cc
│       │   ├── executor.h
│       │   ├── journal.cc
│       │   ├── journal.h
│       │   ├── journal_slice.cc
│       │   ├── journal_slice.h
│       │   ├── journal_test.cc
│       │   ├── pending_buf.h
│       │   ├── serializer.cc
│       │   ├── serializer.h
│       │   ├── streamer.cc
│       │   ├── streamer.h
│       │   ├── tx_executor.cc
│       │   ├── tx_executor.h
│       │   ├── types.cc
│       │   └── types.h
│       ├── json_family.cc
│       ├── json_family_memory_test.cc
│       ├── json_family_test.cc
│       ├── list_family.cc
│       ├── list_family_test.cc
│       ├── main_service.cc
│       ├── main_service.h
│       ├── memory_cmd.cc
│       ├── memory_cmd.h
│       ├── multi_command_squasher.cc
│       ├── multi_command_squasher.h
│       ├── multi_test.cc
│       ├── namespaces.cc
│       ├── namespaces.h
│       ├── protocol_client.cc
│       ├── protocol_client.h
│       ├── rdb_extensions.h
│       ├── rdb_load.cc
│       ├── rdb_load.h
│       ├── rdb_load_context.cc
│       ├── rdb_load_context.h
│       ├── rdb_save.cc
│       ├── rdb_save.h
│       ├── rdb_test.cc
│       ├── replica.cc
│       ├── replica.h
│       ├── replica_types.h
│       ├── script_mgr.cc
│       ├── script_mgr.h
│       ├── search/
│       │   ├── CMakeLists.txt
│       │   ├── aggregator.cc
│       │   ├── aggregator.h
│       │   ├── aggregator_test.cc
│       │   ├── doc_accessors.cc
│       │   ├── doc_accessors.h
│       │   ├── doc_index.cc
│       │   ├── doc_index.h
│       │   ├── doc_index_fallback.cc
│       │   ├── global_hnsw_index.cc
│       │   ├── global_hnsw_index.h
│       │   ├── index_builder.cc
│       │   ├── index_builder.h
│       │   ├── index_join.cc
│       │   ├── index_join.h
│       │   ├── index_join_test.cc
│       │   ├── search_family.cc
│       │   ├── search_family.h
│       │   └── search_family_test.cc
│       ├── serializer_base.cc
│       ├── serializer_base.h
│       ├── serializer_base_test.cc
│       ├── serializer_commons.cc
│       ├── serializer_commons.h
│       ├── server_family.cc
│       ├── server_family.h
│       ├── server_family_test.cc
│       ├── server_state.cc
│       ├── server_state.h
│       ├── set_family.cc
│       ├── set_family.h
│       ├── set_family_test.cc
│       ├── sharding.cc
│       ├── sharding.h
│       ├── slowlog.cc
│       ├── slowlog.h
│       ├── snapshot.cc
│       ├── snapshot.h
│       ├── stats.cc
│       ├── stats.h
│       ├── stream_family.cc
│       ├── stream_family.h
│       ├── stream_family_test.cc
│       ├── string_family.cc
│       ├── string_family_test.cc
│       ├── string_stats.cc
│       ├── string_stats.h
│       ├── string_stats_test.cc
│       ├── synchronization.cc
│       ├── synchronization.h
│       ├── table.cc
│       ├── table.h
│       ├── test_utils.cc
│       ├── test_utils.h
│       ├── testdata/
│       │   ├── RDB_TYPE_STREAM_LISTPACKS_2.rdb
│       │   ├── RDB_TYPE_STREAM_LISTPACKS_3.rdb
│       │   ├── empty.rdb
│       │   ├── hll.rdb
│       │   ├── ignore_expiry.rdb
│       │   ├── redis6_small.rdb
│       │   ├── redis6_stream.rdb
│       │   ├── redis7_small.rdb
│       │   └── redis_json.rdb
│       ├── tiered_storage.cc
│       ├── tiered_storage.h
│       ├── tiered_storage_test.cc
│       ├── tiering/
│       │   ├── CMakeLists.txt
│       │   ├── common.h
│       │   ├── decoders.cc
│       │   ├── decoders.h
│       │   ├── disk_storage.cc
│       │   ├── disk_storage.h
│       │   ├── disk_storage_test.cc
│       │   ├── entry_map.h
│       │   ├── external_alloc.cc
│       │   ├── external_alloc.h
│       │   ├── external_alloc_test.cc
│       │   ├── op_manager.cc
│       │   ├── op_manager.h
│       │   ├── op_manager_test.cc
│       │   ├── serialized_map.cc
│       │   ├── serialized_map.h
│       │   ├── serialized_map_test.cc
│       │   ├── small_bins.cc
│       │   ├── small_bins.h
│       │   ├── small_bins_test.cc
│       │   └── test_common.h
│       ├── transaction.cc
│       ├── transaction.h
│       ├── tx_base.cc
│       ├── tx_base.h
│       ├── version.cc.in
│       ├── version.h
│       ├── version_monitor.cc
│       ├── version_monitor.h
│       ├── zset_family.cc
│       ├── zset_family.h
│       └── zset_family_test.cc
├── tests/
│   ├── README.md
│   ├── dragonfly/
│   │   ├── __init__.py
│   │   ├── acl_family_test.py
│   │   ├── bull_sidekiq_test.py
│   │   ├── celery_test.py
│   │   ├── cluster_mgr_test.py
│   │   ├── cluster_test.py
│   │   ├── config_test.py
│   │   ├── conftest.py
│   │   ├── connection_test.py
│   │   ├── eval_test.py
│   │   ├── generic_test.py
│   │   ├── http_conf_test.py
│   │   ├── instance.py
│   │   ├── json_test.py
│   │   ├── list_family_test.py
│   │   ├── management_test.py
│   │   ├── memcache_meta.py
│   │   ├── memory_test.py
│   │   ├── proxy.py
│   │   ├── pymemcached_test.py
│   │   ├── redis_replication_test.py
│   │   ├── replication_test.py
│   │   ├── requirements.txt
│   │   ├── search_benchmark_test.py
│   │   ├── search_benchmark_utils.py
│   │   ├── search_test.py
│   │   ├── seeder/
│   │   │   ├── README.md
│   │   │   ├── __init__.py
│   │   │   ├── script-generate.lua
│   │   │   ├── script-genlib.lua
│   │   │   ├── script-hash.lua
│   │   │   ├── script-hashlib.lua
│   │   │   └── script-utillib.lua
│   │   ├── seeder_test.py
│   │   ├── sentinel_test.py
│   │   ├── server_family_test.py
│   │   ├── set_test.py
│   │   ├── shutdown_test.py
│   │   ├── snapshot_test.py
│   │   ├── test_dash_gc.py
│   │   ├── tiering_test.py
│   │   ├── tls_conf_test.py
│   │   ├── utility.py
│   │   └── valkey_search/
│   │       ├── README.md
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── sync-valkey-search-tests.sh
│   │       ├── util.py
│   │       └── valkey_search_test_case_dragonfly.py
│   ├── fakeredis/
│   │   ├── README.md
│   │   ├── pyproject.toml
│   │   └── test/
│   │       ├── __init__.py
│   │       ├── conftest.py
│   │       ├── test_asyncredis.py
│   │       ├── test_hypotesis_joint/
│   │       │   ├── __init__.py
│   │       │   └── test_joint.py
│   │       ├── test_hypothesis/
│   │       │   ├── __init__.py
│   │       │   ├── _server_info.py
│   │       │   ├── base.py
│   │       │   ├── test_connection.py
│   │       │   ├── test_hash.py
│   │       │   ├── test_list.py
│   │       │   ├── test_server.py
│   │       │   ├── test_set.py
│   │       │   ├── test_string.py
│   │       │   ├── test_transaction.py
│   │       │   └── test_zset.py
│   │       ├── test_issues.py
│   │       ├── test_json/
│   │       │   ├── __init__.py
│   │       │   ├── test_json.py
│   │       │   ├── test_json_arr_commands.py
│   │       │   └── test_json_commands.py
│   │       ├── test_mixins/
│   │       │   ├── __init__.py
│   │       │   ├── test_bitmap_commands.py
│   │       │   ├── test_connection.py
│   │       │   ├── test_generic_commands.py
│   │       │   ├── test_geo_commands.py
│   │       │   ├── test_hash_commands.py
│   │       │   ├── test_list_commands.py
│   │       │   ├── test_pubsub_commands.py
│   │       │   ├── test_scan.py
│   │       │   ├── test_scripting.py
│   │       │   ├── test_server_commands.py
│   │       │   ├── test_set_commands.py
│   │       │   ├── test_sortedset_commands.py
│   │       │   ├── test_streams_commands.py
│   │       │   ├── test_string_commands.py
│   │       │   └── test_zadd.py
│   │       ├── test_stack/
│   │       │   ├── __init__.py
│   │       │   ├── test_bloomfilter.py
│   │       │   ├── test_cms.py
│   │       │   ├── test_cuckoofilter.py
│   │       │   ├── test_tdigest.py
│   │       │   └── test_topk.py
│   │       ├── test_transactions.py
│   │       └── testtools.py
│   ├── integration/
│   │   ├── .dockerignore
│   │   ├── .run_ioredis_valid_test.sh
│   │   ├── async.py
│   │   ├── gen_sets.sh
│   │   ├── generate_sets.py
│   │   ├── ioredis.Dockerfile
│   │   ├── jedis.Dockerfile
│   │   ├── node-redis.Dockerfile
│   │   ├── pascaldekloe.Dockerfile
│   │   ├── relay.Dockerfile
│   │   ├── run_ioredis_on_docker.sh
│   │   └── stress_shutdown.sh
│   └── pytest.ini
└── tools/
    ├── balls_bins.py
    ├── benchmark/
    │   ├── k8s-benchmark-job.yaml
    │   └── post_run_checks.py
    ├── cache_logs_player.py
    ├── cache_testing.py
    ├── cluster_mgr.py
    ├── defrag_db.py
    ├── defrag_mem_test.py
    ├── docker/
    │   ├── entrypoint.sh
    │   ├── fetch_release.sh
    │   └── healthcheck.sh
    ├── eviction/
    │   ├── fill_db.py
    │   ├── run_fill_db.sh
    │   └── stop_fill_db.sh
    ├── faulty_io.sh
    ├── generate-tls-files.sh
    ├── json_benchmark.py
    ├── local/
    │   ├── gen-test-certs.sh
    │   └── monitoring/
    │       ├── docker-compose.yml
    │       ├── grafana/
    │       │   ├── config.monitoring
    │       │   └── provisioning/
    │       │       ├── dashboards/
    │       │       │   ├── dashboard.yml
    │       │       │   ├── dragonfly.json
    │       │       │   ├── memcached.json
    │       │       │   ├── node-exporter.json
    │       │       │   └── redis.json
    │       │       └── datasources/
    │       │           └── datasource.yml
    │       └── prometheus/
    │           └── prometheus.yml
    ├── packaging/
    │   ├── Dockerfile.alpine-dev
    │   ├── Dockerfile.ubuntu-dev
    │   ├── Dockerfile.ubuntu-prod
    │   ├── README.md
    │   ├── debian/
    │   │   ├── compat
    │   │   ├── control
    │   │   ├── dragonfly.conf
    │   │   ├── dragonfly.install
    │   │   ├── dragonfly.logrotate
    │   │   ├── dragonfly.postinst
    │   │   ├── dragonfly.postrm
    │   │   ├── dragonfly.preinst
    │   │   ├── dragonfly.service
    │   │   └── rules
    │   ├── generate_changelog.sh
    │   ├── generate_debian_package.sh
    │   ├── osrepos/
    │   │   ├── README.md
    │   │   ├── dragonfly.repo
    │   │   ├── dragonfly.sources
    │   │   ├── pgp-key.public
    │   │   ├── reprepro-config/
    │   │   │   ├── distributions
    │   │   │   └── options
    │   │   ├── requirements.txt
    │   │   └── scripts/
    │   │       ├── fetch-releases.py
    │   │       ├── generate-apt-repo.sh
    │   │       ├── generate-index.py
    │   │       └── sign-rpms.sh
    │   └── rpm/
    │       ├── build_rpm.sh
    │       ├── dragonfly.service
    │       └── dragonfly.spec
    ├── parse_allocator_tracking_logs.py
    ├── plot_memtier_latency.py
    ├── release.sh
    ├── replay/
    │   ├── go.mod
    │   ├── go.sum
    │   ├── main.go
    │   ├── parsing.go
    │   └── workers.go
    ├── requirements.txt
    ├── run_master_replica.sh
    └── vector-benches/
        ├── README.md
        ├── go.mod
        ├── go.sum
        └── main.go
Download .txt
Showing preview only (636K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (7250 symbols across 604 files)

FILE: contrib/charts/dragonfly/golden_test.go
  function TestHelmRender (line 17) | func TestHelmRender(t *testing.T) {

FILE: fuzz/generate_targeted_seeds.py
  function extract_changed_files (line 98) | def extract_changed_files(diff_text):
  function load_example_seeds (line 108) | def load_example_seeds(seeds_dir):
  function truncate_diff (line 122) | def truncate_diff(diff_text, max_lines=MAX_DIFF_LINES):
  function encode_resp (line 130) | def encode_resp(commands):
  function call_llm (line 147) | def call_llm(diff_text, changed_files, example_seeds, api_key, model):
  function write_output (line 204) | def write_output(output_dir, focus_commands, seeds):
  function main (line 226) | def main():

FILE: fuzz/memcache_mutator.py
  function init (line 67) | def init(seed):
  function _random_key (line 71) | def _random_key():
  function _random_value (line 77) | def _random_value():
  function _random_command (line 83) | def _random_command():
  function _parse_mc_commands (line 176) | def _parse_mc_commands(buf):
  function _commands_to_bytes (line 226) | def _commands_to_bytes(commands):
  function _mutate_commands (line 236) | def _mutate_commands(commands):
  function fuzz (line 318) | def fuzz(buf, add_buf, max_size):
  function havoc_mutation (line 334) | def havoc_mutation(buf, max_size):
  function havoc_mutation_probability (line 347) | def havoc_mutation_probability():

FILE: fuzz/replay_crash.py
  function send_input (line 22) | def send_input(host, port, data):
  function main (line 44) | def main():

FILE: fuzz/resp_mutator.py
  function _pick_command (line 183) | def _pick_command():
  function init (line 190) | def init(seed):
  function _encode_resp (line 194) | def _encode_resp(*args):
  function _random_arg (line 204) | def _random_arg():
  function _random_command (line 224) | def _random_command():
  function _parse_resp_commands (line 232) | def _parse_resp_commands(buf):
  function _mutate_commands (line 285) | def _mutate_commands(commands):
  function _commands_to_resp (line 345) | def _commands_to_resp(commands):
  function fuzz (line 353) | def fuzz(buf, add_buf, max_size):
  function havoc_mutation (line 373) | def havoc_mutation(buf, max_size):
  function havoc_mutation_probability (line 387) | def havoc_mutation_probability():

FILE: src/common/arg_range.h
  function namespace (line 14) | namespace cmn {
  function const (line 45) | auto Range() const {

FILE: src/common/backed_args.h
  function namespace (line 12) | namespace cmn {
  function Reserve (line 87) | void Reserve(size_t arg_cnt, size_t total_size) {
  function HeapMemory (line 92) | size_t HeapMemory() const {
  function elem_len (line 118) | size_t elem_len(size_t i) const {
  function elem_capacity (line 122) | size_t elem_capacity(size_t i) const {
  function clear (line 149) | void clear() {
  function PushArg (line 161) | void PushArg(size_t len) {
  function PushArg (line 167) | void PushArg(std::string_view arg) {
  function PopArg (line 175) | void PopArg() {

FILE: src/common/heap_size.h
  function namespace (line 28) | namespace cmn {
  function HeapSize (line 50) | inline size_t HeapSize(const std::string& s) {
  function namespace (line 131) | namespace heap_size_detail {

FILE: src/common/string_or_view.h
  function namespace (line 11) | namespace cmn {

FILE: src/core/allocation_tracker.cc
  type dfly (line 11) | namespace dfly {
    function CanCallVlog (line 16) | bool CanCallVlog(std::string_view trace) {
    function AllocationTracker (line 23) | AllocationTracker& AllocationTracker::Get() {

FILE: src/core/allocation_tracker.h
  function namespace (line 11) | namespace dfly {
  function delete (line 61) | void operator delete(void* p) noexcept {
  function noexcept (line 65) | void operator delete[](void* p) noexcept {
  function delete (line 70) | void operator delete(void* p, const std::nothrow_t&) noexcept {
  function noexcept (line 74) | void operator delete[](void* p, const std::nothrow_t&) noexcept {
  function delete (line 104) | void operator delete(void* p, std::size_t n) noexcept {
  function noexcept (line 108) | void operator delete[](void* p, std::size_t n) noexcept {
  function delete (line 115) | void operator delete(void* p, std::align_val_t al) noexcept {
  function noexcept (line 119) | void operator delete[](void* p, std::align_val_t al) noexcept {
  function delete (line 123) | void operator delete(void* p, std::size_t n, std::align_val_t al) noexce...
  function noexcept (line 127) | void operator delete[](void* p, std::size_t n, std::align_val_t al) noex...
  function delete (line 131) | void operator delete(void* p, std::align_val_t al, const std::nothrow_t&...
  function noexcept (line 135) | void operator delete[](void* p, std::align_val_t al, const std::nothrow_...

FILE: src/core/allocation_tracker_test.cc
  type dfly (line 14) | namespace dfly {
    class LogSink (line 19) | class LogSink : public google::LogSink {
      method send (line 21) | void send(google::LogSeverity severity, const char* full_filename, c...
      method Clear (line 30) | void Clear() {
    class AllocationTrackerTest (line 38) | class AllocationTrackerTest : public Test {
      method AllocationTrackerTest (line 40) | AllocationTrackerTest() {
      method GetLogsDelta (line 49) | vector<string> GetLogsDelta() {
      method Allocate (line 55) | void Allocate(size_t s) {
      method Deallocate (line 60) | void Deallocate() {
    function TEST_F (line 71) | TEST_F(AllocationTrackerTest, UnusedTracker) {
    function TEST_F (line 77) | TEST_F(AllocationTrackerTest, UsedTracker) {
    function TEST_F (line 106) | TEST_F(AllocationTrackerTest, MultipleRanges) {
    function TEST_F (line 138) | TEST_F(AllocationTrackerTest, Sampling) {

FILE: src/core/bloom.cc
  type dfly (line 16) | namespace dfly {
    function XXH128_hash_t (line 22) | XXH128_hash_t Hash(string_view str) {
    function GetMask (line 26) | uint64_t GetMask(unsigned log) {
    function BitIndex (line 30) | uint64_t BitIndex(uint64_t low, uint64_t hi, unsigned i, uint64_t mask) {
    function BPE (line 37) | double BPE(double fp_prob) {
    function SBF (line 169) | SBF& SBF::operator=(SBF&& src) noexcept {

FILE: src/core/bloom.h
  function namespace (line 13) | namespace dfly {

FILE: src/core/bloom_test.cc
  type dfly (line 12) | namespace dfly {
    class BloomTest (line 16) | class BloomTest : public ::testing::Test {
      method BloomTest (line 18) | BloomTest() {
    function TEST_F (line 29) | TEST_F(BloomTest, Basic) {
    function TEST_F (line 48) | TEST_F(BloomTest, ErrorBound) {
    function TEST_F (line 64) | TEST_F(BloomTest, Extreme) {
    function TEST_F (line 75) | TEST_F(BloomTest, SBF) {
    function BM_BloomExist (line 91) | static void BM_BloomExist(benchmark::State& state) {

FILE: src/core/bptree_set.h
  function namespace (line 13) | namespace dfly {

FILE: src/core/bptree_set_test.cc
  type dfly (line 24) | namespace dfly {
    function ValidateNode (line 29) | bool ValidateNode(const Node* node, typename Node::KeyT ubound) {
    type ZsetPolicy (line 57) | struct ZsetPolicy {
      type KeyT (line 58) | struct KeyT {
      type KeyCompareTo (line 63) | struct KeyCompareTo {
    class BPTreeSetTest (line 80) | class BPTreeSetTest : public ::testing::Test {
      method BPTreeSetTest (line 86) | BPTreeSetTest() : mi_alloc_(mi_heap_get_backing()), bptree_(&mi_allo...
      method SetUpTestSuite (line 88) | static void SetUpTestSuite() {
      method FillTree (line 91) | void FillTree(unsigned start, unsigned factor) {
      method FillTree (line 97) | void FillTree(unsigned factor = 1) {
    function TEST_F (line 136) | TEST_F(BPTreeSetTest, BPtreeInsert) {
    function TEST_F (line 182) | TEST_F(BPTreeSetTest, Delete) {
    function TEST_F (line 229) | TEST_F(BPTreeSetTest, Iterate) {
    function TEST_F (line 258) | TEST_F(BPTreeSetTest, Ranges) {
    function TEST_F (line 284) | TEST_F(BPTreeSetTest, HalfRanges) {
    function TEST_F (line 304) | TEST_F(BPTreeSetTest, MemoryUsage) {
    function TEST_F (line 352) | TEST_F(BPTreeSetTest, InsertSDS) {
    function TEST_F (line 371) | TEST_F(BPTreeSetTest, ReverseIterate) {
    function string (line 413) | static string RandomString(mt19937& rand, unsigned len) {
    function GenerateRandomPairs (line 425) | std::vector<ZsetPolicy::KeyT> GenerateRandomPairs(unsigned len) {
    function BM_FindRandomBPTree (line 435) | static void BM_FindRandomBPTree(benchmark::State& state) {
    function BM_FindRandomZSL (line 459) | static void BM_FindRandomZSL(benchmark::State& state) {
    function RegisterBPTreeBench (line 493) | void RegisterBPTreeBench() {
    function TEST_F (line 500) | TEST_F(BPTreeSetTest, ForceUpdate) {

FILE: src/core/cms.cc
  type dfly (line 15) | namespace dfly {
    function Offset (line 18) | uint32_t Offset(uint64_t h1, uint64_t h2, uint32_t row, uint32_t width) {
    function CMS (line 50) | CMS& CMS::operator=(CMS&& other) noexcept {

FILE: src/core/cms.h
  function namespace (line 12) | namespace dfly {

FILE: src/core/cms_test.cc
  type dfly (line 13) | namespace dfly {
    class CMSTest (line 17) | class CMSTest : public ::testing::Test {
      method CMSTest (line 19) | CMSTest() : cms_(CMS(1000, 5, PMR_NS::get_default_resource())) {
    function TEST_F (line 26) | TEST_F(CMSTest, InitialCountIsZero) {
    function TEST (line 34) | TEST(CMSBasic, InitialCountIsZeroSmall) {
    function TEST (line 40) | TEST(CMSBasic, IncrBySmall) {
    function TEST (line 48) | TEST(CMSBasic, InitByProb) {
    function TEST_F (line 59) | TEST_F(CMSTest, IncrByMultipleItems) {
    function TEST_F (line 69) | TEST_F(CMSTest, BasicIncrBy) {
    function TEST_F (line 79) | TEST_F(CMSTest, QueryReturnsMinimum) {
    function TEST_F (line 88) | TEST_F(CMSTest, NeverUnderestimates) {
    function TEST_F (line 100) | TEST_F(CMSTest, UnseenItemIsZero) {
    function TEST_F (line 106) | TEST_F(CMSTest, Dimensions) {
    function TEST_F (line 111) | TEST_F(CMSTest, MallocUsed) {
    function TEST_F (line 116) | TEST_F(CMSTest, MergeFrom) {
    function TEST_F (line 127) | TEST_F(CMSTest, MergeFromWithWeight) {
    function TEST_F (line 137) | TEST_F(CMSTest, MergeDimensionMismatch) {
    function TEST (line 147) | TEST(CMSBasic, MergeMultipleWithWeights) {
    function TEST (line 191) | TEST(CMSBasic, CountTracking) {
    function TEST (line 205) | TEST(CMSBasic, CountAfterMerge) {
    function TEST_F (line 233) | TEST_F(CMSTest, MoveConstruct) {
    function TEST_F (line 242) | TEST_F(CMSTest, MoveAssign) {

FILE: src/core/collection_entry.h
  function namespace (line 13) | namespace dfly {
  function CollectionEntry (line 82) | inline bool CollectionEntry::operator==(std::string_view sv) const {

FILE: src/core/compact_object.cc
  type dfly (line 42) | namespace dfly {
    function UpdateSize (line 53) | size_t UpdateSize(size_t size, int64_t update) {
    function FreeObjSet (line 62) | inline void FreeObjSet(unsigned encoding, void* ptr, MemoryResource* m...
    function FreeList (line 77) | void FreeList(unsigned encoding, void* ptr, MemoryResource* mr) {
    function MallocUsedSet (line 86) | size_t MallocUsedSet(unsigned encoding, void* ptr) {
    function MallocUsedHSet (line 100) | size_t MallocUsedHSet(unsigned encoding, void* ptr) {
    function MallocUsedZSet (line 113) | size_t MallocUsedZSet(unsigned encoding, void* ptr) {
    function streamRadixTreeMemoryUsage (line 140) | size_t streamRadixTreeMemoryUsage(rax* rax) {
    function MallocUsedStream (line 149) | size_t MallocUsedStream(stream* s) {
    function FreeObjHash (line 215) | inline void FreeObjHash(unsigned encoding, void* ptr) {
    function FreeObjZset (line 228) | inline void FreeObjZset(unsigned encoding, void* ptr) {
    function DefragStrMap2 (line 241) | pair<void*, bool> DefragStrMap2(StringMap* sm, PageUsage* page_usage) {
    function DefragListPack (line 250) | pair<void*, bool> DefragListPack(uint8_t* lp, PageUsage* page_usage) {
    function DefragIntSet (line 262) | pair<void*, bool> DefragIntSet(intset* is, PageUsage* page_usage) {
    function DefragSortedMap (line 274) | pair<void*, bool> DefragSortedMap(detail::SortedMap* sm, PageUsage* pa...
    function DefragStrSet (line 279) | pair<void*, bool> DefragStrSet(StringSet* ss, PageUsage* page_usage) {
    function DefragHash (line 291) | pair<void*, bool> DefragHash(unsigned encoding, void* ptr, PageUsage* ...
    function DefragSet (line 308) | pair<void*, bool> DefragSet(unsigned encoding, void* ptr, PageUsage* p...
    function DefragZSet (line 324) | pair<void*, bool> DefragZSet(unsigned encoding, void* ptr, PageUsage* ...
    function DefragList (line 341) | pair<void*, bool> DefragList(unsigned encoding, void* ptr, PageUsage* ...
    function FreeObjStream (line 350) | inline void FreeObjStream(void* ptr) {
    type Huffman (line 371) | struct Huffman {
    type TL (line 376) | struct TL {
      method HuffmanDecoder (line 384) | const HuffmanDecoder& GetHuffmanDecoder(uint8_t huffman_domain) const {
    type detail (line 397) | namespace detail {
    function JsonEnconding (line 653) | uint32_t JsonEnconding() {
    function CompactObj (line 710) | CompactObj& CompactObj::operator=(CompactObj&& o) noexcept {
    function CompactObjType (line 808) | CompactObjType CompactObj::ObjType() const {
    function SBF (line 953) | SBF* CompactObj::GetSBF() const {
    function CMS (line 967) | CMS* CompactObj::GetCMS() const {
    function TOPK (line 981) | TOPK* CompactObj::GetTOPK() const {
    function string_view (line 1025) | string_view CompactObj::GetSlice(string* scratch) const {
    function string_view (line 1228) | string_view CompactObj::GetEncodedBlob(StrEncoding str_encoding, char*...
    function MemoryResource (line 1756) | MemoryResource* CompactObj::memory_resource() {
    function string_view (line 1760) | string_view CompactObj::SdsTtlString::view() const {
    function ObjTypeToString (line 1809) | std::string_view ObjTypeToString(CompactObjType type) {
    function CompactObjType (line 1820) | CompactObjType ObjTypeFromString(std::string_view sv) {
    function StringOrView (line 1958) | StringOrView CompactObj::StrEncoding::Decode(std::string_view blob) co...
    function stream (line 1973) | stream* streamNew() {
    function streamFreeConsumer (line 1993) | static void streamFreeConsumer(streamConsumer* sc) {
    function streamFreeConsumerVoid (line 2001) | static void streamFreeConsumerVoid(void* sc) {
    function streamFreeCGVoid (line 2006) | static void streamFreeCGVoid(void* cg_) {
    function lpFreeVoid (line 2013) | static void lpFreeVoid(void* lp) {
    function freeStream (line 2018) | void freeStream(stream* s) {

FILE: src/core/compact_object.h
  type stream (line 18) | typedef struct stream stream;
  function namespace (line 22) | namespace tiering {
  function namespace (line 39) | namespace detail {
  type TagEnum (line 124) | enum TagEnum : uint8_t {
  type EncodingEnum (line 141) | enum EncodingEnum : uint8_t {
  type StrEncoding (line 150) | struct StrEncoding {
  function ExternalRep (line 173) | enum class ExternalRep : uint8_t {

FILE: src/core/compact_object_test.cc
  type dfly (line 31) | namespace dfly {
    function PrintTo (line 41) | void PrintTo(const CompactObj& cobj, std::ostream* os) {
    function AllocateForTest (line 52) | std::vector<void*> AllocateForTest(int size, std::size_t allocate_size...
    function HasUnderutilizedMemory (line 66) | bool HasUnderutilizedMemory(const std::vector<void*>& ptrs, float rati...
    function DeallocateAtRandom (line 78) | void DeallocateAtRandom(size_t steps, std::vector<void*>* ptrs) {
    function InitThreadStructs (line 85) | static void InitThreadStructs() {
    function CheckEverythingDeallocated (line 94) | static void CheckEverythingDeallocated() {
    class CompactObjectTest (line 108) | class CompactObjectTest : public ::testing::Test {
      method SetUpTestSuite (line 110) | static void SetUpTestSuite() {
      method TearDownTestSuite (line 116) | static void TearDownTestSuite() {
    function TEST_F (line 126) | TEST_F(CompactObjectTest, WastedMemoryDetection) {
    function TEST_F (line 198) | TEST_F(CompactObjectTest, WastedMemoryDontCount) {
    function TEST_F (line 263) | TEST_F(CompactObjectTest, NonInline) {
    function TEST_F (line 278) | TEST_F(CompactObjectTest, InlineAsciiEncoded) {
    function TEST_F (line 286) | TEST_F(CompactObjectTest, Int) {
    function TEST_F (line 295) | TEST_F(CompactObjectTest, Expire) {
    function TEST_F (line 305) | TEST_F(CompactObjectTest, SdsTtlTag) {
    function TEST_F (line 454) | TEST_F(CompactObjectTest, MediumString) {
    function TEST_F (line 469) | TEST_F(CompactObjectTest, AsciiUtil) {
    function TEST_F (line 493) | TEST_F(CompactObjectTest, AsciiPackByte) {
    function TEST_F (line 560) | TEST_F(CompactObjectTest, IntSet) {
    function TEST_F (line 577) | TEST_F(CompactObjectTest, ZSet) {
    function TEST_F (line 591) | TEST_F(CompactObjectTest, Hash) {
    function TEST_F (line 600) | TEST_F(CompactObjectTest, SBF) {
    function TEST_F (line 606) | TEST_F(CompactObjectTest, MimallocUnderutilzation) {
    function TEST_F (line 622) | TEST_F(CompactObjectTest, MimallocUnderutilzationDifferentSizes) {
    function TEST_F (line 640) | TEST_F(CompactObjectTest, MimallocUnderutilzationWithRealloc) {
    function TEST_F (line 669) | TEST_F(CompactObjectTest, JsonTypeTest) {
    function TEST_F (line 710) | TEST_F(CompactObjectTest, JsonTypeWithPathTest) {
    function TEST_F (line 760) | TEST_F(CompactObjectTest, DefragHash) {
    function TEST_F (line 815) | TEST_F(CompactObjectTest, DefragSet) {
    function TEST_F (line 824) | TEST_F(CompactObjectTest, StrEncodingAndMaterialize) {
    function TEST_F (line 856) | TEST_F(CompactObjectTest, ExternalRepresentation) {
    function TEST_F (line 872) | TEST_F(CompactObjectTest, AsanTriggerReadOverflow) {
    function TEST_F (line 878) | TEST_F(CompactObjectTest, lpGetInteger) {
    function BuildEncoderAB (line 906) | static void BuildEncoderAB(HuffmanEncoder* encoder) {
    function TEST_F (line 914) | TEST_F(CompactObjectTest, Huffman) {
    function TEST_F (line 944) | TEST_F(CompactObjectTest, GetByteAtOffset) {
    function TEST_F (line 1022) | TEST_F(CompactObjectTest, SetByteAtOffset) {
    function ascii_pack_naive (line 1166) | static void ascii_pack_naive(const char* ascii, size_t len, uint8_t* b...
    function BM_PackNaive (line 1184) | static void BM_PackNaive(benchmark::State& state) {
    function BM_Pack (line 1194) | static void BM_Pack(benchmark::State& state) {
    function BM_PackSimd (line 1204) | static void BM_PackSimd(benchmark::State& state) {
    function BM_PackSimd2 (line 1214) | static void BM_PackSimd2(benchmark::State& state) {
    function BM_Unpack (line 1224) | static void BM_Unpack(benchmark::State& state) {
    function BM_UnpackSimd (line 1236) | static void BM_UnpackSimd(benchmark::State& state) {
    function BM_LpCompare (line 1248) | static void BM_LpCompare(benchmark::State& state) {
    function BM_LpCompareInt (line 1267) | static void BM_LpCompareInt(benchmark::State& state) {
    function BM_LpGet (line 1290) | static void BM_LpGet(benchmark::State& state) {
    function BM_LpString2Int (line 1322) | static void BM_LpString2Int(benchmark::State& state) {

FILE: src/core/dash.h
  function namespace (line 12) | namespace dfly {
  function iterator (line 156) | iterator begin() {
  function Segment_t (line 181) | Segment_t* GetSegment(unsigned segment_id) {
  function FindBuddyId (line 190) | unsigned FindBuddyId(unsigned segment_id) {
  function Merge (line 219) | bool Merge(unsigned keep_id, unsigned buddy_id) {
  function NextSeg (line 294) | size_t NextSeg(size_t sid) const {
  function LargestBucketId (line 324) | static constexpr unsigned LargestBucketId() {
  function const_bucket_iterator (line 357) | static const_bucket_iterator BucketIt(const_iterator it) {
  function _Value (line 828) | _Value, Policy>::Find(U&& key) -> iterator {
  function _Value (line 842) | _Value, Policy>::FindFirst(uint64_t key_hash, Pred&& pred) -> iterator {
  function _Value (line 868) | _Value, Policy>::Erase(iterator it) {
  function hash_fn (line 981) | auto hash_fn = [this](const auto& k) { return policy_.HashFn(k); }
  function throw (line 1002) | throw std::bad_alloc{}
  function hash_fn (line 1047) | auto hash_fn = [this](const auto& k) { return policy_.HashFn(k); }
  function hash_fun (line 1112) | auto hash_fun = [this](const auto& k) { return policy_.HashFn(k); }

FILE: src/core/dash_bench.cc
  function ABSL_FLAG (line 22) | ABSL_FLAG(uint32_t, n, 100000, "num items");
  type UInt64Policy (line 53) | struct UInt64Policy {
    method HashFn (line 57) | static uint64_t HashFn(uint64_t v) {
    method DestroyValue (line 61) | static void DestroyValue(const U&) {
    method DestroyKey (line 63) | static void DestroyKey(const U&) {
    method Equal (line 66) | static bool Equal(U&& u, V&& v) {
  type SdsDashPolicy (line 71) | struct SdsDashPolicy {
    method HashFn (line 75) | static uint64_t HashFn(sds u) {
    method HashFn (line 79) | static uint64_t HashFn(std::string_view u) {
    method DestroyKey (line 83) | static void DestroyKey(sds s) {
    method DestroyValue (line 87) | static void DestroyValue(uint64_t) {
    method Equal (line 90) | static bool Equal(sds u1, sds u2) {
    method Equal (line 94) | static bool Equal(sds u1, std::string_view u2) {
  function Sample (line 104) | inline void Sample(int64_t start, int64_t end, base::Histogram* hist) {
  function GetNow (line 114) | int64_t GetNow() {
  function BenchFlat (line 130) | void BenchFlat(uint64_t num) {
  function BenchDash (line 141) | void BenchDash(uint64_t num) {
  function sds (line 152) | inline sds Prefix() {
  function BenchDashSds (line 156) | void BenchDashSds(uint64_t num) {
  function callbackHash (line 168) | static uint64_t callbackHash(const void* key) {
  function BenchDict (line 176) | void BenchDict(uint64_t num) {
  function BenchDictSds (line 188) | void BenchDictSds() {
  function main (line 208) | int main(int argc, char* argv[]) {

FILE: src/core/dash_internal.h
  function namespace (line 19) | namespace dfly {
  type Iterator (line 376) | struct Iterator {
  function SlowSize (line 427) | size_t SlowSize() const;
  function set_local_depth (line 441) | void set_local_depth(uint32_t depth) {
  function NumProbingBuckets (line 469) | unsigned NumProbingBuckets() const {
  function Bucket (line 477) | const Bucket& GetBucket(PhysicalBid i) const {
  function IsBusy (line 485) | bool IsBusy(PhysicalBid bid, unsigned slot) const {
  function Key_t (line 494) | const Key_t& Key(PhysicalBid bid, unsigned slot) const {
  function Value_t (line 504) | const Value_t& Value(PhysicalBid bid, unsigned slot) const {
  function FillProbeArray (line 511) | static void FillProbeArray(Hash_t key_hash, uint8_t dest[4]) {
  function set_segment_id (line 582) | void set_segment_id(uint32_t new_id) {
  function LogicalBid (line 589) | static LogicalBid HomeIndex(Hash_t hash) {
  function LogicalBid (line 593) | static LogicalBid NextBid(LogicalBid bid) {
  function LogicalBid (line 597) | static LogicalBid PrevBid(LogicalBid bid) {
  function class (line 633) | class DashTableBase {
  function IteratorPair (line 682) | const IteratorPair* operator->() const {
  function class (line 697) | class DashCursor {
  function segment_id (line 720) | uint32_t segment_id(uint8_t depth) const {
  function Value (line 1055) | Value, Policy>::Bucket::ShiftRight() {
  function is_mine (line 1243) | auto is_mine = [this](Hash_t hash) { return (hash >> (64 - local_depth_)...

FILE: src/core/dash_test.cc
  type dfly (line 33) | namespace dfly {
    function callbackHash (line 35) | static uint64_t callbackHash(const void* key) {
    function EqTo (line 39) | auto EqTo(const K& key) {
    function dictSdsHash (line 45) | static uint64_t dictSdsHash(const void* key) {
    function dictSdsKeyCompare (line 49) | static int dictSdsKeyCompare(dict*, const void* key1, const void* key2) {
    type Buf24 (line 71) | struct Buf24 {
      method Buf24 (line 75) | Buf24(uint32_t i = 0) : index(i) {
    type BasicDashPolicy (line 79) | struct BasicDashPolicy {
      method DestroyValue (line 83) | static void DestroyValue(const U&) {
      method DestroyKey (line 85) | static void DestroyKey(const U&) {
      method Equal (line 88) | static bool Equal(U&& u, V&& v) {
    type UInt64Policy (line 92) | struct UInt64Policy : public BasicDashPolicy {
      method HashFn (line 93) | static uint64_t HashFn(uint64_t v) {
    class CappedResource (line 98) | class CappedResource final : public PMR_NS::memory_resource {
      method CappedResource (line 100) | explicit CappedResource(size_t cap) : cap_(cap) {
      method used (line 103) | size_t used() const {
      method do_deallocate (line 118) | void do_deallocate(void* ptr, std::size_t size, std::size_t align) {
      method do_is_equal (line 123) | bool do_is_equal(const PMR_NS::memory_resource& o) const noexcept {
    type RelaxedBumpPolicy (line 134) | struct RelaxedBumpPolicy {
      method CanBump (line 135) | bool CanBump(uint64_t key) const {
      method OnMove (line 138) | void OnMove(Dash64::Cursor source, Dash64::Cursor dest) {
    class DashTest (line 146) | class DashTest : public testing::Test {
      method SetUpTestSuite (line 148) | static void SetUpTestSuite() {
      method DashTest (line 152) | DashTest() : segment_(1, 0, PMR_NS::get_default_resource()) {
      method Find (line 155) | bool Find(Segment::Key_t key, Segment::Value_t* val) const {
      method Contains (line 165) | bool Contains(Segment::Key_t key) const {
    function TEST_F (line 199) | TEST_F(DashTest, Hash) {
    function TEST_F (line 208) | TEST_F(DashTest, SlotBitmap) {
    function TEST_F (line 216) | TEST_F(DashTest, Basic) {
    function TEST_F (line 243) | TEST_F(DashTest, Segment) {
    function TEST_F (line 289) | TEST_F(DashTest, SegmentFull) {
    function TEST_F (line 326) | TEST_F(DashTest, FirstStash) {
    function TEST_F (line 352) | TEST_F(DashTest, Split) {
    function TEST_F (line 376) | TEST_F(DashTest, Merge) {
    function TEST_F (line 449) | TEST_F(DashTest, MergeFailureRollback) {
    function TEST_F (line 512) | TEST_F(DashTest, FindBuddySymmetry) {
    function TEST_F (line 538) | TEST_F(DashTest, MergePreservesSize) {
    function TEST_F (line 576) | TEST_F(DashTest, MergeKeyLookupConsistency) {
    function TEST_F (line 627) | TEST_F(DashTest, MergeAndGrow) {
    function TEST_F (line 687) | TEST_F(DashTest, MergeDirectoryConsistency) {
    function TEST_F (line 740) | TEST_F(DashTest, MergeWithAliasedEntries) {
    function TEST_F (line 834) | TEST_F(DashTest, FindBuddyIdCanonicalForStripe) {
    function TEST_F (line 938) | TEST_F(DashTest, NextSegCanonicalBehavior) {
    function TEST_F (line 1008) | TEST_F(DashTest, BumpUp) {
    function TEST_F (line 1078) | TEST_F(DashTest, BumpPolicy) {
    function TEST_F (line 1107) | TEST_F(DashTest, Insert2) {
    function TEST_F (line 1117) | TEST_F(DashTest, InsertOOM) {
    type Item (line 1130) | struct Item {
    type MyBucket (line 1136) | struct MyBucket : public detail::BucketBase<16> {
    function TEST_F (line 1143) | TEST_F(DashTest, Custom) {
    function TEST_F (line 1161) | TEST_F(DashTest, FindByValue) {
    function TEST_F (line 1180) | TEST_F(DashTest, Reserve) {
    function TEST_F (line 1188) | TEST_F(DashTest, Insert) {
    function TEST_F (line 1227) | TEST_F(DashTest, Traverse) {
    function TEST_F (line 1250) | TEST_F(DashTest, TraverseSegmentOrder) {
    function TEST_F (line 1274) | TEST_F(DashTest, TraverseBucketOrder) {
    type TestEvictionPolicy (line 1309) | struct TestEvictionPolicy {
      method TestEvictionPolicy (line 1313) | explicit TestEvictionPolicy(unsigned max_cap) : max_capacity(max_cap) {
      method CanGrow (line 1316) | bool CanGrow(const Dash64& tbl) const {
      method OnMove (line 1319) | void OnMove(Dash64::Cursor source, Dash64::Cursor dest) {
      method RecordSplit (line 1322) | void RecordSplit(Dash64::Segment_t*) {
      method Evict (line 1325) | unsigned Evict(const Dash64::HotBuckets& hotb, Dash64* me) const {
    function TEST_F (line 1344) | TEST_F(DashTest, Eviction) {
    type VersionPolicy (line 1415) | struct VersionPolicy : public BasicDashPolicy {
      method HashFn (line 1418) | static uint64_t HashFn(int v) {
    function TEST_F (line 1424) | TEST_F(DashTest, Version) {
    function TEST_F (line 1456) | TEST_F(DashTest, CVCUponInsert) {
    function TEST_F (line 1485) | TEST_F(DashTest, CVCUponInsertStress) {
    type A (line 1495) | struct A {
      method A (line 1499) | A(int i = 0) : a(i) {
      method A (line 1501) | A(const A&) = delete;
      method A (line 1502) | A(A&& o) : a(o.a), moved(o.moved + 1) {
      method A (line 1506) | A& operator=(const A&) = delete;
      method A (line 1507) | A& operator=(A&& o) noexcept {
    type ADashPolicy (line 1519) | struct ADashPolicy : public BasicDashPolicy {
      method HashFn (line 1520) | static uint64_t HashFn(const A& a) {
    function TEST_F (line 1526) | TEST_F(DashTest, Moveable) {
    type SdsDashPolicy (line 1537) | struct SdsDashPolicy {
      method HashFn (line 1541) | static uint64_t HashFn(sds u) {
      method HashFn (line 1545) | static uint64_t HashFn(std::string_view u) {
      method DestroyValue (line 1549) | static void DestroyValue(uint64_t) {
      method DestroyKey (line 1551) | static void DestroyKey(sds s) {
      method Equal (line 1555) | static bool Equal(sds u1, sds u2) {
      method Equal (line 1559) | static bool Equal(sds u1, std::string_view u2) {
    function TEST_F (line 1564) | TEST_F(DashTest, Sds) {
    type BlankPolicy (line 1572) | struct BlankPolicy : public BasicDashPolicy {
      method HashFn (line 1573) | static uint64_t HashFn(uint64_t v) {
    function TEST_F (line 1580) | TEST_F(DashTest, SplitBug) {
    type EvictParams (line 1605) | struct EvictParams {
      method string (line 1609) | string PrintTo() const {
    function string (line 1617) | string PrintParams(const testing::TestParamInfo<EvictParams>& info) {
    type U64DashPolicy (line 1621) | struct U64DashPolicy {
      method DestroyValue (line 1625) | static void DestroyValue(uint64_t) {
      method DestroyKey (line 1627) | static void DestroyKey(uint64_t) {
      method Equal (line 1630) | static bool Equal(uint64_t u, uint64_t v) {
      method HashFn (line 1634) | static uint64_t HashFn(uint64_t v) {
    type SimpleEvictPolicy (line 1641) | struct SimpleEvictPolicy {
      method CanGrow (line 1645) | bool CanGrow(const U64Dash& tbl) {
      method OnMove (line 1649) | void OnMove(U64Dash::Cursor source, U64Dash::Cursor dest) {
      method RecordSplit (line 1652) | void RecordSplit(U64Dash::Segment_t* segment) {
      method Evict (line 1658) | unsigned Evict(const U64Dash::HotBuckets& hotb, U64Dash* me) {
    type ShiftRightPolicy (line 1685) | struct ShiftRightPolicy {
      method CanGrow (line 1693) | bool CanGrow(const U64Dash& tbl) {
      method RecordSplit (line 1697) | void RecordSplit(U64Dash::Segment_t* segment) {
      method OnMove (line 1700) | void OnMove(U64Dash::Cursor source, U64Dash::Cursor dest) {
      method Evict (line 1703) | unsigned Evict(const U64Dash::HotBuckets& hotb, U64Dash* me) {
    class EvictionPolicyTest (line 1722) | class EvictionPolicyTest : public testing::TestWithParam<EvictParams> {
      method Rand (line 1726) | uint64_t Rand() {
      method SetUp (line 1730) | void SetUp() final {
    function TEST_P (line 1756) | TEST_P(EvictionPolicyTest, HitRate) {
    function TEST_P (line 1774) | TEST_P(EvictionPolicyTest, HitRateZipf) {
    function TEST_P (line 1804) | TEST_P(EvictionPolicyTest, HitRateZipfShr) {
    function BM_Insert (line 1860) | static void BM_Insert(benchmark::State& state) {
    type NoDestroySdsPolicy (line 1874) | struct NoDestroySdsPolicy : public SdsDashPolicy {
      method DestroyKey (line 1875) | static void DestroyKey(sds s) {
    function BM_StringInsert (line 1879) | static void BM_StringInsert(benchmark::State& state) {
    function BM_FindExisting (line 1901) | static void BM_FindExisting(benchmark::State& state) {
    function BM_RedisDictFind (line 1920) | static void BM_RedisDictFind(benchmark::State& state) {
    function BM_RedisDictInsert (line 1942) | static void BM_RedisDictInsert(benchmark::State& state) {
    function BM_RedisStringInsert (line 1956) | static void BM_RedisStringInsert(benchmark::State& state) {

FILE: src/core/dense_set.cc
  type dfly (line 23) | namespace dfly {

FILE: src/core/dense_set.h
  function namespace (line 15) | namespace dfly {

FILE: src/core/detail/bitpacking.cc
  type dfly (line 14) | namespace dfly {
    type detail (line 16) | namespace detail {
      function Compress8x7bit (line 23) | static inline uint64_t Compress8x7bit(uint64_t x) {
      function simd_variant1_pack (line 32) | static inline pair<const char*, uint8_t*> simd_variant1_pack(const c...
      function simd_variant2_pack (line 70) | static inline pair<const char*, uint8_t*> simd_variant2_pack(const c...
      function validate_ascii_fast (line 108) | bool validate_ascii_fast(const char* src, size_t len) {
      function validate_ascii_fast (line 143) | bool validate_ascii_fast(const char* src, size_t len) {
      function ascii_pack (line 165) | void ascii_pack(const char* ascii, size_t len, uint8_t* bin) {
      function ascii_pack2 (line 187) | void ascii_pack2(const char* ascii, size_t len, uint8_t* bin) {
      function ascii_pack_simd (line 206) | void ascii_pack_simd(const char* ascii, size_t len, uint8_t* bin) {
      function ascii_pack_simd2 (line 223) | void ascii_pack_simd2(const char* ascii, size_t len, uint8_t* bin) {
      function ascii_unpack (line 250) | void ascii_unpack(const uint8_t* bin, size_t ascii_len, char* ascii) {
      function ascii_unpack_byte (line 273) | uint8_t ascii_unpack_byte(const uint8_t* bin, size_t ascii_len, size...
      function ascii_pack_byte (line 290) | void ascii_pack_byte(uint8_t* bin, size_t ascii_len, size_t idx, uin...
      function ascii_unpack_simd (line 313) | void ascii_unpack_simd(const uint8_t* bin, size_t ascii_len, char* a...
      function compare_packed (line 363) | bool compare_packed(const uint8_t* packed, const char* ascii, size_t...

FILE: src/core/detail/bitpacking.h
  function namespace (line 10) | namespace dfly {

FILE: src/core/detail/bptree_internal.h
  function namespace (line 12) | namespace dfly {

FILE: src/core/detail/gen_utils.h
  function namespace (line 12) | namespace dfly {

FILE: src/core/detail/listpack.cc
  type dfly (line 9) | namespace dfly {
    type detail (line 10) | namespace detail {
      function string (line 21) | string ListPack::Pop(QList::Where where) {
      function string (line 38) | string ListPack::First(QList::Where where) const {

FILE: src/core/detail/listpack.h
  function namespace (line 17) | namespace dfly {

FILE: src/core/detail/listpack_wrap.cc
  type dfly::detail (line 12) | namespace dfly::detail {
    function ListpackWrap (line 40) | ListpackWrap ListpackWrap::WithCapacity(size_t capacity) {

FILE: src/core/detail/listpack_wrap.h
  function namespace (line 10) | namespace dfly::detail {
  function explicit (line 48) | explicit ListpackWrap(uint8_t* lp) : lp_{lp}

FILE: src/core/detail/stateless_allocator.h
  function namespace (line 10) | namespace dfly {
  function CleanupStatelessAllocMR (line 70) | inline void CleanupStatelessAllocMR() {

FILE: src/core/dfly_core_test.cc
  type dfly (line 30) | namespace dfly {
    function string (line 36) | static string GetRandomHex(size_t len) {
    class TxQueueTest (line 59) | class TxQueueTest : public ::testing::Test {
      method TxQueueTest (line 61) | TxQueueTest() {
      method Pop (line 64) | uint64_t Pop() {
    function TEST_F (line 76) | TEST_F(TxQueueTest, Basic) {
    class IntentLockTest (line 101) | class IntentLockTest : public ::testing::Test {
    function TEST_F (line 106) | TEST_F(IntentLockTest, Basic) {
    class StringMatchTest (line 116) | class StringMatchTest : public ::testing::Test {
      method MatchLen (line 119) | bool MatchLen(string_view pattern, string_view str, bool nocase) {
    function TEST_F (line 125) | TEST_F(StringMatchTest, Glob2Regex) {
    function TEST_F (line 145) | TEST_F(StringMatchTest, Basic) {
    function TEST_F (line 191) | TEST_F(StringMatchTest, Special) {
    class HuffCoderTest (line 294) | class HuffCoderTest : public ::testing::Test {
    function TEST_F (line 303) | TEST_F(HuffCoderTest, Load) {
    function TEST_F (line 316) | TEST_F(HuffCoderTest, Encode) {
    function TEST_F (line 341) | TEST_F(HuffCoderTest, Decode) {
    function TEST_F (line 368) | TEST_F(HuffCoderTest, HugeHistogram) {
    function BM_ParseFastFloat (line 426) | static void BM_ParseFastFloat(benchmark::State& state) {
    function BM_ParseDoubleAbsl (line 442) | static void BM_ParseDoubleAbsl(benchmark::State& state) {
    function BM_ClockType (line 458) | void BM_ClockType(benchmark::State& state) {
    function BM_MatchGlob (line 478) | static void BM_MatchGlob(benchmark::State& state) {
    function BM_MatchGlob2 (line 487) | static void BM_MatchGlob2(benchmark::State& state) {
    function BM_MatchGlobExp (line 497) | static void BM_MatchGlobExp(benchmark::State& state) {
    function BM_MatchFindSubstr (line 505) | static void BM_MatchFindSubstr(benchmark::State& state) {
    function BM_MatchReflexFind (line 514) | static void BM_MatchReflexFind(benchmark::State& state) {
    function BM_MatchReflexFindStar (line 524) | static void BM_MatchReflexFindStar(benchmark::State& state) {
    function BM_MatchStd (line 535) | static void BM_MatchStd(benchmark::State& state) {
    function BM_MatchRedisGlob (line 545) | static void BM_MatchRedisGlob(benchmark::State& state) {
    function BM_MatchRedisGlob2 (line 555) | static void BM_MatchRedisGlob2(benchmark::State& state) {
    function BM_MatchData (line 565) | static void BM_MatchData(benchmark::State& state) {
    function BM_MatchRe2 (line 590) | static void BM_MatchRe2(benchmark::State& state) {
    function create_pcre2 (line 604) | pair<pcre2_code*, pcre2_match_data*> create_pcre2(const char* pattern) {
    function pcre2_do_match (line 616) | int pcre2_do_match(string_view str, pcre2_code* re, pcre2_match_data* ...
    function BM_MatchPcre2Jit (line 622) | static void BM_MatchPcre2Jit(benchmark::State& state) {
    function BM_MatchPcre2Jit2 (line 638) | static void BM_MatchPcre2Jit2(benchmark::State& state) {
    function BM_MatchPcre2JitExp (line 651) | static void BM_MatchPcre2JitExp(benchmark::State& state) {
    function BM_MatchGlobSlow (line 666) | static void BM_MatchGlobSlow(benchmark::State& state) {

FILE: src/core/dict_builder.cc
  type dfly (line 16) | namespace dfly {
    function HashDmer (line 24) | inline uint32_t HashDmer(const uint8_t* data) {
    function UpdateHllRegister (line 39) | inline void UpdateHllRegister(uint32_t h, uint8_t* registers) {
    function EstimateHllCardinality (line 47) | double EstimateHllCardinality(const uint8_t* registers) {
    function CalculateFreqTableSize (line 73) | uint32_t CalculateFreqTableSize(absl::Span<const std::pair<const uint8...
    function PopulateFrequencyTable (line 83) | void PopulateFrequencyTable(absl::Span<const std::pair<const uint8_t*,...
    type BestSegmentResult (line 99) | struct BestSegmentResult {
    function BestSegmentResult (line 106) | BestSegmentResult FindBestSegment(absl::Span<const std::pair<const uin...
    function ZeroOutFrequencies (line 144) | void ZeroOutFrequencies(std::pair<const uint8_t*, size_t> data_piece, ...
    function EstimateCompressibility (line 158) | double EstimateCompressibility(absl::Span<const std::pair<const uint8_...
    function string (line 190) | string TrainDictionary(absl::Span<const pair<const uint8_t*, size_t>> ...

FILE: src/core/dict_builder.h
  function namespace (line 14) | namespace dfly {

FILE: src/core/dict_builder_test.cc
  type dfly (line 16) | namespace dfly {
    class DictBuilderTest (line 20) | class DictBuilderTest : public ::testing::Test {
      method GenerateCeleryEntries (line 25) | vector<string> GenerateCeleryEntries(unsigned count) {
      method ToPieces (line 55) | vector<DataPiece> ToPieces(const vector<string>& entries) {
      method GenerateRandomEntries (line 65) | vector<string> GenerateRandomEntries(unsigned count, size_t entry_si...
    function TEST_F (line 80) | TEST_F(DictBuilderTest, RepetitiveDataIsCompressible) {
    function TEST_F (line 89) | TEST_F(DictBuilderTest, RandomDataIsIncompressible) {
    function TEST_F (line 98) | TEST_F(DictBuilderTest, TrainDictionaryProducesOutput) {
    function TEST_F (line 108) | TEST_F(DictBuilderTest, TrainDictionaryEmptyForTinyData) {
    function TEST_F (line 117) | TEST_F(DictBuilderTest, ZstdCompressionWithTrainedDict) {
    function TEST_F (line 182) | TEST_F(DictBuilderTest, StepParameterWorks) {

FILE: src/core/dragonfly_core.cc
  type dfly (line 10) | namespace dfly {

FILE: src/core/expire_period.h
  function namespace (line 9) | namespace dfly {
  function Set (line 46) | inline void ExpirePeriod::Set(uint64_t ms) {

FILE: src/core/extent_tree.cc
  type dfly (line 9) | namespace dfly {

FILE: src/core/extent_tree.h
  function namespace (line 12) | namespace dfly {

FILE: src/core/extent_tree_test.cc
  type dfly (line 12) | namespace dfly {
    class ExtentTreeTest (line 16) | class ExtentTreeTest : public ::testing::Test {
      method SetUpTestSuite (line 18) | static void SetUpTestSuite() {
      method TearDownTestSuite (line 21) | static void TearDownTestSuite() {
    function TEST_F (line 27) | TEST_F(ExtentTreeTest, Basic) {
    function TEST_F (line 58) | TEST_F(ExtentTreeTest, Union) {

FILE: src/core/flatbuffers.h
  function namespace (line 15) | namespace dfly {

FILE: src/core/flatbuffers_test.cc
  type dfly (line 14) | namespace dfly {
    class FlatBuffersTest (line 15) | class FlatBuffersTest : public ::testing::Test {
    function TEST_F (line 19) | TEST_F(FlatBuffersTest, Basic) {
    function TEST_F (line 37) | TEST_F(FlatBuffersTest, FlexiParser) {
    function TEST_F (line 57) | TEST_F(FlatBuffersTest, ParseJson) {

FILE: src/core/generate_bin_sizes.py
  function print_small_bins (line 11) | def print_small_bins():
  function main (line 22) | def main():

FILE: src/core/glob_matcher.cc
  type dfly (line 11) | namespace dfly {
    function stringmatchlen_impl (line 15) | static int stringmatchlen_impl(const char* pattern, int patternLen, co...
    function stringmatchlen (line 150) | int stringmatchlen(const char* pattern, int patternLen, const char* st...
    function string (line 156) | string GlobMatcher::Glob2Regex(string_view glob) {

FILE: src/core/glob_matcher.h
  function namespace (line 26) | namespace dfly {

FILE: src/core/huff_coder.cc
  type dfly (line 15) | namespace dfly {
    function string (line 95) | string HuffmanEncoder::Export() const {

FILE: src/core/huff_coder.h
  function namespace (line 11) | namespace dfly {

FILE: src/core/intent_lock.h
  function namespace (line 10) | namespace dfly {

FILE: src/core/interpreter.cc
  type LuaGcGen (line 44) | struct LuaGcGen {
  type LuaGcInc (line 48) | struct LuaGcInc {
  function AbslParseFlag (line 68) | static bool AbslParseFlag(std::string_view in, LuaGcFlag* flag, std::str...
  function AbslUnparseFlag (line 97) | static std::string AbslUnparseFlag(const LuaGcFlag& flag) {
  type dfly (line 111) | namespace dfly {
    function EVPDigest (line 117) | int EVPDigest(const void* data, size_t datalen, unsigned char* md, siz...
    function PushError (line 131) | void PushError(lua_State* lua, string_view error, bool trace = true) {
    type StringCollectorTranslator (line 148) | struct StringCollectorTranslator : public ObjectExplorer {
      method OnString (line 149) | void OnString(std::string_view str) final {
      method OnArrayStart (line 152) | void OnArrayStart(unsigned len) final {
      method OnArrayEnd (line 159) | void OnArrayEnd() final {
      method OnBool (line 161) | void OnBool(bool b) final {
      method OnDouble (line 164) | void OnDouble(double d) final {
      method OnInt (line 167) | void OnInt(int64_t val) final {
      method OnNil (line 170) | void OnNil() final {
      method OnStatus (line 173) | void OnStatus(std::string_view str) final {
      method OnError (line 176) | void OnError(std::string_view str) final {
    class RedisTranslator (line 183) | class RedisTranslator : public ObjectExplorer {
      method RedisTranslator (line 185) | RedisTranslator(lua_State* lua) : lua_(lua) {
      method ArrayPre (line 200) | void ArrayPre() {
      method ArrayPost (line 203) | void ArrayPost() {
    function RunSafe (line 287) | void RunSafe(lua_State* lua, string_view buf, const char* name) {
    function Require (line 296) | void Require(lua_State* lua, const char* name, lua_CFunction openf) {
    function string_view (line 301) | string_view TopSv(lua_State* lua) {
    function FetchKey (line 305) | optional<int> FetchKey(lua_State* lua, const char* key) {
    function SetGlobalArrayInternal (line 324) | void SetGlobalArrayInternal(lua_State* lua, const char* name, Interpre...
    function RaiseErrorAndAbort (line 339) | int RaiseErrorAndAbort(lua_State* lua) {
    function LoadLibrary (line 345) | void LoadLibrary(lua_State* lua, const char* libname, lua_CFunction lu...
    function InitLua (line 351) | void InitLua(lua_State* lua) {
    function ToHex (line 420) | void ToHex(const uint8_t* src, char* dest) {
    function DragonflyHashCommand (line 429) | int DragonflyHashCommand(lua_State* lua) {
    function DragonflyRandstrCommand (line 466) | int DragonflyRandstrCommand(lua_State* state) {
    function RedisSha1Command (line 509) | int RedisSha1Command(lua_State* lua) {
    function SingleFieldTable (line 536) | int SingleFieldTable(lua_State* lua, const char* field) {
    function RedisErrorReplyCommand (line 549) | int RedisErrorReplyCommand(lua_State* lua) {
    function RedisStatusReplyCommand (line 553) | int RedisStatusReplyCommand(lua_State* lua) {
    function RedisReplicateCommands (line 558) | int RedisReplicateCommands(lua_State* lua) {
    function RedisLogCommand (line 564) | int RedisLogCommand(lua_State* lua) {
    function Interpreter (line 1267) | Interpreter* InterpreterManager::Get() {

FILE: src/core/interpreter.h
  type lua_State (line 16) | typedef struct lua_State lua_State;
  function namespace (line 18) | namespace dfly {

FILE: src/core/interpreter_polyfill.h
  function polyfill_table_getn (line 18) | static int polyfill_table_getn(lua_State* L) {
  function polyfill_table_setn (line 23) | static int polyfill_table_setn(lua_State* L) {
  function polyfill_table_foreach (line 31) | static int polyfill_table_foreach(lua_State* L) {
  function polyfill_table_foreachi (line 48) | static int polyfill_table_foreachi(lua_State* L) {
  function register_polyfills (line 66) | static void register_polyfills(lua_State* lua) {

FILE: src/core/interpreter_test.cc
  type dfly (line 26) | namespace dfly {
    class TestSerializer (line 29) | class TestSerializer : public ObjectExplorer {
      method OnBool (line 33) | void OnBool(bool b) final {
      method OnString (line 37) | void OnString(std::string_view str) final {
      method OnDouble (line 41) | void OnDouble(double d) final {
      method OnInt (line 45) | void OnInt(int64_t val) final {
      method OnArrayStart (line 49) | void OnArrayStart(unsigned len) final {
      method OnArrayEnd (line 53) | void OnArrayEnd() final {
      method OnNil (line 60) | void OnNil() final {
      method OnMapStart (line 64) | void OnMapStart(unsigned len) final {
      method OnMapEnd (line 68) | void OnMapEnd() final {
      method OnStatus (line 74) | void OnStatus(std::string_view str) {
      method OnError (line 78) | void OnError(std::string_view str) {
    class InterpreterTest (line 84) | class InterpreterTest : public ::testing::Test {
      method InterpreterTest (line 86) | InterpreterTest() {
      method lua_State (line 92) | lua_State* lua() {
      method RunInline (line 96) | void RunInline(string_view buf, const char* name, unsigned num_resul...
    function TEST_F (line 145) | TEST_F(InterpreterTest, Basic) {
    function TEST_F (line 189) | TEST_F(InterpreterTest, UnknownFunc) {
    function TEST_F (line 201) | TEST_F(InterpreterTest, Stack) {
    function TEST_F (line 228) | TEST_F(InterpreterTest, Add) {
    function TEST_F (line 251) | TEST_F(InterpreterTest, Execute) {
    function TEST_F (line 284) | TEST_F(InterpreterTest, Call) {
    function TEST_F (line 322) | TEST_F(InterpreterTest, CallArray) {
    function TEST_F (line 341) | TEST_F(InterpreterTest, ArgKeys) {
    function TEST_F (line 354) | TEST_F(InterpreterTest, Modules) {
    function TEST_F (line 375) | TEST_F(InterpreterTest, Compatibility) {
    function TEST_F (line 405) | TEST_F(InterpreterTest, AsyncReplacement) {
    function TEST_F (line 486) | TEST_F(InterpreterTest, ReplicateCommands) {
    function TEST_F (line 493) | TEST_F(InterpreterTest, Log) {
    function TEST_F (line 502) | TEST_F(InterpreterTest, Robust) {
    function TEST_F (line 509) | TEST_F(InterpreterTest, Unpack) {
    function TEST_F (line 530) | TEST_F(InterpreterTest, AvoidIntOverflow) {
    function TEST_F (line 535) | TEST_F(InterpreterTest, LuaIntOverflow) {
    function TEST_F (line 539) | TEST_F(InterpreterTest, LuaGcStatistic) {

FILE: src/core/json/detail/common.h
  function namespace (line 7) | namespace dfly::json::detail {

FILE: src/core/json/detail/flat_dfs.cc
  type dfly::json::detail (line 9) | namespace dfly::json::detail {
    function IsRecursive (line 14) | inline bool IsRecursive(flexbuffers::Type type) {
    function FindByKey (line 19) | unsigned FindByKey(const flexbuffers::TypedVector& keys, const char* e...
    function FlatDfs (line 104) | FlatDfs FlatDfs::Traverse(absl::Span<const PathSegment> path, const fl...

FILE: src/core/json/detail/flat_dfs.h
  function namespace (line 16) | namespace dfly::json::detail {

FILE: src/core/json/detail/interned_blob.cc
  type dfly::detail (line 16) | namespace dfly::detail {
    function InternedBlobHandle (line 18) | InternedBlobHandle InternedBlobHandle::Create(std::string_view sv) {

FILE: src/core/json/detail/interned_blob.h
  function namespace (line 10) | namespace dfly::detail {

FILE: src/core/json/detail/interned_string.cc
  type dfly::detail (line 13) | namespace dfly::detail {
    function InternedString (line 15) | InternedString& InternedString::operator=(InternedString other) {
    function InternedBlobHandle (line 35) | InternedBlobHandle InternedString::Intern(const std::string_view sv) {
    function InternedBlobPool (line 90) | InternedBlobPool& InternedString::GetPoolRef() {
  type dfly (line 101) | namespace dfly {
    function InternedStringStats (line 103) | InternedStringStats& InternedStringStats::operator+=(const InternedStr...
    function InternedStringStats (line 113) | InternedStringStats GetInternedStringStats() {

FILE: src/core/json/detail/interned_string.h
  function namespace (line 9) | namespace dfly::detail {

FILE: src/core/json/detail/jsoncons_dfs.cc
  type dfly::json::detail (line 11) | namespace dfly::json::detail {
    function ostream (line 16) | ostream& operator<<(ostream& os, const PathSegment& ps) {
    function IsRecursive (line 21) | inline bool IsRecursive(jsoncons::json_type type) {
    function Dfs (line 25) | Dfs Dfs::Traverse(absl::Span<const PathSegment> path, const JsonType& ...
    function Dfs (line 74) | Dfs Dfs::Mutate(absl::Span<const PathSegment> path, const MutateCallba...
    function Dfs (line 139) | Dfs Dfs::Delete(absl::Span<const PathSegment> path, JsonType* json) {

FILE: src/core/json/detail/jsoncons_dfs.h
  function namespace (line 17) | namespace dfly::json::detail {

FILE: src/core/json/driver.cc
  type dfly::json (line 15) | namespace dfly::json {
    class SingleValueImpl (line 19) | class SingleValueImpl : public AggFunction {
      method Result (line 20) | Result GetResultImpl() const final {
      method Init (line 25) | void Init(const JsonType& src) {
      method Init (line 33) | void Init(const flexbuffers::Reference src) {
    class MaxImpl (line 44) | class MaxImpl : public SingleValueImpl {
      method ApplyImpl (line 45) | bool ApplyImpl(const JsonType& src) final {
      method ApplyImpl (line 65) | bool ApplyImpl(flexbuffers::Reference src) final {
    class MinImpl (line 85) | class MinImpl : public SingleValueImpl {
      method ApplyImpl (line 87) | bool ApplyImpl(const JsonType& src) final {
      method ApplyImpl (line 107) | bool ApplyImpl(flexbuffers::Reference src) final {
    class AvgImpl (line 127) | class AvgImpl : public AggFunction {
      method ApplyImpl (line 129) | bool ApplyImpl(const JsonType& src) final {
      method ApplyImpl (line 139) | bool ApplyImpl(flexbuffers::Reference src) final {
      method Result (line 149) | Result GetResultImpl() const final {

FILE: src/core/json/driver.h
  function namespace (line 12) | namespace dfly {

FILE: src/core/json/interned_blob_test.cc
  function MiMemoryResource (line 14) | MiMemoryResource* MemoryResource() {
  class InternedBlobTest (line 22) | class InternedBlobTest : public testing::Test {
    method SetUp (line 24) | void SetUp() override {
    method TearDown (line 28) | void TearDown() override {
  function TEST_F (line 36) | TEST_F(InternedBlobTest, MemoryUsage) {
  function CheckBlob (line 47) | void CheckBlob(InternedBlobHandle& blob, std::string_view expected, uint...
  function TEST_F (line 53) | TEST_F(InternedBlobTest, Ctors) {
  function TEST_F (line 66) | TEST_F(InternedBlobTest, Comparison) {
  function TEST_F (line 80) | TEST_F(InternedBlobTest, RefCounts) {
  function TEST_F (line 88) | TEST_F(InternedBlobTest, Pool) {
  function StringCheck (line 106) | void StringCheck(const InternedString& s, const char* ptr) {
  function TEST_F (line 122) | TEST_F(InternedBlobTest, StringPool) {
  function TEST_F (line 179) | TEST_F(InternedBlobTest, StringApi) {
  function TEST_F (line 204) | TEST_F(InternedBlobTest, StringCtors) {
  function TEST_F (line 255) | TEST_F(InternedBlobTest, PoolShrink) {

FILE: src/core/json/json_object.cc
  function ParseWithDecoder (line 17) | std::optional<T> ParseWithDecoder(std::string_view input, json_decoder<T...
  function DefragmentByteString (line 53) | bool DefragmentByteString(JsonType& j, PageUsage* page_usage) {
  function DefragmentLongString (line 69) | bool DefragmentLongString(JsonType& j, PageUsage* page_usage) {
  function DefragmentJsonObject (line 83) | bool DefragmentJsonObject(JsonType& j, PageUsage* page_usage) {
  function DefragmentJsonArray (line 109) | bool DefragmentJsonArray(JsonType& j, PageUsage* page_usage) {
  type dfly (line 127) | namespace dfly {
    function JsonFromString (line 129) | std::optional<TmpJson> JsonFromString(std::string_view input) {
    function ParseJsonUsingShardHeap (line 133) | optional<JsonType> ParseJsonUsingShardHeap(string_view input) {
    function Defragment (line 137) | bool Defragment(JsonType& j, PageUsage* page_usage) {
    function ComputeMemorySize (line 180) | size_t ComputeMemorySize(const JsonType& j) {

FILE: src/core/json/json_object.h
  function namespace (line 23) | namespace dfly {

FILE: src/core/json/json_test.cc
  type dfly (line 14) | namespace dfly {
    class JsonTest (line 19) | class JsonTest : public ::testing::Test {
      method JsonTest (line 21) | JsonTest() {
    function TEST_F (line 25) | TEST_F(JsonTest, Basic) {
    function TEST_F (line 47) | TEST_F(JsonTest, SetEmpty) {
    function TEST_F (line 52) | TEST_F(JsonTest, Query) {
    function TEST_F (line 74) | TEST_F(JsonTest, Errors) {
    function TEST_F (line 92) | TEST_F(JsonTest, Path) {
    function TEST_F (line 148) | TEST_F(JsonTest, Delete) {
    function TEST_F (line 172) | TEST_F(JsonTest, JsonWithPolymorhicAllocator) {

FILE: src/core/json/jsonpath_test.cc
  type flexbuffers (line 13) | namespace flexbuffers {
  type dfly::json (line 19) | namespace dfly::json {
    function PrintTo (line 29) | void PrintTo(SegmentType st, std::ostream* os) {
    class TestDriver (line 33) | class TestDriver : public Driver {
      method Error (line 35) | void Error(const location& l, const std::string& msg) final {
    function JsonType (line 42) | JsonType ValidJson<JsonType>(string_view str) {
    function FlatJson (line 48) | FlatJson ValidJson<FlatJson>(string_view str) {
    function is_int (line 59) | bool is_int(const JsonType& val) {
    function to_int (line 63) | int to_int(const JsonType& val) {
    function is_object (line 67) | bool is_object(const JsonType& val) {
    function is_array (line 71) | bool is_array(const JsonType& val) {
    function is_int (line 75) | int is_int(FlatJson ref) {
    function to_int (line 79) | int to_int(FlatJson ref) {
    function is_object (line 83) | bool is_object(FlatJson ref) {
    function is_array (line 87) | bool is_array(FlatJson ref) {
    class ScannerTest (line 91) | class ScannerTest : public ::testing::Test {
      method SetUp (line 93) | void SetUp() override {
      method ScannerTest (line 98) | ScannerTest() : m_(mi_heap_get_backing()) {
      method SetInput (line 102) | void SetInput(const std::string& str) {
      method Lex (line 106) | Parser::symbol_type Lex() {
    class JsonPathTest (line 121) | class JsonPathTest : public ScannerTest {
      method Parse (line 123) | int Parse(const std::string& str) {
    function TEST_F (line 146) | TEST_F(ScannerTest, Basic) {
    function TEST_F (line 168) | TEST_F(ScannerTest, FlatToJson) {
    function TYPED_TEST (line 192) | TYPED_TEST(JsonPathTest, Parser) {
    function TYPED_TEST (line 223) | TYPED_TEST(JsonPathTest, Root) {
    function TYPED_TEST (line 236) | TYPED_TEST(JsonPathTest, Functions) {
    function TYPED_TEST (line 256) | TYPED_TEST(JsonPathTest, Descent) {
    function TYPED_TEST (line 274) | TYPED_TEST(JsonPathTest, QuotedStrings) {
    function TYPED_TEST (line 316) | TYPED_TEST(JsonPathTest, Path) {
    function TYPED_TEST (line 359) | TYPED_TEST(JsonPathTest, EvalDescent) {
    function TYPED_TEST (line 414) | TYPED_TEST(JsonPathTest, EvalDescent2) {
    function TYPED_TEST (line 447) | TYPED_TEST(JsonPathTest, Wildcard) {
    function TYPED_TEST (line 470) | TYPED_TEST(JsonPathTest, Mutate) {
    function TYPED_TEST (line 527) | TYPED_TEST(JsonPathTest, MutateRecursiveDescentKey) {
    function TYPED_TEST (line 549) | TYPED_TEST(JsonPathTest, SubRange) {
    function TYPED_TEST (line 603) | TYPED_TEST(JsonPathTest, DeleteNestedWithSameKey) {
    function TYPED_TEST (line 629) | TYPED_TEST(JsonPathTest, DeleteRecursiveWithKeysAndArrayValues) {

FILE: src/core/json/lexer_impl.cc
  type dfly::json (line 9) | namespace dfly::json {

FILE: src/core/json/lexer_impl.h
  function namespace (line 15) | namespace dfly {

FILE: src/core/json/path.cc
  type dfly::json (line 20) | namespace dfly::json {
    class JsonPathDriver (line 27) | class JsonPathDriver : public json::Driver {
      method Error (line 30) | void Error(const json::location& l, const std::string& msg) final {
    function IndexExpr (line 53) | IndexExpr IndexExpr::Normalize(size_t array_len) const {
    function EvaluatePath (line 97) | void EvaluatePath(const Path& path, const JsonType& json, PathCallback...
    function ParsePath (line 133) | nonstd::expected<json::Path, string> ParsePath(string_view path) {
    function MutatePath (line 151) | unsigned MutatePath(const Path& path, MutateCallback callback, JsonTyp...
    function DeletePath (line 161) | unsigned DeletePath(const Path& path, JsonType* json) {
    function EvaluatePath (line 173) | void EvaluatePath(const Path& path, FlatJson json, PathFlatCallback ca...
    function JsonType (line 218) | JsonType FromFlat(FlatJson src) {
    function FromJsonType (line 255) | void FromJsonType(const JsonType& src, flexbuffers::Builder* fbb) {
    function MutatePath (line 298) | unsigned MutatePath(const Path& path, MutateCallback callback, FlatJso...
    function DeletePath (line 315) | unsigned DeletePath(const Path& path, FlatJson json, flexbuffers::Buil...

FILE: src/core/json/path.h
  function namespace (line 17) | namespace dfly::json {

FILE: src/core/linear_search_map.h
  function namespace (line 11) | namespace dfly {
  function Value (line 108) | Value, N>::operator[](const Key& key) const {

FILE: src/core/linear_search_map_test.cc
  type dfly (line 15) | namespace dfly {
    class LinearSearchMapTest (line 17) | class LinearSearchMapTest : public testing::Test {
    function TEST_F (line 21) | TEST_F(LinearSearchMapTest, Insert) {
    function TEST_F (line 41) | TEST_F(LinearSearchMapTest, Emplace) {
    function TEST_F (line 70) | TEST_F(LinearSearchMapTest, EraseSimple) {
    function TEST_F (line 97) | TEST_F(LinearSearchMapTest, Erase) {
    function TEST_F (line 151) | TEST_F(LinearSearchMapTest, BasicFunctionality) {

FILE: src/core/listpack_test.cc
  type dfly (line 18) | namespace dfly {
    type detail (line 19) | namespace detail {
      class ListPackTest (line 24) | class ListPackTest : public ::testing::Test {
        method SetUpTestSuite (line 26) | static void SetUpTestSuite() {
        method SetUp (line 30) | void SetUp() override {
        method TearDown (line 35) | void TearDown() override {
        method Remove (line 42) | unsigned Remove(string_view elem, unsigned count, QList::Where whe...
      function TEST_F (line 50) | TEST_F(ListPackTest, FindNotFound) {
      function TEST_F (line 57) | TEST_F(ListPackTest, RemoveIntegerFromHead) {
      function TEST_F (line 72) | TEST_F(ListPackTest, RemoveFromTailAll) {
      function TEST_F (line 90) | TEST_F(ListPackTest, RemoveFromTailWithCount) {
      function TEST_F (line 111) | TEST_F(ListPackTest, RemoveFromTailConsecutive) {
      function TEST_F (line 128) | TEST_F(ListPackTest, RemoveFromTailDeletesHead) {
      function TEST_F (line 142) | TEST_F(ListPackTest, ReplaceAtIndex) {
      function TEST_F (line 158) | TEST_F(ListPackTest, ReplaceAtNegativeIndex) {
      function TEST_F (line 174) | TEST_F(ListPackTest, ReplaceOutOfBounds) {
      function TEST_F (line 185) | TEST_F(ListPackTest, ReplaceWithLargerString) {
      function TEST_F (line 200) | TEST_F(ListPackTest, ReplaceWithEmptyString) {

FILE: src/core/memory_test.cc
  function _mi_assert_fail (line 20) | [[noreturn]] void _mi_assert_fail(const char* assertion, const char* fna...
  type dfly (line 26) | namespace dfly {
    class MiHeapTest (line 28) | class MiHeapTest : public ::testing::Test {
      method MiHeapTest (line 30) | MiHeapTest() {
    function TEST_F (line 34) | TEST_F(MiHeapTest, Basic) {
    function TEST_F (line 56) | TEST_F(MiHeapTest, Threaded) {
    function TEST_F (line 88) | TEST_F(MiHeapTest, FullPageThreadFreeInternal) {
    function TEST_F (line 142) | TEST_F(MiHeapTest, FullBinQueueCollection) {
    function TEST_F (line 191) | TEST_F(MiHeapTest, AbandonedHeapReclamation) {

FILE: src/core/mi_memory_resource.cc
  type dfly (line 10) | namespace dfly {

FILE: src/core/mi_memory_resource.h
  function namespace (line 11) | namespace dfly {

FILE: src/core/oah_entry.cc
  type dfly (line 10) | namespace dfly {
    function OAHEntry (line 121) | OAHEntry& OAHEntry::operator[](uint32_t pos) {
    function OAHEntry (line 133) | OAHEntry OAHEntry::Remove(uint32_t pos) {
    function OAHEntry (line 148) | OAHEntry OAHEntry::Pop() {

FILE: src/core/oah_entry.h
  function namespace (line 17) | namespace dfly {
  function class (line 142) | class OAHEntry {

FILE: src/core/oah_set.h
  function namespace (line 15) | namespace dfly {
  function Fill (line 215) | void Fill(OAHSet* other) {
  function Scan (line 241) | uint32_t Scan(uint32_t cursor, const ItemCb& cb) {
  function OAHEntry (line 265) | OAHEntry Pop() {
  function Erase (line 283) | bool Erase(std::string_view str) {
  function iterator (line 306) | iterator Find(std::string_view member) {
  function Contains (line 330) | bool Contains(std::string_view member) {
  function set_time (line 353) | void set_time(uint32_t val) {
  function ExpirationUsed (line 369) | bool ExpirationUsed() const {
  function BucketId (line 388) | static uint32_t BucketId(uint64_t hash, uint32_t capacity_log) {
  function Rehash (line 392) | void Rehash(uint32_t prev_capacity_log, uint32_t prev_size) {
  function ShrinkBucket (line 432) | void ShrinkBucket(uint32_t bucket_id) {
  function GetExtensionPoint (line 459) | uint32_t GetExtensionPoint(const uint32_t bid) const {
  function FastCheck (line 464) | bool FastCheck(const uint32_t bid, std::string_view str, uint64_t hash) {
  function iterator (line 556) | iterator FindInternal(uint32_t bid, std::string_view str, uint64_t hash) {

FILE: src/core/oah_set_test.cc
  type dfly (line 23) | namespace dfly {
    class OAHSetTest (line 27) | class OAHSetTest : public ::testing::Test {
      method SetUpTestSuite (line 29) | static void SetUpTestSuite() {
      method TearDownTestSuite (line 35) | static void TearDownTestSuite() {
      method SetUp (line 38) | void SetUp() override {
      method TearDown (line 43) | void TearDown() override {
    function string (line 54) | static string random_string(mt19937& rand, unsigned len) {
    function TEST_F (line 66) | TEST_F(OAHSetTest, PtrVectorTest) {
    function TEST_F (line 88) | TEST_F(OAHSetTest, OAHEntryTest) {
    function TEST_F (line 107) | TEST_F(OAHSetTest, OAHSetAddFindTest) {
    function TEST_F (line 127) | TEST_F(OAHSetTest, Basic) {
    function TEST_F (line 139) | TEST_F(OAHSetTest, StandardAddErase) {
    function TEST_F (line 166) | TEST_F(OAHSetTest, DisplacedBug) {
    function TEST_F (line 218) | TEST_F(OAHSetTest, Resizing) {
    function TEST_F (line 247) | TEST_F(OAHSetTest, SimpleScan) {
    function TEST_F (line 268) | TEST_F(OAHSetTest, ScanGuarantees) {
    function TEST_F (line 311) | TEST_F(OAHSetTest, IntOnly) {
    function TEST_F (line 364) | TEST_F(OAHSetTest, XtremeScanGrow) {
    function TEST_F (line 406) | TEST_F(OAHSetTest, Pop) {
    function TEST_F (line 434) | TEST_F(OAHSetTest, Iteration) {
    function TEST_F (line 462) | TEST_F(OAHSetTest, SetFieldExpireHasExpiry) {
    function TEST_F (line 472) | TEST_F(OAHSetTest, SetFieldExpireNoHasExpiry) {
    function TEST_F (line 481) | TEST_F(OAHSetTest, Ttl) {
    function TEST_F (line 520) | TEST_F(OAHSetTest, Grow) {
    function TEST_F (line 531) | TEST_F(OAHSetTest, Reserve) {
    function TEST_F (line 547) | TEST_F(OAHSetTest, Fill) {
    function TEST_F (line 559) | TEST_F(OAHSetTest, IterateEmpty) {
    function MemUsed (line 566) | static size_t MemUsed(OAHSet& obj) {
    function BM_Clone (line 570) | void BM_Clone(benchmark::State& state) {
    function BM_Fill (line 592) | void BM_Fill(benchmark::State& state) {
    function BM_Clear (line 611) | void BM_Clear(benchmark::State& state) {
    function BM_Add (line 627) | void BM_Add(benchmark::State& state) {
    function BM_AddMany (line 654) | void BM_AddMany(benchmark::State& state) {
    function BM_Erase (line 685) | void BM_Erase(benchmark::State& state) {
    function BM_Get (line 715) | void BM_Get(benchmark::State& state) {
    function BM_Grow (line 736) | void BM_Grow(benchmark::State& state) {
    class ShrinkTest (line 810) | class ShrinkTest : public OAHSetTest, public ::testing::WithParamInter...
    function TEST_P (line 812) | TEST_P(ShrinkTest, BasicShrink) {
    function TEST_F (line 845) | TEST_F(OAHSetTest, ShrinkWithTTL) {
    function TEST_F (line 903) | TEST_F(OAHSetTest, ScanWithShrinkBetweenCalls) {

FILE: src/core/overloaded.h
  function namespace (line 8) | namespace dfly {

FILE: src/core/page_usage/page_usage_stats.cc
  type dfly (line 25) | namespace dfly {
    function HllBufferPtr (line 35) | HllBufferPtr InitHllPtr() {
    function CycleQuota (line 63) | CycleQuota CycleQuota::Unlimited() {
    function CollectedPageStats (line 90) | CollectedPageStats CollectedPageStats::Merge(std::vector<CollectedPage...
    function CollectedPageStats (line 178) | CollectedPageStats PageUsage::UniquePages::CollectedStats() const {

FILE: src/core/page_usage/page_usage_stats.h
  type hdr_histogram (line 16) | struct hdr_histogram
  function namespace (line 18) | namespace dfly {

FILE: src/core/page_usage_stats_test.cc
  function GenerateTestJSON (line 37) | std::string GenerateTestJSON(size_t num_objects) {
  class SelectiveDefragment (line 52) | class SelectiveDefragment : public PageUsage {
    method SelectiveDefragment (line 54) | explicit SelectiveDefragment(const double fragmentation_probability)
    method IsPageForObjectUnderUtilized (line 58) | bool IsPageForObjectUnderUtilized(void*) override {
  type MemStats (line 68) | struct MemStats {
  function MemStats (line 76) | MemStats LogMemStats(const mi_heap_t* heap) {
  class PageUsageStatsTest (line 113) | class PageUsageStatsTest : public ::testing::Test {
    method SetUpTestSuite (line 115) | static void SetUpTestSuite() {
    method TearDownTestSuite (line 119) | static void TearDownTestSuite() {
    method PageUsageStatsTest (line 131) | PageUsageStatsTest() : m_(mi_heap_get_backing()) {
    method SetUp (line 135) | void SetUp() override {
    method TearDown (line 146) | void TearDown() override {
  function TEST_F (line 168) | TEST_F(PageUsageStatsTest, Defrag) {
  function TEST_F (line 207) | TEST_F(PageUsageStatsTest, StatCollection) {
  function TEST_F (line 272) | TEST_F(PageUsageStatsTest, JSONCons) {
  function TEST_F (line 309) | TEST_F(PageUsageStatsTest, JsonDefragEmpty) {
  function TEST_F (line 320) | TEST_F(PageUsageStatsTest, JsonDefragNested) {
  function TEST_F (line 332) | TEST_F(PageUsageStatsTest, JsonDefragRemainsInSameHeap) {
  function TEST_F (line 375) | TEST_F(PageUsageStatsTest, QuotaChecks) {
  function TEST_F (line 387) | TEST_F(PageUsageStatsTest, BlockList) {
  function TEST_F (line 411) | TEST_F(PageUsageStatsTest, BlockListDefragmentResumes) {
  function TEST_F (line 432) | TEST_F(PageUsageStatsTest, BlockListWithPairs) {
  function TEST_F (line 446) | TEST_F(PageUsageStatsTest, BlockListWithNonDefragmentableContainer) {
  class MockDocument (line 463) | class MockDocument final : public search::DocumentAccessor {
    method MockDocument (line 465) | MockDocument() {
    method GetStrings (line 472) | std::optional<StringList> GetStrings(std::string_view active_field) co...
    method GetVector (line 475) | std::optional<VectorInfo> GetVector(std::string_view active_field, siz...
    method GetNumbers (line 478) | std::optional<NumsList> GetNumbers(std::string_view active_field) cons...
    method GetTags (line 481) | std::optional<StringList> GetTags(std::string_view active_field) const...
  function TEST_F (line 488) | TEST_F(PageUsageStatsTest, DefragmentTagIndex) {
  function TEST_F (line 517) | TEST_F(PageUsageStatsTest, TagIndexDefragResumeWithChanges) {
  function TEST_F (line 549) | TEST_F(PageUsageStatsTest, DefragmentIndexWithNonDefragmentableFields) {
  function TEST_F (line 570) | TEST_F(PageUsageStatsTest, DefragReducesWaste) {
  function TEST_F (line 612) | TEST_F(PageUsageStatsTest, MixedFlagHandling) {
  function InitBenchMemRes (line 642) | void InitBenchMemRes() {
  function BM_JSONDefragSelective (line 656) | void BM_JSONDefragSelective(benchmark::State& state) {

FILE: src/core/qlist.cc
  type dfly (line 47) | namespace dfly {
    type IterDir (line 54) | enum IterDir : uint8_t { FWD = 1, REV = 0 }
    function NodeNegFillLimit (line 65) | size_t NodeNegFillLimit(int fill) {
    function IsLargeElement (line 80) | bool IsLargeElement(size_t sz, int fill) {
    function quicklistNodeLimit (line 91) | void quicklistNodeLimit(int fill, size_t* size, unsigned int* count) {
    function quicklistNodeExceedsLimit (line 109) | int quicklistNodeExceedsLimit(int fill, size_t new_sz, unsigned int ne...
    function NodeAllowInsert (line 127) | bool NodeAllowInsert(const QList::Node* node, const int fill, const si...
    function NodeAllowMerge (line 143) | bool NodeAllowMerge(const QList::Node* a, const QList::Node* b, const ...
    function NodeSetEntry (line 204) | inline ssize_t NodeSetEntry(QList::Node* node, uint8_t* entry) {
    type quicklistLZF (line 217) | struct quicklistLZF {
    function quicklistLZF (line 222) | inline quicklistLZF* GetLzf(QList::Node* node) {
    function CompressLZF (line 228) | bool CompressLZF(QList::Node* node) {
    function CompressLZ4 (line 254) | bool CompressLZ4(QList::Node* node) {
    function CompressRaw (line 293) | bool CompressRaw(QList::Node* node, unsigned method) {
    function TryCompress (line 314) | ssize_t TryCompress(QList::Node* node, unsigned method) {
    function DecompressRaw (line 328) | bool DecompressRaw(bool recompress, QList::Node* node) {
    function TryDecompressInternal (line 368) | ssize_t TryDecompressInternal(bool recompress, QList::Node* node) {
    function RecompressOnly (line 378) | ssize_t RecompressOnly(QList::Node* node, unsigned method) {
    function QList (line 496) | QList& QList::operator=(QList&& other) noexcept {
    function string (line 577) | string QList::Pop(Where where) {

FILE: src/core/qlist.h
  function namespace (line 27) | namespace dfly {

FILE: src/core/qlist_test.cc
  type dfly (line 28) | namespace dfly {
    function ql_verify_compress (line 34) | static int ql_verify_compress(const QList& ql) {
    function ql_verify (line 68) | static int ql_verify(const QList& ql, uint32_t nc, uint32_t count, uin...
    function SetupMalloc (line 129) | static void SetupMalloc() {
    class QListTest (line 136) | class QListTest : public ::testing::Test {
      method QListTest (line 138) | QListTest() : mr_(mi_heap_get_backing()) {
      method SetUpTestSuite (line 141) | static void SetUpTestSuite() {
      method TearDownTestSuite (line 145) | static void TearDownTestSuite() {
    function TEST_F (line 176) | TEST_F(QListTest, Basic) {
    function TEST_F (line 215) | TEST_F(QListTest, ListPack) {
    function TEST_F (line 225) | TEST_F(QListTest, InsertDelete) {
    function TEST_F (line 258) | TEST_F(QListTest, EraseLastElementInNodeAdvancesToNextNode) {
    function TEST_F (line 300) | TEST_F(QListTest, PushPlain) {
    function TEST_F (line 308) | TEST_F(QListTest, GetNum) {
    function TEST_F (line 315) | TEST_F(QListTest, CompressionPlain) {
    function TEST_F (line 340) | TEST_F(QListTest, LargeValues) {
    function TEST_F (line 349) | TEST_F(QListTest, RemoveListpack) {
    function TEST_F (line 361) | TEST_F(QListTest, DefragListpackRaw) {
    function TEST_F (line 373) | TEST_F(QListTest, DefragPlainTextRaw) {
    function TEST_F (line 383) | TEST_F(QListTest, DefragmentListpackCompressed) {
    function TEST_F (line 412) | TEST_F(QListTest, Tiering) {
    class PrintToFillCompress (line 423) | class PrintToFillCompress {
    class OptionsTest (line 435) | class OptionsTest : public QListTest, public WithParamInterface<FillCo...
    function TEST_P (line 442) | TEST_P(OptionsTest, Numbers) {
    function TEST_P (line 466) | TEST_P(OptionsTest, NumbersIndex) {
    function TEST_P (line 487) | TEST_P(OptionsTest, DelRangeA) {
    function TEST_P (line 512) | TEST_P(OptionsTest, DelRangeB) {
    function TEST_P (line 552) | TEST_P(OptionsTest, DelRangeC) {
    function TEST_P (line 577) | TEST_P(OptionsTest, DelRangeD) {
    function TEST_P (line 595) | TEST_P(OptionsTest, DelRangeNode) {
    function TEST_P (line 608) | TEST_P(OptionsTest, DelRangeNodeOverflow) {
    function TEST_P (line 620) | TEST_P(OptionsTest, DelRangeMiddle100of500) {
    function TEST_P (line 632) | TEST_P(OptionsTest, DelLessFillAcrossNodes) {
    function TEST_P (line 643) | TEST_P(OptionsTest, DelNegOne) {
    function TEST_P (line 653) | TEST_P(OptionsTest, DelNegOneOverflow) {
    function TEST_P (line 665) | TEST_P(OptionsTest, DelNeg100From500) {
    function TEST_P (line 678) | TEST_P(OptionsTest, DelMin10_5_from50) {
    function TEST_P (line 689) | TEST_P(OptionsTest, DelElems) {
    function TEST_P (line 737) | TEST_P(OptionsTest, IterateReverse) {
    function TEST_P (line 754) | TEST_P(OptionsTest, Iterate500) {
    function TEST_P (line 782) | TEST_P(OptionsTest, IterateAfterOne) {
    function TEST_P (line 803) | TEST_P(OptionsTest, IterateDelete) {
    function TEST_P (line 825) | TEST_P(OptionsTest, InsertBeforeOne) {
    function TEST_P (line 845) | TEST_P(OptionsTest, InsertWithHeadFull) {
    function TEST_P (line 861) | TEST_P(OptionsTest, InsertWithTailFull) {
    function TEST_P (line 876) | TEST_P(OptionsTest, InsertOnceWhileIterating) {
    function TEST_P (line 902) | TEST_P(OptionsTest, InsertBefore250NewInMiddleOf500Elements) {
    function TEST_P (line 922) | TEST_P(OptionsTest, InsertAfter250NewInMiddleOf500Elements) {
    function TEST_P (line 941) | TEST_P(OptionsTest, NextPlain) {
    function TEST_P (line 962) | TEST_P(OptionsTest, IndexFrom500) {
    function BM_QListCompress (line 991) | static void BM_QListCompress(benchmark::State& state) {
    function BM_QListUncompress (line 1021) | static void BM_QListUncompress(benchmark::State& state) {

FILE: src/core/score_map.cc
  type dfly (line 19) | namespace dfly {
    function GetValue (line 23) | inline double GetValue(sds key) {
    function DuplicateEntryIfFragmented (line 152) | pair<sds, bool> DuplicateEntryIfFragmented(void* obj, PageUsage* page_...

FILE: src/core/score_map.h
  function namespace (line 16) | namespace dfly {
  function class (line 41) | class ScoreMap : public DenseSet {

FILE: src/core/score_map_test.cc
  type dfly (line 20) | namespace dfly {
    class ScoreMapTest (line 22) | class ScoreMapTest : public ::testing::Test {
      method SetUpTestSuite (line 24) | static void SetUpTestSuite() {
      method TearDownTestSuite (line 30) | static void TearDownTestSuite() {
      method ScoreMapTest (line 44) | ScoreMapTest() : mi_alloc_(mi_heap_get_backing()) {
      method SetUp (line 47) | void SetUp() override {
      method TearDown (line 51) | void TearDown() override {
    function TEST_F (line 60) | TEST_F(ScoreMapTest, Basic) {
    function TEST_F (line 87) | TEST_F(ScoreMapTest, EmptyFind) {
    function TEST_F (line 93) | TEST_F(ScoreMapTest, ReallocIfNeeded) {

FILE: src/core/sds_utils.cc
  type dfly (line 14) | namespace dfly {
    function SdsReqType (line 18) | inline char SdsReqType(size_t string_size) {
    function SdsHdrSize (line 30) | inline int SdsHdrSize(char type) {
    function SdsUpdateExpireTime (line 48) | void SdsUpdateExpireTime(const void* obj, uint32_t time_at, uint32_t o...

FILE: src/core/sds_utils.h
  function namespace (line 9) | namespace dfly {

FILE: src/core/search/ast_expr.cc
  type dfly::search (line 17) | namespace dfly::search {
  type std (line 92) | namespace std {
    function ostream (line 93) | ostream& operator<<(ostream& os, optional<size_t> o) {
    function ostream (line 97) | ostream& operator<<(ostream& os, dfly::search::AstTagsNode::TagValuePr...

FILE: src/core/search/ast_expr.h
  type AstNode (line 21) | struct AstNode
  type AstStarNode (line 24) | struct AstStarNode {}
  type AstStarFieldNode (line 27) | struct AstStarFieldNode {}
  function explicit (line 30) | explicit AstAffixNode(std::string affix) : affix{std::move(affix)} {
  type AstRangeNode (line 42) | struct AstRangeNode {
  type AstGeoNode (line 48) | struct AstGeoNode {
  type AstNegateNode (line 56) | struct AstNegateNode {
  type AstLogicalNode (line 69) | struct AstLogicalNode {
  type AstFieldNode (line 86) | struct AstFieldNode {
  type AstTagsNode (line 100) | struct AstTagsNode {
  type AstKnnNode (line 118) | struct AstKnnNode {

FILE: src/core/search/base.cc
  type dfly::search (line 9) | namespace dfly::search {
    function ParseNumericField (line 21) | std::optional<double> ParseNumericField(std::string_view value) {
    function DefragmentResult (line 28) | DefragmentResult& DefragmentResult::Merge(DefragmentResult&& other) {

FILE: src/core/search/base.h
  function namespace (line 17) | namespace dfly {
  function namespace (line 21) | namespace dfly::search {
  function GlobalDocId (line 33) | inline GlobalDocId CreateGlobalDocId(ShardId shard_id, DocId local_doc_i...
  function VectorSimilarity (line 41) | enum class VectorSimilarity { L2, IP, COSINE };
  type AstNode (line 61) | struct AstNode
  type OptionalFilterBase (line 63) | struct OptionalFilterBase {
  type DocumentAccessor (line 76) | struct DocumentAccessor {
  type BaseIndex (line 100) | struct BaseIndex {
  function DefragmentResult (line 117) | DefragmentResult Defragment(PageUsage* page_usage) {
  function BaseIndex (line 123) | struct BaseSortIndex : BaseIndex {
  type SeekableTag (line 134) | struct SeekableTag {}
  function namespace (line 162) | namespace details {
  function extract_doc_id (line 172) | auto extract_doc_id = [](const auto& value) {

FILE: src/core/search/block_list.cc
  function DefragmentVector (line 7) | bool DefragmentVector(PMR_NS::vector<T>& vec, dfly::PageUsage* page_usag...
  type dfly::search (line 23) | namespace dfly::search {
    function SplitResult (line 27) | SplitResult Split(BlockList<SortedVector<std::pair<DocId, double>>>&& ...
    function DefragmentResult (line 140) | DefragmentResult BlockList<Container>::Defragment(PageUsage* page_usag...
    class BlockList<CompressedSortedSet> (line 268) | class BlockList<CompressedSortedSet>
    class BlockList<SortedVector<DocId>> (line 269) | class BlockList<SortedVector<DocId>>
    class BlockList<SortedVector<std::pair<DocId, double>>> (line 270) | class BlockList<SortedVector<std::pair<DocId, double>>>
    function DefragmentResult (line 310) | DefragmentResult SortedVector<T>::Defragment(PageUsage* page_usage) {
    class SortedVector<DocId> (line 317) | class SortedVector<DocId>
    class SortedVector<std::pair<DocId, double>> (line 318) | class SortedVector<std::pair<DocId, double>>

FILE: src/core/search/block_list.h
  function namespace (line 11) | namespace dfly::search {
  function BlockListIterator (line 121) | BlockListIterator begin() const {
  function explicit (line 156) | explicit SortedVector(PMR_NS::memory_resource* mr) : entries_(mr) {
  function T (line 168) | const T& operator[](size_t idx) const {
  function Clear (line 180) | void Clear() {
  type SplitResult (line 215) | struct SplitResult {

FILE: src/core/search/block_list_test.cc
  type dfly::search (line 18) | namespace dfly::search {
    class TemplatedBlockListTest (line 22) | class TemplatedBlockListTest : public testing::Test {
      method Make (line 29) | auto Make() {
      method AddNewBlockListElement (line 34) | auto AddNewBlockListElement(DocId doc_id) {
      method RemoveBlockListElement (line 47) | auto RemoveBlockListElement(DocId doc_id) {
      method DocId (line 60) | DocId GetDocId(const ElementType& element) {
    function TYPED_TEST (line 84) | TYPED_TEST(TemplatedBlockListTest, LoopMidInsertErase) {
    function TYPED_TEST (line 110) | TYPED_TEST(TemplatedBlockListTest, InsertReverseRemoveSteps) {
    function TYPED_TEST (line 141) | TYPED_TEST(TemplatedBlockListTest, RandomNumbers) {
    class BlockListTest (line 164) | class BlockListTest : public testing::Test {
    function TEST_F (line 168) | TEST_F(BlockListTest, Split) {
    function TEST_F (line 225) | TEST_F(BlockListTest, SplitHard) {
    function TEST_F (line 273) | TEST_F(BlockListTest, SplitSingleDoubleValue) {
    function BM_Erase90PctTail (line 289) | static void BM_Erase90PctTail(benchmark::State& state) {

FILE: src/core/search/compressed_sorted_set.cc
  type dfly::search (line 10) | namespace dfly::search {

FILE: src/core/search/compressed_sorted_set.h
  function namespace (line 14) | namespace dfly::search {

FILE: src/core/search/compressed_sorted_set_test.cc
  type dfly::search (line 15) | namespace dfly::search {
    type SetInserter (line 21) | struct SetInserter {
      method SetInserter (line 28) | explicit SetInserter(CompressedSortedSet* set) : set_{set} {}
      method SetInserter (line 30) | SetInserter& operator*() {
      method SetInserter (line 33) | SetInserter& operator++() {
      method SetInserter (line 37) | SetInserter& operator=(value_type value) {
    class CompressedSortedSetTest (line 48) | class CompressedSortedSetTest : public ::testing::Test {
    function TEST_F (line 54) | TEST_F(CompressedSortedSetTest, BasicInsert) {
    function TEST_F (line 111) | TEST_F(CompressedSortedSetTest, BasicInsertLargeValues) {
    function TEST_F (line 142) | TEST_F(CompressedSortedSetTest, SortedBackInserter) {
    function TEST_F (line 153) | TEST_F(CompressedSortedSetTest, BasicRemove) {
    function TEST_F (line 184) | TEST_F(CompressedSortedSetTest, BasicRemoveLargeValues) {
    function TEST_F (line 213) | TEST_F(CompressedSortedSetTest, InsertRemoveLargeValues) {

FILE: src/core/search/hnsw_alg.h
  type class (line 11) | enum class
  function max_elements_ (line 32) | size_t max_elements_{0}
  function mutable (line 33) | mutable std::atomic<size_t> cur_element_count{0}
  function size_data_per_element_ (line 34) | size_t size_data_per_element_{0}
  function size_links_per_element_ (line 35) | size_t size_links_per_element_{0}
  function mutable (line 36) | mutable std::atomic<size_t> num_deleted_{0}
  function M_ (line 37) | size_t M_{0}
  function maxM_ (line 38) | size_t maxM_{0}
  function maxM0_ (line 39) | size_t maxM0_{0}
  function ef_construction_ (line 40) | size_t ef_construction_{0}
  function ef_ (line 41) | size_t ef_{0}
  function maxlevel_ (line 44) | int maxlevel_{0}
  function tableint (line 54) | tableint enterpoint_node_{0}
  function size_links_level0_ (line 56) | size_t size_links_level0_{0}
  function data_size_ (line 64) | size_t data_size_{0}
  function mutable (line 75) | mutable std::atomic<long> metric_distance_computations{0}
  function mutable (line 76) | mutable std::atomic<long> metric_hops{0}
  function clear (line 163) | void clear() {
  type CompareByFirst (line 179) | struct CompareByFirst {
  function setEf (line 186) | void setEf(size_t ef) {
  function std (line 190) | inline std::mutex& getLabelOpMutex(labeltype label) const {
  function labeltype (line 196) | inline labeltype getExternalLabel(tableint internal_id) const {
  function setExternalLabel (line 204) | inline void setExternalLabel(tableint internal_id, labeltype label) const {
  function getRandomLevel (line 225) | int getRandomLevel(double reverse_size) {
  function getMaxElements (line 231) | size_t getMaxElements() {
  function getCurrentElementCount (line 235) | size_t getCurrentElementCount() {
  function getDeletedCount (line 239) | size_t getDeletedCount() {
  function getNeighborsByHeuristic2 (line 469) | void getNeighborsByHeuristic2(
  function HnswErrorStatus (line 902) | HnswErrorStatus markDelete(labeltype label) {
  function markDeletedInternal (line 924) | bool markDeletedInternal(tableint internalId) {
  function unmarkDelete (line 946) | void unmarkDelete(labeltype label) {
  function unmarkDeletedInternal (line 964) | void unmarkDeletedInternal(tableint internalId) {
  function isMarkedDeleted (line 982) | bool isMarkedDeleted(tableint internalId) const {
  function getListCount (line 987) | unsigned short int getListCount(linklistsizeint* ptr) const {
  function setListCount (line 991) | void setListCount(linklistsizeint* ptr, unsigned short int size) const {
  function updatePoint (line 1040) | void updatePoint(const void* dataPointIn, tableint internalId, float upd...
  function tableint (line 1211) | tableint addPoint(const void* data_point_in, labeltype label, int level) {
  function checkIntegrity (line 1602) | void checkIntegrity() {

FILE: src/core/search/hnsw_index.cc
  type dfly::search (line 18) | namespace dfly::search {
    class HnswSpace (line 24) | class HnswSpace : public hnswlib::SpaceInterface<float> {
      method L2DistanceStatic (line 28) | static float L2DistanceStatic(const void* pVect1, const void* pVect2...
      method IPDistanceStatic (line 33) | static float IPDistanceStatic(const void* pVect1, const void* pVect2...
      method CosineDistanceStatic (line 38) | static float CosineDistanceStatic(const void* pVect1, const void* pV...
      method HnswSpace (line 44) | explicit HnswSpace(size_t dim, VectorSimilarity sim) : dim_(dim), si...
      method get_data_size (line 47) | size_t get_data_size() {
      method get_dist_func (line 51) | hnswlib::DISTFUNC<float> get_dist_func() {
    type HnswlibAdapter (line 68) | struct HnswlibAdapter {
      method HnswlibAdapter (line 72) | explicit HnswlibAdapter(const SchemaField::VectorParams& params, boo...
      method Add (line 86) | void Add(const void* data, GlobalDocId id) {
      method Remove (line 108) | void Remove(GlobalDocId id) {
      method Knn (line 121) | vector<pair<float, GlobalDocId>> Knn(float* target, size_t k, std::o...
      method Knn (line 128) | vector<pair<float, GlobalDocId>> Knn(float* target, size_t k, std::o...
      method SubsetKnn (line 149) | vector<pair<float, GlobalDocId>> SubsetKnn(float* target, size_t k,
      method RangeSearch (line 158) | vector<pair<float, GlobalDocId>> RangeSearch(float* target, float ra...
      method HnswIndexMetadata (line 164) | HnswIndexMetadata GetMetadata() const {
      method SetMetadata (line 174) | void SetMetadata(const HnswIndexMetadata& metadata) {
      method GetNodeCount (line 198) | size_t GetNodeCount() const {
      method GetNodesRange (line 203) | std::vector<HnswNodeData> GetNodesRange(size_t start, size_t end) co...
      type DeferredOp (line 239) | struct DeferredOp {
        method DeferredOp (line 244) | DeferredOp(bool is_add, const void* data, size_t data_size, bool c...
        method DeferredOp (line 260) | DeferredOp(DeferredOp&& o) noexcept
        method DeferredOp (line 266) | DeferredOp& operator=(DeferredOp&& o) noexcept {
        method DeferredOp (line 273) | DeferredOp(const DeferredOp&) = delete;
        method DeferredOp (line 274) | DeferredOp& operator=(const DeferredOp&) = delete;
      method DoAdd (line 278) | void DoAdd(const void* data, GlobalDocId id) {
      method DoRemove (line 296) | void DoRemove(GlobalDocId id) {
      method AddDeferredOp (line 305) | void AddDeferredOp(GlobalDocId id, DeferredOp op) {
      method TakeDeferredOps (line 311) | absl::flat_hash_map<GlobalDocId, DeferredOp> TakeDeferredOps() {
      method ProcessDeferred (line 321) | void ProcessDeferred() {
      method TryProcessDeferred (line 333) | void TryProcessDeferred() {
      method ResizeIfFull (line 342) | void ResizeIfFull() {
      method QueueToVec (line 365) | static vector<pair<float, GlobalDocId>> QueueToVec(Q queue) {
      method RestoreFromNodes (line 377) | void RestoreFromNodes(const std::vector<HnswNodeData>& nodes, const ...
      method UpdateVectorData (line 478) | bool UpdateVectorData(GlobalDocId id, const void* data) {
      method GetReadLock (line 511) | std::unique_ptr<MRMWMutexLock> GetReadLock() const {
    function HnswIndexMetadata (line 590) | HnswIndexMetadata HnswVectorIndex::GetMetadata() const {

FILE: src/core/search/hnsw_index.h
  function namespace (line 12) | namespace dfly::search {
  type HnswlibAdapter (line 45) | struct HnswlibAdapter
  function class (line 46) | class HnswVectorIndex {

FILE: src/core/search/index_result.h
  function namespace (line 14) | namespace dfly::search {
  function ApproximateSize (line 66) | inline size_t IndexResult::ApproximateSize() const {

FILE: src/core/search/indices.cc
  type dfly::search (line 33) | namespace dfly::search {
    function IsAllAscii (line 40) | bool IsAllAscii(string_view sv) {
    function string (line 44) | string ToLower(string_view word) {
    function TokenizeWords (line 49) | absl::flat_hash_set<std::string> TokenizeWords(std::string_view text,
    function NormalizeTags (line 68) | absl::flat_hash_set<string> NormalizeTags(string_view taglist, bool ca...
    function IterateAllSuffixes (line 83) | void IterateAllSuffixes(const absl::flat_hash_set<string>& words,
    function ConvertToRadiusInMeters (line 95) | double ConvertToRadiusInMeters(size_t radius, std::string_view arg) {
    function GetGeoPoint (line 111) | std::optional<GeoIndex::point> GetGeoPoint(const string_view& geo_stri...
    class RangeTreeAdapter (line 136) | class RangeTreeAdapter : public NumericIndex::RangeTreeBase {
      method RangeTreeAdapter (line 138) | explicit RangeTreeAdapter(size_t max_range_block_size, PMR_NS::memor...
      method Add (line 142) | void Add(DocId id, absl::Span<double> values) override {
      method Remove (line 151) | void Remove(DocId id, absl::Span<double> values) override {
      method RangeResult (line 160) | RangeResult Range(double l, double r) const override {
      method GetAllDocIds (line 164) | vector<DocId> GetAllDocIds() const override {
      method FinalizeInitialization (line 169) | void FinalizeInitialization() override {
    class BtreeSetImpl (line 179) | class BtreeSetImpl : public NumericIndex::RangeTreeBase {
      method BtreeSetImpl (line 181) | explicit BtreeSetImpl(PMR_NS::memory_resource* mr) : entries_(mr) {
      method Add (line 184) | void Add(DocId id, absl::Span<double> values) override {
      method Remove (line 193) | void Remove(DocId id, absl::Span<double> values) override {
      method RangeResult (line 199) | RangeResult Range(double l, double r) const override {
      method GetAllDocIds (line 218) | vector<DocId> GetAllDocIds() const override {
    function RangeResult (line 276) | RangeResult NumericIndex::Range(double l, double r) const {
    function StringOrView (line 436) | StringOrView BaseStringIndex<C>::NormalizeQueryWord(std::string_view q...
    type BaseStringIndex<CompressedSortedSet> (line 461) | struct BaseStringIndex<CompressedSortedSet>
    type BaseStringIndex<SortedVector<DocId>> (line 462) | struct BaseStringIndex<SortedVector<DocId>>
    function DefragmentResult (line 478) | DefragmentResult TagIndex::Defragment(PageUsage* page_usage) {

FILE: src/core/search/indices.h
  function namespace (line 38) | namespace dfly::search {
  function BaseIndex (line 164) | struct BaseVectorIndex : public BaseIndex {
  function BaseVectorIndex (line 180) | struct FlatVectorIndex : public BaseVectorIndex {
  function BaseIndex (line 197) | struct GeoIndex : public BaseIndex {
  function DefragmentResult (line 239) | DefragmentResult Defragment(PageUsage* page_usage) {

FILE: src/core/search/mrmw_mutex.h
  function namespace (line 13) | namespace dfly::search {
  function std (line 81) | inline std::condition_variable_any& GetCondVar(LockMode target_mode) {
  function LockMode (line 85) | static inline LockMode GetInverseMode(LockMode mode) {
  function class (line 98) | class MRMWMutexLock {

FILE: src/core/search/mrmw_mutex_test.cc
  type dfly::search (line 17) | namespace dfly::search {
    function ReadTask (line 22) | void ReadTask(MRMWMutex* mutex, std::atomic<size_t>& read_count, size_...
    function WriteTask (line 30) | void WriteTask(MRMWMutex* mutex, std::atomic<size_t>& write_count, siz...
    class MRMWMutexTest (line 42) | class MRMWMutexTest : public ::testing::Test {
      method SetUp (line 46) | void SetUp() override {
      method TearDown (line 58) | void TearDown() override {
    function TEST_F (line 66) | TEST_F(MRMWMutexTest, MultipleReadersConcurrently) {
    function TEST_F (line 89) | TEST_F(MRMWMutexTest, ReadersBlockWriters) {
    function TEST_F (line 123) | TEST_F(MRMWMutexTest, ReaderAfterWriter) {
    function TEST_F (line 149) | TEST_F(MRMWMutexTest, WriterAfterReaders) {
    function TEST_F (line 179) | TEST_F(MRMWMutexTest, MixWritersReadersOnDifferentFibers) {
    function TEST_F (line 254) | TEST_F(MRMWMutexTest, IsReadLockedReflectsState) {
    function TEST_F (line 275) | TEST_F(MRMWMutexTest, IsReadLockedFalseUnderWriteLock) {
    function TEST_F (line 281) | TEST_F(MRMWMutexTest, TryLockSucceedsWhenFree) {
    function TEST_F (line 290) | TEST_F(MRMWMutexTest, TryLockFailsOnConflict) {
    function TEST_F (line 302) | TEST_F(MRMWMutexTest, TryLockSucceedsForSameMode) {
    function TEST_F (line 316) | TEST_F(MRMWMutexTest, MRMWMutexLockTryLockSemantics) {

FILE: src/core/search/query_driver.cc
  type dfly (line 7) | namespace dfly {
    type search (line 8) | namespace search {

FILE: src/core/search/query_driver.h
  function namespace (line 14) | namespace dfly {

FILE: src/core/search/range_tree.cc
  type dfly::search (line 7) | namespace dfly::search {
    function MergeAllResults (line 11) | std::vector<DocId> MergeAllResults(absl::Span<const RangeTree::RangeBl...
    function FindRangeBlockImpl (line 60) | auto FindRangeBlockImpl(MapT& entries, double value) {
    function RangeResult (line 134) | RangeResult RangeTree::Range(double l, double r) const {
    function RangeResult (line 157) | RangeResult RangeTree::GetAllDocIds() const {

FILE: src/core/search/range_tree.h
  function namespace (line 19) | namespace dfly::search {
  function TwoBlocksRangeResult (line 364) | inline TwoBlocksRangeResult::MergingIterator::MergingIterator(RangeFilte...
  function increase_iterator (line 376) | auto increase_iterator = [&](RangeFilterIterator& it) {
  function other (line 405) | inline bool TwoBlocksRangeResult::MergingIterator::operator==(
  function other (line 410) | inline bool TwoBlocksRangeResult::MergingIterator::operator!=(
  function InitializeMin (line 415) | inline void TwoBlocksRangeResult::MergingIterator::InitializeMin() {
  function RangeResult (line 429) | inline RangeResult::Variant& RangeResult::GetResult() {

FILE: src/core/search/range_tree_test.cc
  type dfly::search (line 18) | namespace dfly::search {
    class RangeTreeTest (line 20) | class RangeTreeTest : public testing::Test {
    function ExtractDocPairs (line 30) | std::vector<Entry> ExtractDocPairs(const BlocksList& result) {
    function ExtractAllBlocks (line 40) | std::vector<std::vector<Entry>> ExtractAllBlocks(const BlocksList& res...
    function UnorderedElementsAreDocPairs (line 66) | auto UnorderedElementsAreDocPairs(std::vector<Entry> list) {
    function BlocksAre (line 70) | auto BlocksAre(std::initializer_list<std::vector<Entry>> blocks) {
    function ExtractDocIdsFromRange (line 74) | std::vector<DocId> ExtractDocIdsFromRange(const std::vector<Entry>& en...
    function MergeTwoBlocksRangeResult (line 87) | std::vector<DocId> MergeTwoBlocksRangeResult(const RangeTree& tree, do...
    function TEST_F (line 94) | TEST_F(RangeTreeTest, AddSimple) {
    function TEST_F (line 110) | TEST_F(RangeTreeTest, Add) {
    function TEST_F (line 138) | TEST_F(RangeTreeTest, RemoveSimple) {
    function TEST_F (line 155) | TEST_F(RangeTreeTest, Remove) {
    function TEST_F (line 236) | TEST_F(RangeTreeTest, RangeSimple) {
    function TEST_F (line 274) | TEST_F(RangeTreeTest, Range) {
    function TEST_F (line 319) | TEST_F(RangeTreeTest, SingleBlockSplit) {
    function TEST_F (line 350) | TEST_F(RangeTreeTest, BlockMerge) {
    function TEST_F (line 383) | TEST_F(RangeTreeTest, BugNotUniqueDoubleValues) {
    function TEST_F (line 397) | TEST_F(RangeTreeTest, RangeResultTwoBlocksSimple) {
    function TEST_F (line 429) | TEST_F(RangeTreeTest, RangeResultTwoBlocks) {
    type BuilderTest (line 475) | struct BuilderTest : public RangeTreeTest {
      method Shuffle (line 476) | static void Shuffle(std::vector<RangeTree::Entry>* entries) {
    function TEST_F (line 483) | TEST_F(BuilderTest, Builder) {
    function TEST_F (line 536) | TEST_F(BuilderTest, BuilderUpdates) {
    function TEST_F (line 617) | TEST_F(RangeTreeTest, DiscreteIntialization) {
    function BM_DiscreteInsertion (line 631) | static void BM_DiscreteInsertion(benchmark::State& state) {

FILE: src/core/search/rax_tree.h
  function namespace (line 16) | namespace detail {
  function namespace (line 40) | namespace dfly::search {
  function FindIterator (line 182) | FindIterator find(std::string_view key) const {

FILE: src/core/search/rax_tree_test.cc
  type dfly::search (line 23) | namespace dfly::search {
    type RaxTreeTest (line 27) | struct RaxTreeTest : public ::testing::Test {
      method SetUpTestSuite (line 28) | static void SetUpTestSuite() {
    function TEST_F (line 34) | TEST_F(RaxTreeTest, EmplaceAndIterate) {
    function TEST_F (line 56) | TEST_F(RaxTreeTest, LowerBound) {
    function TEST_F (line 86) | TEST_F(RaxTreeTest, Find) {
    function TEST_F (line 108) | TEST_F(RaxTreeTest, Iterate) {
    function TEST_F (line 131) | TEST_F(RaxTreeTest, MoveIterator) {

FILE: src/core/search/renewable_quota.cc
  type dfly::search (line 11) | namespace dfly::search {
    function RenewableQuota (line 13) | RenewableQuota RenewableQuota::Unlimited() {

FILE: src/core/search/renewable_quota.h
  function namespace (line 10) | namespace dfly::search {

FILE: src/core/search/scanner.h
  function namespace (line 17) | namespace dfly {

FILE: src/core/search/search.cc
  type dfly::search (line 28) | namespace dfly::search {
    function AstExpr (line 32) | AstExpr ParseQuery(std::string_view query, const QueryParams* params,
    type ProfileBuilder (line 50) | struct ProfileBuilder {
      type NodeFormatter (line 51) | struct NodeFormatter {
      method string (line 60) | string GetNodeInfo(const AstNode& node) {
      method Tp (line 90) | Tp Start() {
      method Finish (line 95) | void Finish(Tp start, const AstNode& node, const IndexResult& result) {
      method AlgorithmProfile (line 104) | AlgorithmProfile Take() {
    type BasicSearch (line 114) | struct BasicSearch {
      method BasicSearch (line 117) | BasicSearch(const FieldIndices* indices) : indices_{indices} {
      method EnableProfiling (line 120) | void EnableProfiling() {
      method BaseIndex (line 124) | BaseIndex* GetBaseIndex(string_view field) {
      method T (line 134) | T* GetIndex(string_view field) {
      method BaseSortIndex (line 151) | BaseSortIndex* GetSortIndex(string_view field) {
      method GetSubResults (line 163) | vector<IndexResult> GetSubResults(const C& container, const F& f) {
      method Merge (line 170) | void Merge(IndexResult matched, IndexResult* current_ptr, LogicOp op) {
      method IndexResult (line 177) | IndexResult UnifyResults(vector<IndexResult>&& sub_results, LogicOp ...
      method IndexResult (line 194) | IndexResult CollectMatches(BaseStringIndex<C>* index, std::string_vi...
      method IndexResult (line 201) | IndexResult Search(monostate, string_view) {
      method IndexResult (line 205) | IndexResult Search(const AstStarNode& node, string_view active_field) {
      method IndexResult (line 210) | IndexResult Search(const AstStarFieldNode& node, string_view active_...
      method IndexResult (line 222) | IndexResult Search(const AstAffixNode<T>& node, string_view active_f...
      method IndexResult (line 247) | IndexResult Search(const AstAffixNode<TagType::REGULAR> node, string...
      method IndexResult (line 273) | IndexResult Search(const AstRangeNode& node, string_view active_fiel...
      method IndexResult (line 281) | IndexResult Search(const AstGeoNode& node, string_view active_field) {
      method IndexResult (line 290) | IndexResult Search(const AstNegateNode& node, string_view active_fie...
      method IndexResult (line 304) | IndexResult Search(const AstLogicalNode& node, string_view active_fi...
      method IndexResult (line 310) | IndexResult Search(const AstFieldNode& node, string_view active_fiel...
      method IndexResult (line 317) | IndexResult Search(const AstTagsNode& node, string_view active_field) {
      method SearchKnnFlat (line 338) | void SearchKnnFlat(FlatVectorIndex* vec_index, const AstKnnNode& knn...
      method SearchVectorRangeFlat (line 358) | void SearchVectorRangeFlat(FlatVectorIndex* vec_index, const AstVect...
      method IndexResult (line 374) | IndexResult Search(const AstVectorRangeNode& node, string_view activ...
      method IndexResult (line 410) | IndexResult Search(const AstKnnNode& knn, string_view active_field) {
      method IndexResult (line 446) | IndexResult SearchGeneric(const AstNode& node, string_view active_fi...
      method SearchResult (line 468) | SearchResult Search(const AstNode& query, size_t cuttoff_limit) {
    function AstNode (line 495) | AstNode OptionalNumericFilter::Node(std::string field) {
    function string_view (line 499) | string_view Schema::LookupAlias(string_view alias) const {
    function string_view (line 505) | string_view Schema::LookupIdentifier(string_view identifier) const {
    function BaseIndex (line 637) | BaseIndex* FieldIndices::GetIndex(string_view field) const {
    function BaseSortIndex (line 642) | BaseSortIndex* FieldIndices::GetSortIndex(string_view field) const {
    function Schema (line 663) | const Schema& FieldIndices::GetSchema() const {
    function SortableValue (line 667) | SortableValue FieldIndices::GetSortIndexValue(DocId doc, std::string_v...
    function DefragmentResult (line 679) | DefragmentResult FieldIndices::Defragment(PageUsage* page_usage) {
    function Synonyms (line 690) | const Synonyms* FieldIndices::GetSynonyms() const {
    function SearchResult (line 717) | SearchResult SearchAlgorithm::Search(const FieldIndices* index, size_t...
    function AstKnnNode (line 744) | AstKnnNode* SearchAlgorithm::GetKnnNode() const {
    function AstVectorRangeNode (line 769) | const AstVectorRangeNode* SearchAlgorithm::GetVectorRangeNode() const {

FILE: src/core/search/search.h
  function namespace (line 20) | namespace dfly::search {
  type SchemaField (line 57) | struct SchemaField {
  function ParamsVariant (line 98) | ParamsVariant special_params{std::monostate{}}
  type Schema (line 102) | struct Schema {
  type IndicesOptions (line 116) | struct IndicesOptions {
  function class (line 126) | class FieldIndices {

FILE: src/core/search/search_parser_test.cc
  type dfly::search (line 11) | namespace dfly::search {
    class SearchParserTest (line 15) | class SearchParserTest : public ::testing::Test {
      method SearchParserTest (line 17) | SearchParserTest() {
      method SetInput (line 21) | void SetInput(const std::string& str) {
      method Lex (line 25) | Parser::symbol_type Lex() {
      method Parse (line 29) | int Parse(const std::string& str) {
      method SetParams (line 36) | void SetParams(const QueryParams* params) {
    function TEST_F (line 67) | TEST_F(SearchParserTest, Scanner) {
    function TEST_F (line 202) | TEST_F(SearchParserTest, EscapedTagPrefixes) {
    function TEST_F (line 232) | TEST_F(SearchParserTest, Parse) {
    function TEST_F (line 272) | TEST_F(SearchParserTest, ParseParams) {
    function TEST_F (line 283) | TEST_F(SearchParserTest, Quotes) {
    function TEST_F (line 291) | TEST_F(SearchParserTest, Numeric) {
    function TEST_F (line 298) | TEST_F(SearchParserTest, VectorRange) {
    function TEST_F (line 307) | TEST_F(SearchParserTest, VectorRangeParse) {
    function TEST_F (line 318) | TEST_F(SearchParserTest, KNN) {
    function TEST_F (line 325) | TEST_F(SearchParserTest, KNNfull) {

FILE: src/core/search/search_test.cc
  type dfly (line 35) | namespace dfly {
    type search (line 36) | namespace search {
      type MockedDocument (line 46) | struct MockedDocument : public DocumentAccessor {
        method MockedDocument (line 50) | MockedDocument() = default;
        method MockedDocument (line 51) | MockedDocument(Map map) : fields_{map} {
        method MockedDocument (line 53) | MockedDocument(std::string test_field) : fields_{{"field", test_fi...
        method GetStrings (line 56) | std::optional<StringList> GetStrings(string_view field) const over...
        method GetTags (line 64) | std::optional<StringList> GetTags(string_view field) const override {
        method GetVector (line 68) | std::optional<VectorInfo> GetVector(string_view field, size_t dim)...
        method GetNumbers (line 75) | std::optional<NumsList> GetNumbers(std::string_view field) const o...
        method string (line 92) | string DebugFormat() {
        method Set (line 102) | void Set(Map hset) {
      type SchemaFieldInitializer (line 112) | struct SchemaFieldInitializer {
        method SchemaFieldInitializer (line 113) | SchemaFieldInitializer(std::string_view name, SchemaField::FieldTy...
        method SchemaFieldInitializer (line 133) | SchemaFieldInitializer(std::string_view name, SchemaField::FieldTy...
      function Schema (line 143) | Schema MakeSimpleSchema(initializer_list<SchemaFieldInitializer> ilist,
      class SearchTest (line 154) | class SearchTest : public ::testing::Test {
        method SetUpTestSuite (line 156) | static void SetUpTestSuite() {
        method SearchTest (line 163) | SearchTest() {
        method PrepareSchema (line 171) | void PrepareSchema(initializer_list<SchemaFieldInitializer> ilist) {
        method PrepareQuery (line 175) | void PrepareQuery(string_view query) {
        method ExpectAll (line 179) | void ExpectAll(Args... args) {
        method ExpectNone (line 183) | void ExpectNone(Args... args) {
        method Check (line 187) | bool Check() {
        method string_view (line 220) | string_view GetError() const {
      function TEST_F (line 233) | TEST_F(SearchTest, MatchTerm) {
      function TEST_F (line 249) | TEST_F(SearchTest, MatchNotTerm) {
      function TEST_F (line 258) | TEST_F(SearchTest, MatchLogicalNode) {
      function TEST_F (line 287) | TEST_F(SearchTest, MatchParenthesis) {
      function TEST_F (line 296) | TEST_F(SearchTest, CheckNotPriority) {
      function TEST_F (line 325) | TEST_F(SearchTest, CheckParenthesisPriority) {
      function TEST_F (line 344) | TEST_F(SearchTest, CheckPrefix) {
      function TEST_F (line 365) | TEST_F(SearchTest, MatchField) {
      function TEST_F (line 377) | TEST_F(SearchTest, MatchRange) {
      function TEST_F (line 388) | TEST_F(SearchTest, MatchDoubleRange) {
      function TEST_F (line 413) | TEST_F(SearchTest, MatchStar) {
      function TEST_F (line 419) | TEST_F(SearchTest, CheckExprInField) {
      function TEST_F (line 450) | TEST_F(SearchTest, CheckTag) {
      function TEST_F (line 466) | TEST_F(SearchTest, CheckTagPrefix) {
      function TEST_F (line 479) | TEST_F(SearchTest, IntegerTerms) {
      function TEST_F (line 490) | TEST_F(SearchTest, StopWords) {
      class SearchRaxTest (line 520) | class SearchRaxTest
      function TEST_P (line 525) | TEST_P(SearchRaxTest, SuffixInfix) {
      function ToBytes (line 588) | std::string ToBytes(absl::Span<const float> vec) {
      function TEST_F (line 592) | TEST_F(SearchTest, Errors) {
      function TEST_F (line 615) | TEST_F(SearchTest, MatchNumericRangeWithCommas) {
      class KnnTest (line 655) | class KnnTest : public SearchTest {}
      class VectorRangeTest (line 657) | class VectorRangeTest : public ::testing::Test {
        method SetUpTestSuite (line 659) | static void SetUpTestSuite() {
      function TEST_F (line 666) | TEST_F(VectorRangeTest, FlatRange1D) {
      function TEST_F (line 713) | TEST_F(VectorRangeTest, FlatRangeDistancesStoredInScores) {
      function TEST_F (line 739) | TEST_F(VectorRangeTest, FlatStarQueryZeroVectorIsValid) {
      function TEST_F (line 759) | TEST_F(VectorRangeTest, FlatStarQueryRemovedDocNotMatched) {
      function TEST_F (line 783) | TEST_F(KnnTest, Simple1D) {
      function TEST_F (line 843) | TEST_F(KnnTest, Simple2D) {
      function TEST_F (line 906) | TEST_F(KnnTest, Cosine) {
      function TEST_F (line 954) | TEST_F(KnnTest, IP) {
      function TEST_F (line 988) | TEST_F(KnnTest, AddRemove) {
      function TEST_F (line 1032) | TEST_F(KnnTest, AutoResize) {
      type HnswSerParam (line 1051) | struct HnswSerParam {
      class HnswSerializationTest (line 1062) | class HnswSerializationTest : public ::testing::TestWithParam<HnswSe...
        method SetUp (line 1064) | void SetUp() override {
        method TearDown (line 1068) | void TearDown() override {
      function TEST_P (line 1073) | TEST_P(HnswSerializationTest, RoundTrip) {
      class HnswDeferredOpsTest (line 1204) | class HnswDeferredOpsTest : public ::testing::Test {
        method SetUp (line 1209) | void SetUp() override {
        method TearDown (line 1222) | void TearDown() override {
        method MockedDocument (line 1227) | MockedDocument MakeDoc(std::initializer_list<float> coords) {
        method KnnIds (line 1232) | absl::flat_hash_set<GlobalDocId> KnnIds(size_t k) {
      function TEST_F (line 1244) | TEST_F(HnswDeferredOpsTest, AddWhileReadLocked) {
      function TEST_F (line 1269) | TEST_F(HnswDeferredOpsTest, RemoveWhileReadLocked) {
      function TEST_F (line 1297) | TEST_F(HnswDeferredOpsTest, DuplicateDeferredOpsKeepLatest) {
      function TEST_F (line 1320) | TEST_F(HnswDeferredOpsTest, DuplicateDeferredOpsAddOverridesRemove) {
      function TEST_F (line 1345) | TEST_F(HnswDeferredOpsTest, RemoveWithoutReadLock) {
      class HnswSubsetKnnTest (line 1359) | class HnswSubsetKnnTest : public ::testing::TestWithParam<VectorSimi...
        method SetUp (line 1361) | void SetUp() override {
        method TearDown (line 1365) | void TearDown() override {
        method CreateSimple1DIndex (line 1370) | unique_ptr<HnswVectorIndex> CreateSimple1DIndex(size_t num_element...
        method CreateCircle2DIndex (line 1392) | unique_ptr<HnswVectorIndex> CreateCircle2DIndex(size_t num_element...
      function TEST_P (line 1415) | TEST_P(HnswSubsetKnnTest, CorrectResults) {
      function TEST_P (line 1453) | TEST_P(HnswSubsetKnnTest, EmptySubset) {
      function TEST_P (line 1465) | TEST_P(HnswSubsetKnnTest, KEqualsZero) {
      function TEST_P (line 1477) | TEST_P(HnswSubsetKnnTest, KGreaterThanSubsetSize) {
      function TEST_P (line 1496) | TEST_P(HnswSubsetKnnTest, NonExistentIds) {
      function TEST_P (line 1516) | TEST_P(HnswSubsetKnnTest, AllDeletedDocuments) {
      function TEST_P (line 1551) | TEST_P(HnswSubsetKnnTest, MixedDeletedAndValidDocs) {
      function TEST_P (line 1594) | TEST_P(HnswSubsetKnnTest, CompareWithFilteredKnn) {
      class HnswRangeQueryTest (line 1680) | class HnswRangeQueryTest : public ::testing::TestWithParam<VectorSim...
        method SetUp (line 1682) | void SetUp() override {
        method TearDown (line 1686) | void TearDown() override {
        method CreateSimple1DIndex (line 1691) | unique_ptr<HnswVectorIndex> CreateSimple1DIndex(size_t num_element...
      function TEST_P (line 1711) | TEST_P(HnswRangeQueryTest, BasicRange) {
      function TEST_P (line 1726) | TEST_P(HnswRangeQueryTest, ExactMatch) {
      function TEST_P (line 1739) | TEST_P(HnswRangeQueryTest, LargeRadiusReturnsAll) {
      function TEST_P (line 1749) | TEST_P(HnswRangeQueryTest, EmptyResultOutsideRadius) {
      function TEST_P (line 1759) | TEST_P(HnswRangeQueryTest, EmptyIndex) {
      function TEST_P (line 1769) | TEST_P(HnswRangeQueryTest, DistancesCorrect) {
      function TEST_P (line 1785) | TEST_P(HnswRangeQueryTest, DeletedDocNotReturned) {
      function TEST_P (line 1803) | TEST_P(HnswRangeQueryTest, ConsistentWithBruteForce) {
      function TEST_F (line 1833) | TEST_F(SearchTest, GeoSearch) {
      function TEST_F (line 1886) | TEST_F(SearchTest, VectorDistanceBasic) {
      function TEST_F (line 1919) | TEST_F(SearchTest, VectorDistanceConsistency) {
      function BM_VectorSearch (line 1937) | static void BM_VectorSearch(benchmark::State& state) {
      function TEST_F (line 1975) | TEST_F(SearchTest, MatchNonNullField) {
      function TEST_F (line 2014) | TEST_F(SearchTest, InvalidVectorParameter) {
      class SortIndexTest (line 2048) | class SortIndexTest : public testing::Test {
        method SetUp (line 2050) | void SetUp() override {
        method TearDown (line 2054) | void TearDown() override {
      function TEST_F (line 2059) | TEST_F(SortIndexTest, StringSort) {
      function TEST_F (line 2087) | TEST_F(SortIndexTest, NumSort) {
      type SearchType (line 2114) | enum class SearchType { PREFIX = 0, SUFFIX = 1, INFIX = 2 }
      function GenerateWordSequence (line 2117) | static std::string GenerateWordSequence(size_t word_count, size_t do...
      function GeneratePattern (line 2139) | static std::string GeneratePattern(SearchType search_type, size_t pa...
      function BM_SearchByTypeImpl (line 2168) | static void BM_SearchByTypeImpl(benchmark::State& state, bool use_di...
      function BM_SearchByType_Uniform (line 2251) | static void BM_SearchByType_Uniform(benchmark::State& state) {
      function BM_SearchByType_Diverse (line 2255) | static void BM_SearchByType_Diverse(benchmark::State& state) {
      function GenerateRandomVector (line 2295) | static std::vector<float> GenerateRandomVector(size_t dims, unsigned...
      function BM_SearchDocIds (line 2306) | static void BM_SearchDocIds(benchmark::State& state) {
      function BM_SearchNumericIndexes (line 2334) | static void BM_SearchNumericIndexes(benchmark::State& state) {
      function BM_SearchNumericIndexesSmallRanges (line 2379) | static void BM_SearchNumericIndexesSmallRanges(benchmark::State& sta...
      function BM_SearchTwoNumericIndexes (line 2429) | static void BM_SearchTwoNumericIndexes(benchmark::State& state) {
      function BM_SearchNumericAndTagIndexes (line 2490) | static void BM_SearchNumericAndTagIndexes(benchmark::State& state) {
      function BM_SearchSeveralNumericAndTagIndexes (line 2547) | static void BM_SearchSeveralNumericAndTagIndexes(benchmark::State& s...
      function BM_SearchMergeEqualSets (line 2615) | static void BM_SearchMergeEqualSets(benchmark::State& state) {
      function BM_SearchRangeTreeSplits (line 2665) | static void BM_SearchRangeTreeSplits(benchmark::State& state) {
      function TEST (line 2694) | TEST(CosineDistanceTest, ZeroVectors) {
      function BM_VectorDistance (line 2702) | static void BM_VectorDistance(benchmark::State& state) {
      function BM_VectorDistance_Intensive (line 2736) | static void BM_VectorDistance_Intensive(benchmark::State& state) {

FILE: src/core/search/sort_indices.cc
  type dfly::search (line 16) | namespace dfly::search {
    function SortableValue (line 33) | SortableValue SimpleValueSortIndex<T>::Lookup(DocId doc) const {
    type SimpleValueSortIndex<double> (line 101) | struct SimpleValueSortIndex<double>
    type SimpleValueSortIndex<StatelessString> (line 102) | struct SimpleValueSortIndex<StatelessString>

FILE: src/core/search/sort_indices.h
  function namespace (line 10) | namespace dfly::search {

FILE: src/core/search/stateless_allocator.h
  function namespace (line 11) | namespace dfly {

FILE: src/core/search/synonyms.cc
  type dfly::search (line 10) | namespace dfly::search {

FILE: src/core/search/synonyms.h
  function namespace (line 10) | namespace dfly::search {

FILE: src/core/search/tag_types.h
  function namespace (line 7) | namespace dfly {

FILE: src/core/search/vector_utils.cc
  type dfly::search (line 12) | namespace dfly::search {
    function OwnedFtVector (line 28) | OwnedFtVector ConvertToFtVector(string_view value) {
    function FAST_MATH (line 41) | FAST_MATH float L2Distance(const float* u, const float* v, size_t dims) {
    function FAST_MATH (line 56) | FAST_MATH float IPDistance(const float* u, const float* v, size_t dims) {
    function FAST_MATH (line 71) | FAST_MATH float CosineDistance(const float* u, const float* v, size_t ...
    function OwnedFtVector (line 90) | OwnedFtVector BytesToFtVector(string_view value) {
    function BytesToFtVectorSafe (line 95) | std::optional<OwnedFtVector> BytesToFtVectorSafe(string_view value) {
    function VectorDistance (line 102) | float VectorDistance(const float* u, const float* v, size_t dims, Vect...
    function InitSimSIMD (line 114) | void InitSimSIMD() {

FILE: src/core/search/vector_utils.h
  function namespace (line 9) | namespace dfly::search {

FILE: src/core/segment_allocator.cc
  type dfly (line 11) | namespace dfly {

FILE: src/core/segment_allocator.h
  function namespace (line 16) | namespace dfly {

FILE: src/core/size_tracking_channel.h
  function namespace (line 11) | namespace dfly {

FILE: src/core/small_string.cc
  type dfly (line 16) | namespace dfly {
    class XXH3_Deleter (line 21) | class XXH3_Deleter {
    type TL (line 28) | struct TL {

FILE: src/core/small_string.h
  function namespace (line 10) | namespace dfly {

FILE: src/core/sorted_map.cc
  type dfly (line 25) | namespace dfly {
    type detail (line 26) | namespace detail {
      function GetObjScore (line 30) | double GetObjScore(const void* obj) {
      function SetObjScore (line 36) | void SetObjScore(void* obj, double score) {
      function double2ll (line 55) | static int double2ll(double d, long long* out) {
      function zzlCompareElements (line 84) | int zzlCompareElements(unsigned char* eptr, unsigned char* cstr, uns...
      function ZzlStrtod (line 155) | double ZzlStrtod(unsigned char* vstr, unsigned int vlen) {
      function sds (line 165) | sds LpGetObject(const uint8_t* sptr) {
      function ZzlGetScore (line 190) | double ZzlGetScore(const uint8_t* sptr) {
      function ZzlPrev (line 210) | void ZzlPrev(const uint8_t* zl, uint8_t** eptr, uint8_t** sptr) {
      function ZzlNext (line 229) | void ZzlNext(const uint8_t* zl, uint8_t** eptr, uint8_t** sptr) {
      function ZslFreeLexRange (line 248) | void ZslFreeLexRange(const zlexrangespec* spec) {
      function sdscmplex (line 258) | int sdscmplex(sds a, sds b) {
      function zslLexValueGteMin (line 268) | int zslLexValueGteMin(sds value, const zlexrangespec* spec) {
      function zslLexValueLteMax (line 272) | int zslLexValueLteMax(sds value, const zlexrangespec* spec) {
      function ZzlLexValueGteMin (line 276) | int ZzlLexValueGteMin(unsigned char* p, const zlexrangespec* spec) {
      function ZzlLexValueLteMax (line 283) | int ZzlLexValueLteMax(unsigned char* p, const zlexrangespec* spec) {
      function zzlIsInRange (line 292) | int zzlIsInRange(unsigned char* zl, const zrangespec* range) {
      function ZzlIsInLexRange (line 381) | int ZzlIsInLexRange(unsigned char* zl, const zlexrangespec* range) {
      function SortedMap (line 1119) | SortedMap* SortedMap::FromListPack(PMR_NS::memory_resource* res, con...

FILE: src/core/sorted_map.h
  type zrangespec (line 22) | typedef struct {
  type zlexrangespec (line 28) | typedef struct {
  function namespace (line 49) | namespace dfly {

FILE: src/core/sorted_map_test.cc
  type dfly (line 26) | namespace dfly {
    class SortedMapTest (line 29) | class SortedMapTest : public ::testing::Test {
      method SetUpTestSuite (line 31) | static void SetUpTestSuite() {
    function TEST_F (line 41) | TEST_F(SortedMapTest, Add) {
    function TEST_F (line 63) | TEST_F(SortedMapTest, Scan) {
    function TEST_F (line 76) | TEST_F(SortedMapTest, InsertPop) {
    function TEST_F (line 102) | TEST_F(SortedMapTest, LexRanges) {
    function TEST_F (line 149) | TEST_F(SortedMapTest, ScoreRanges) {
    function TEST_F (line 193) | TEST_F(SortedMapTest, DeleteRange) {
    function TEST_F (line 231) | TEST_F(SortedMapTest, RangeBug) {
    function TEST_F (line 250) | TEST_F(SortedMapTest, ReallocIfNeeded) {

FILE: src/core/sse_port.h
  function namespace (line 18) | namespace dfly {

FILE: src/core/string_map.cc
  type dfly (line 19) | namespace dfly {
    function CreateEntry (line 27) | pair<sds, uint64_t> CreateEntry(string_view field, string_view value, ...
    function HasTtl (line 57) | bool HasTtl(sds entry) {
    function sds (line 78) | sds StringMap::AddOrExchange(std::string_view field, std::string_view ...
    function sds (line 215) | sds StringMap::GetValue(sds key) {

FILE: src/core/string_map.h
  function namespace (line 17) | namespace dfly {
  function class (line 46) | class StringMap : public DenseSet {
  function iterator (line 143) | iterator Find(std::string_view member) {

FILE: src/core/string_map_test.cc
  type dfly (line 30) | namespace dfly {
    class StringMapTest (line 34) | class StringMapTest : public ::testing::Test {
      method SetUpTestSuite (line 36) | static void SetUpTestSuite() {
      method TearDownTestSuite (line 42) | static void TearDownTestSuite() {
      method StringMapTest (line 56) | StringMapTest() : mi_alloc_(mi_heap_get_backing()) {
      method SetUp (line 59) | void SetUp() override {
      method TearDown (line 63) | void TearDown() override {
    function TEST_F (line 72) | TEST_F(StringMapTest, Basic) {
    function TEST_F (line 99) | TEST_F(StringMapTest, EmptyFind) {
    function TEST_F (line 103) | TEST_F(StringMapTest, Ttl) {
    function TEST_F (line 121) | TEST_F(StringMapTest, IterateExpired) {
    function TEST_F (line 130) | TEST_F(StringMapTest, SetFieldExpireHasExpiry) {
    function TEST_F (line 140) | TEST_F(StringMapTest, SetFieldExpireNoHasExpiry) {
    function TEST_F (line 149) | TEST_F(StringMapTest, Bug3973) {
    function TEST_F (line 171) | TEST_F(StringMapTest, Bug3984) {
    function TEST_F (line 189) | TEST_F(StringMapTest, ReallocIfNeeded) {
    function TEST_F (line 234) | TEST_F(StringMapTest, ExpiryChangesSize) {
    function TEST_F (line 248) | TEST_F(StringMapTest, ExpiryWithMaxAndKeepTTL) {
    function TEST_F (line 277) | TEST_F(StringMapTest, ExtractExisting) {
    function TEST_F (line 295) | TEST_F(StringMapTest, ExtractNonExisting) {
    function TEST_F (line 302) | TEST_F(StringMapTest, AddOrExchangeNew) {
    function TEST_F (line 310) | TEST_F(StringMapTest, AddOrExchangeReplace) {
    function TEST_F (line 328) | TEST_F(StringMapTest, AddOrExchangeWithTtl) {
    function TEST_F (line 346) | TEST_F(StringMapTest, ExtractMultiple) {

FILE: src/core/string_set.cc
  type dfly (line 21) | namespace dfly {
    function MayHaveTtl (line 25) | inline bool MayHaveTtl(sds s) {
    function sds (line 30) | sds AllocImmutableWithTtl(uint32_t len, uint32_t at) {
    function sds (line 187) | sds StringSet::MakeSetSds(string_view src, uint32_t ttl_sec) const {

FILE: src/core/string_set.h
  function Erase (line 34) | bool Erase(std::string_view str) {
  function Contains (line 38) | bool Contains(std::string_view s1) const {
  function class (line 42) | class iterator : private IteratorBase {
  function iterator (line 92) | iterator begin() {

FILE: src/core/string_set_test.cc
  type dfly (line 29) | namespace dfly {
    class DenseSetAllocator (line 34) | class DenseSetAllocator : public PMR_NS::memory_resource {
      method all_freed (line 36) | bool all_freed() const {
      method do_deallocate (line 46) | void do_deallocate(void* p, size_t bytes, size_t alignment) override {
      method do_is_equal (line 51) | bool do_is_equal(const PMR_NS::memory_resource& other) const noexcep...
    class StringSetTest (line 59) | class StringSetTest : public ::testing::Test {
      method SetUpTestSuite (line 61) | static void SetUpTestSuite() {
      method TearDownTestSuite (line 67) | static void TearDownTestSuite() {
      method SetUp (line 70) | void SetUp() override {
      method TearDown (line 75) | void TearDown() override {
    function TEST_F (line 88) | TEST_F(StringSetTest, Basic) {
    function TEST_F (line 98) | TEST_F(StringSetTest, StandardAddErase) {
    function TEST_F (line 125) | TEST_F(StringSetTest, DisplacedBug) {
    function string (line 177) | static string random_string(mt19937& rand, unsigned len) {
    function TEST_F (line 189) | TEST_F(StringSetTest, Resizing) {
    function TEST_F (line 218) | TEST_F(StringSetTest, SimpleScan) {
    function TEST_F (line 240) | TEST_F(StringSetTest, ScanGuarantees) {
    function TEST_F (line 285) | TEST_F(StringSetTest, IntOnly) {
    function TEST_F (line 337) | TEST_F(StringSetTest, XtremeScanGrow) {
    function TEST_F (line 380) | TEST_F(StringSetTest, Pop) {
    function TEST_F (line 408) | TEST_F(StringSetTest, Iteration) {
    function TEST_F (line 436) | TEST_F(StringSetTest, SetFieldExpireHasExpiry) {
    function TEST_F (line 446) | TEST_F(StringSetTest, SetFieldExpireNoHasExpiry) {
    function TEST_F (line 455) | TEST_F(StringSetTest, Ttl) {
    function TEST_F (line 487) | TEST_F(StringSetTest, Grow) {
    function TEST_F (line 498) | TEST_F(StringSetTest, Reserve) {
    function TEST_F (line 514) | TEST_F(StringSetTest, Fill) {
    function TEST_F (line 526) | TEST_F(StringSetTest, ClearResetsObjMallocUsed) {
    function TEST_F (line 544) | TEST_F(StringSetTest, IterateEmpty) {
    function MemUsed (line 551) | static size_t MemUsed(StringSet& obj) {
    function BM_Clone (line 555) | void BM_Clone(benchmark::State& state) {
    function BM_Fill (line 577) | void BM_Fill(benchmark::State& state) {
    function BM_Clear (line 596) | void BM_Clear(benchmark::State& state) {
    function BM_Add (line 612) | void BM_Add(benchmark::State& state) {
    function BM_AddMany (line 639) | void BM_AddMany(benchmark::State& state) {
    function BM_Erase (line 670) | void BM_Erase(benchmark::State& state) {
    function BM_Get (line 700) | void BM_Get(benchmark::State& state) {
    function BM_Grow (line 721) | void BM_Grow(benchmark::State& state) {
    function BM_Spop1000 (line 749) | void BM_Spop1000(benchmark::State& state) {
    function TEST_F (line 773) | TEST_F(StringSetTest, ReallocIfNeeded) {
    function TEST_F (line 818) | TEST_F(StringSetTest, TransferTTLFlagLinkToObjectOnDelete) {
    class ShrinkTest (line 830) | class ShrinkTest : public StringSetTest, public ::testing::WithParamIn...
    function TEST_P (line 832) | TEST_P(ShrinkTest, BasicShrink) {
    function TEST_F (line 865) | TEST_F(StringSetTest, ShrinkWithTTL) {
    function TEST_F (line 923) | TEST_F(StringSetTest, ScanWithShrinkBetweenCalls) {

FILE: src/core/task_queue.cc
  type dfly (line 14) | namespace dfly {

FILE: src/core/task_queue.h
  function namespace (line 10) | namespace dfly {

FILE: src/core/tiering_types.cc
  type dfly::tiering (line 9) | namespace dfly::tiering {
    function TieredCoolRecord (line 30) | TieredCoolRecord* FragmentRef::GetCoolRecord() const {

FILE: src/core/tiering_types.h
  function namespace (line 11) | namespace dfly::tiering {

FILE: src/core/top_keys.cc
  type dfly (line 13) | namespace dfly {

FILE: src/core/top_keys.h
  function namespace (line 15) | namespace dfly {

FILE: src/core/top_keys_test.cc
  type dfly (line 16) | namespace dfly {
    function TEST (line 18) | TEST(TopKeysTest, Basic) {
    function TEST (line 26) | TEST(TopKeysTest, MultiTouch) {
    function TEST (line 36) | TEST(TopKeysTest, MinKeyCountToRecord) {
    function TEST (line 50) | TEST(TopKeysTest, MultiKeys) {
    function TEST (line 60) | TEST(TopKeysTest, BucketCollision) {
    function TEST (line 81) | TEST(TopKeysTest, BucketCollisionAggressiveDecay) {
    function TEST (line 94) | TEST(TopKeysTest, BucketCollisionHesitantDecay) {
    function TEST (line 108) | TEST(TopKeysTest, SavedByMultipleArrays) {

FILE: src/core/topk.cc
  type dfly (line 18) | namespace dfly {
    function TOPK (line 74) | TOPK& TOPK::operator=(TOPK&& other) noexcept {

FILE: src/core/topk.h
  function namespace (line 18) | namespace dfly {

FILE: src/core/topk_test.cc
  type dfly (line 17) | namespace dfly {
    class TOPKTest (line 21) | class TOPKTest : public ::testing::Test {
      method TOPKTest (line 28) | TOPKTest() : topk_(PMR_NS::get_default_resource(), 5, 100, 5, 0.0) {
      method ComputeDecayProbability (line 31) | double ComputeDecayProbability(TOPK* topk, uint32_t count) const {
    function TEST (line 42) | TEST(TOPKBasic, ConstructorStoresParameters) {
    function TEST (line 52) | TEST(TOPKBasic, DecayTableMemoryAllocation) {
    function TEST_F (line 68) | TEST_F(TOPKTest, MoveConstructorTransfersOwnership) {
    function TEST (line 83) | TEST(TOPKBasic, MoveAssignmentTransfersOwnership) {
    function TEST_F (line 103) | TEST_F(TOPKTest, AddFillsHeapUpToK) {
    function TEST_F (line 114) | TEST_F(TOPKTest, AddReturnsNulloptWhileHeapNotFull) {
    function TEST_F (line 121) | TEST_F(TOPKTest, AddEvictsMinimumWhenHeapFull) {
    function TEST_F (line 133) | TEST_F(TOPKTest, AddDoesNotEvictWhenNewItemScoreTooLow) {
    function TEST_F (line 146) | TEST_F(TOPKTest, AddSameItemRepeatedlyIncreasesCount) {
    function TEST_F (line 167) | TEST_F(TOPKTest, IncrByZeroReturnsNullopt) {
    function TEST (line 177) | TEST(TOPKBasic, IncrByOneBehavesLikeAdd) {
    function TEST_F (line 189) | TEST_F(TOPKTest, IncrByLargeValueCausesImmediateEviction) {
    function TEST_F (line 200) | TEST_F(TOPKTest, IncrByExistingHeapItemUpdatesCount) {
    function TEST_F (line 216) | TEST_F(TOPKTest, QueryReturnsTrueForHeapItems) {
    function TEST_F (line 225) | TEST_F(TOPKTest, QueryReturnsFalseForNonHeapItems) {
    function TEST_F (line 232) | TEST_F(TOPKTest, QueryReturnsFalseForEvictedItems) {
    function TEST_F (line 253) | TEST_F(TOPKTest, QueryMixedBatch) {
    function TEST_F (line 264) | TEST_F(TOPKTest, CountReturnsZeroForUnseen) {
    function TEST_F (line 270) | TEST_F(TOPKTest, CountReturnsNonZeroForSeenItems) {
    function TEST_F (line 276) | TEST_F(TOPKTest, CountForHeapItemMatchesListCount) {
    function TEST (line 296) | TEST(TOPKBasic, ListEmptyOnConstruction) {
    function TEST_F (line 302) | TEST_F(TOPKTest, ListReturnsSortedByCountDescending) {
    function TEST_F (line 324) | TEST_F(TOPKTest, ListNeverExceedsKItems) {
    function TEST_F (line 337) | TEST_F(TOPKTest, ProbabilityBelowTableSize) {
    function TEST (line 351) | TEST(TOPKBasic, ProbabilityAboveTableSizeNoCrash) {
    function TEST (line 369) | TEST(TOPKBasic, VeryHighCountApproachesZero) {
    function TEST (line 387) | TEST(TOPKBasic, ZeroDecayNeverDecays) {
    function TEST (line 402) | TEST(TOPKBasic, DecayOneAlwaysDecays) {
    function TEST (line 419) | TEST(TOPKBasic, MallocUsedIncreaseWithHeapGrowth) {
    function TEST_F (line 434) | TEST_F(TOPKTest, SerializeRoundTripPreservesConfiguration) {
    function TEST_F (line 448) | TEST_F(TOPKTest, SerializeRoundTripPreservesHeapItems) {
    function TEST_F (line 467) | TEST_F(TOPKTest, SerializeRoundTripPreservesCounters) {
    function TEST_F (line 480) | TEST_F(TOPKTest, DeserializeRebuildsValidHeapProperty) {
    function TEST (line 496) | TEST(TOPKBasic, SerializeEmptyTOPK) {
    function TEST (line 512) | TEST(TOPKBasic, PMRExplicitDefaultResourceWorks) {
    function TEST (line 535) | TEST(TOPKBasic, TopKItemsIdentifiedUnderHeavyLoad) {
    function TEST (line 565) | TEST(TOPKBasic, KEqualsOneTracksOnlyTopItem) {
    function TEST (line 586) | TEST(TOPKBasic, DeserializeRestoresHeapProperty) {
    function TEST_F (line 627) | TEST_F(TOPKTest, CounterSaturationPreventsOverflow) {
    function TEST (line 643) | TEST(TOPKDeathTest, ZeroKCrashes) {
    function TEST (line 648) | TEST(TOPKDeathTest, ZeroWidthCrashes) {
    function TEST (line 653) | TEST(TOPKDeathTest, DecayAboveOneCrashes) {
    function TEST (line 658) | TEST(TOPKDeathTest, DeserializeDimensionMismatchCrashes) {
    function TEST (line 670) | TEST(TOPKDeathTest, DeserializeDecayMismatchCrashes) {

FILE: src/core/tx_queue.cc
  type dfly (line 8) | namespace dfly {

FILE: src/core/tx_queue.h
  function namespace (line 11) | namespace dfly {

FILE: src/core/zstd_test.cc
  type dfly (line 13) | namespace dfly {
    class ZStdTest (line 19) | class ZStdTest : public ::testing::Test {
      method string (line 21) | string Compress(const string& src, const ZSTD_CDict* cdict) {
      method string (line 33) | string Decompress(const string& src, const ZSTD_DDict* ddict, size_t...
      method string (line 43) | string CompressNoDict(const string& src) {
    function TEST_F (line 58) | TEST_F(ZStdTest, Dict) {

FILE: src/facade/cmd_arg_parser.cc
  type facade (line 12) | namespace facade {
    function ErrorReply (line 31) | ErrorReply CmdArgParser::ErrorInfo::MakeReply() const {

FILE: src/facade/cmd_arg_parser.h
  function namespace (line 16) | namespace facade {
  function Finalize (line 153) | bool Finalize() {
  function HasNext (line 167) | bool HasNext() {
  function HasAtLeast (line 177) | bool HasAtLeast(size_t i) const {
  function Report (line 186) | void Report(int error_type) {

FILE: src/facade/cmd_arg_parser_test.cc
  type facade (line 15) | namespace facade {
    class CmdArgParserTest (line 17) | class CmdArgParserTest : public testing::Test {
      method CmdArgParser (line 19) | CmdArgParser Make(absl::Span<const std::string_view> args) {
    function TEST_F (line 32) | TEST_F(CmdArgParserTest, BasicTypes) {
    function TEST_F (line 50) | TEST_F(CmdArgParserTest, BoundError) {
    function TEST_F (line 62) | TEST_F(CmdArgParserTest, IntError) {
    function TEST_F (line 74) | TEST_F(CmdArgParserTest, Check) {
    function TEST_F (line 85) | TEST_F(CmdArgParserTest, NextStatement) {
    function TEST_F (line 98) | TEST_F(CmdArgParserTest, CheckTailFail) {
    function TEST_F (line 112) | TEST_F(CmdArgParserTest, Map) {
    function TEST_F (line 124) | TEST_F(CmdArgParserTest, TryMapNext) {
    function TEST_F (line 135) | TEST_F(CmdArgParserTest, IgnoreCase) {
    function TEST_F (line 146) | TEST_F(CmdArgParserTest, FixedRangeInt) {

FILE: src/facade/command_id.h
  function namespace (line 11) | namespace facade {

FILE: src/facade/conn_context.h
  function namespace (line 11) | namespace facade {

FILE: src/facade/connection_ref.h
  function namespace (line 10) | namespace facade {

FILE: src/facade/disk_backed_queue.cc
  type facade (line 31) | namespace facade {

FILE: src/facade/disk_backed_queue.h
  function namespace (line 15) | namespace facade {

FILE: src/facade/disk_backed_queue_test.cc
  type dfly (line 22) | namespace dfly {
    class DiskBackedQueueTest (line 27) | class DiskBackedQueueTest : public testing::Test {
      method SetUp (line 29) | void SetUp() override {
      method TearDown (line 34) | void TearDown() override {
    function TEST_F (line 44) | TEST_F(DiskBackedQueueTest, PunchHoleReleasesSpace) {
    function TEST_F (line 91) | TEST_F(DiskBackedQueueTest, PunchHoleAdvancesOffset) {
    function TEST_F (line 137) | TEST_F(DiskBackedQueueTest, PunchHoleUnalignedReadsAndWrites) {
    function TEST_F (line 242) | TEST_F(DiskBackedQueueTest, AsyncReadWrite) {
    function TEST_F (line 296) | TEST_F(DiskBackedQueueTest, AsyncPunchHole) {

FILE: src/facade/dragonfly_connection.cc
  function ABSL_FLAG (line 127) | ABSL_FLAG(bool, experimental_io_loop_v2, true, "new io loop");

FILE: src/facade/dragonfly_connection.h
  type SSL_CTX (line 24) | typedef struct ssl_ctx_st SSL_CTX;
  function namespace (line 41) | namespace util {
  function namespace (line 45) | namespace facade {

FILE: src/facade/dragonfly_listener.cc
  type TlsClientAuth (line 52) | enum TlsClientAuth {
  type facade (line 69) | namespace facade {
    function ConfigureKeepAlive (line 81) | bool ConfigureKeepAlive(int fd) {
    type ListenerStats (line 111) | struct ListenerStats {
    function OverriddenSSLFree (line 133) | void OverriddenSSLFree(void* addr, const char* file, int line) {
    function error_code (line 184) | error_code Listener::ConfigureServerSocket(int fd) {
    function ProactorBase (line 330) | ProactorBase* Listener::PickConnectionProactor(util::FiberSocketBase* ...

FILE: src/facade/dragonfly_listener.h
  type SSL_CTX (line 21) | typedef struct ssl_ctx_st SSL_CTX;
  function namespace (line 23) | namespace facade {
  function class (line 88) | class DispatchTracker {

FILE: src/facade/error.h
  function namespace (line 10) | namespace facade {

FILE: src/facade/facade.cc
  type facade (line 17) | namespace facade {
    function ConnectionStats (line 25) | ConnectionStats& ConnectionStats::operator+=(const ConnectionStats& o) {
    function ReplyStats (line 66) | ReplyStats& ReplyStats::operator+=(const ReplyStats& o) {
    function ReplyStats (line 85) | ReplyStats& ReplyStats::operator=(const ReplyStats& o) {
    function string (line 102) | string WrongNumArgsError(string_view cmd) {
    function string (line 106) | string InvalidExpireTime(string_view cmd) {
    function string (line 110) | string UnknownSubCmd(string_view subcmd, string_view cmd) {
    function string (line 115) | string ConfigSetFailed(string_view config_name) {
  type std (line 151) | namespace std {
    function ostream (line 155) | ostream& operator<<(ostream& os, facade::CmdArgList ras) {
    function ostream (line 168) | ostream& operator<<(ostream& os, const facade::RespExpr& e) {
    function ostream (line 199) | ostream& operator<<(ostream& os, facade::RespSpan ras) {
    function ostream (line 212) | ostream& operator<<(ostream& os, facade::Protocol p) {

FILE: src/facade/facade_stats.h
  function namespace (line 13) | namespace facade {

FILE: src/facade/facade_test.cc
  type facade (line 12) | namespace facade {
    function PrintTo (line 114) | void PrintTo(const RespExpr::Vec& vec, std::ostream* os) {

FILE: src/facade/facade_test.h
  function namespace (line 15) | namespace facade {

FILE: src/facade/facade_types.h
  function namespace (line 16) | namespace facade {
  function _KB (line 202) | constexpr unsigned long long operator""_KB(unsigned long long x) {
  function namespace (line 216) | namespace std {

FILE: src/facade/memcache_parser.cc
  type facade (line 18) | namespace facade {
    function ToAbsolute (line 24) | int64_t ToAbsolute(uint32_t ts, uint64_t now) {
    function From (line 32) | MP::CmdType From(string_view token) {
    function ParseStore (line 72) | MP::Result ParseStore(ArgSlice tokens, int64_t now, MP::Command* res, ...
    function ParseValueless (line 121) | MP::Result ParseValueless(ArgSlice tokens, int64_t now, MP::Command* r...
    function ParseMetaMode (line 178) | bool ParseMetaMode(char m, MP::Command* res) {
    function ParseMeta (line 219) | MP::Result ParseMeta(ArgSlice tokens, int64_t now, MP::Command* res, u...

FILE: src/facade/memcache_parser.h
  function namespace (line 15) | namespace facade {

FILE: src/facade/memcache_parser_test.cc
  type facade (line 17) | namespace facade {
    class MCParserTest (line 19) | class MCParserTest : public testing::Test {
      method MCParserTest (line 21) | MCParserTest() {
      method Parse (line 24) | MemcacheParser::Result Parse(string_view input) {
      method ToArgs (line 29) | vector<string_view> ToArgs() const {
    function TEST_F (line 39) | TEST_F(MCParserTest, Basic) {
    function TEST_F (line 53) | TEST_F(MCParserTest, Incr) {
    function TEST_F (line 73) | TEST_F(MCParserTest, Stats) {
    function TEST_F (line 90) | TEST_F(MCParserTest, NoreplyBasic) {
    function TEST_F (line 112) | TEST_F(MCParserTest, Meta) {
    function TEST_F (line 159) | TEST_F(MCParserTest, Gat) {
    function TEST_F (line 189) | TEST_F(MCParserTest, ValueState) {
    function TEST_F (line 207) | TEST_F(MCParserTest, MaxValueLen) {
    function TEST_F (line 234) | TEST_F(MCParserTest, ParseError) {
    function TEST_F (line 244) | TEST_F(MCParserTest, SplitCRLFInCommandLine) {
    function TEST_F (line 261) | TEST_F(MCParserTest, SplitCRLFEmptyCommand) {
    class MCParserNoreplyTest (line 271) | class MCParserNoreplyTest : public MCParserTest {
      method RunTest (line 273) | void RunTest(string_view str, bool noreply,
    function TEST_F (line 282) | TEST_F(MCParserNoreplyTest, StoreCommands) {
    function TEST_F (line 291) | TEST_F(MCParserNoreplyTest, Other) {
    function TEST_F (line 299) | TEST_F(MCParserNoreplyTest, LargeGetRequest) {

FILE: src/facade/ok_main.cc
  function ABSL_FLAG (line 14) | ABSL_FLAG(uint32_t, port, 6379, "server port");
  function main (line 90) | int main(int argc, char* argv[]) {

FILE: src/facade/op_status.cc
  type facade (line 7) | namespace facade {
    function StatusToMsg (line 9) | std::string_view StatusToMsg(OpStatus status) {

FILE: src/facade/op_status.h
  function namespace (line 10) | namespace facade {
  function namespace (line 128) | namespace std {

FILE: src/facade/parsed_command.cc
  type facade (line 15) | namespace facade {
    function string (line 19) | string MCRender::RenderNotFound() const {
    function string (line 25) | string MCRender::RenderGetEnd() const {
    function string (line 39) | string MCRender::RenderMiss() const {
    function string (line 45) | string MCRender::RenderDeleted() const {

FILE: src/facade/parsed_command.h
  function namespace (line 16) | namespace facade {
  function Resolve (line 149) | void Resolve(const facade::ErrorReply& error) {
  function Resolve (line 154) | void Resolve(util::fb2::EmbeddedBlockingCounter* blocker, std::coroutine...

FILE: src/facade/redis_parser.cc
  type facade (line 12) | namespace facade {

FILE: src/facade/redis_parser.h
  function namespace (line 12) | namespace facade {

FILE: src/facade/redis_parser_test.cc
  type facade (line 18) | namespace facade {
    class RedisParserTest (line 35) | class RedisParserTest : public testing::Test {
      method SetUpTestSuite (line 37) | static void SetUpTestSuite() {
    function TEST_F (line 56) | TEST_F(RedisParserTest, Inline) {
    function TEST_F (line 89) | TEST_F(RedisParserTest, InlineEscaping) {
    function TEST_F (line 93) | TEST_F(RedisParserTest, Multi1) {
    function TEST_F (line 108) | TEST_F(RedisParserTest, Multi2) {
    function TEST_F (line 126) | TEST_F(RedisParserTest, Multi3) {
    function TEST_F (line 138) | TEST_F(RedisParserTest, ClientMode) {
    function TEST_F (line 202) | TEST_F(RedisParserTest, Hierarchy) {
    function TEST_F (line 215) | TEST_F(RedisParserTest, InvalidMult1) {
    function TEST_F (line 219) | TEST_F(RedisParserTest, Empty) {
    function TEST_F (line 223) | TEST_F(RedisParserTest, LargeBulk) {
    function TEST_F (line 259) | TEST_F(RedisParserTest, NILs) {
    function TEST_F (line 266) | TEST_F(RedisParserTest, NestedArray) {
    function TEST_F (line 278) | TEST_F(RedisParserTest, UsedMemory) {
    function TEST_F (line 298) | TEST_F(RedisParserTest, Eol) {
    function TEST_F (line 305) | TEST_F(RedisParserTest, BulkSplit) {
    function TEST_F (line 311) | TEST_F(RedisParserTest, InlineSplit) {
    function TEST_F (line 322) | TEST_F(RedisParserTest, InlineReset) {

FILE: src/facade/reply_builder.cc
  type facade (line 30) | namespace facade {
    function piece_size (line 47) | size_t piece_size(const T& v) {
    function write_piece (line 60) | enable_if_t<is_integral_v<T>, char*> write_piece(T num, char* dest) {

FILE: src/facade/reply_builder.h
  type class (line 18) | enum class
  type GuardBase (line 23) | struct GuardBase {
  type PendingPin (line 32) | struct PendingPin
  function explicit (line 46) | explicit SinkReplyBuilder(io::Sink* sink) : sink_(sink) {
  type ReplyScope (line 54) | struct ReplyScope
  function explicit (line 55) | explicit ReplyScope(SinkReplyBuilder* rb) : GuardBase{std::exchange(rb->...
  function GuardBase (line 63) | struct ReplyAggregator : GuardBase {
  function class (line 149) | class MCReplyBuilder : public SinkReplyBuilder {

FILE: src/facade/reply_builder_test.cc
  type facade (line 25) | namespace facade {
    function BuildExpectedErrorString (line 45) | std::string BuildExpectedErrorString(std::string_view msg) {
    function GetErrorType (line 53) | std::string_view GetErrorType(std::string_view err) {
    class RedisReplyBuilderTest (line 59) | class RedisReplyBuilderTest : public testing::Test {
      type ParsingResults (line 61) | struct ParsingResults {
        method ParsingResults (line 66) | ParsingResults(std::optional<RESPObj> obj = std::nullopt, size_t b...
        method Verify (line 93) | bool Verify(std::uint32_t expected) const {
        method IsError (line 97) | bool IsError() const {
        method IsOk (line 101) | bool IsOk() const {
        method IsNull (line 105) | bool IsNull() const {
        method IsString (line 109) | bool IsString() const {
      method SetUp (line 118) | void SetUp() {
      method SetUpTestSuite (line 124) | static void SetUpTestSuite() {
      method RawTokenizedMessage (line 130) | std::vector<std::string_view> RawTokenizedMessage() const {
      method str (line 135) | std::string_view str() const {
      method TakePayload (line 139) | std::string TakePayload() {
      method SinkSize (line 145) | std::size_t SinkSize() const {
      method GetError (line 149) | unsigned GetError(string_view err) const {
      method NoErrors (line 155) | static bool NoErrors() {
      method ReplyStats (line 159) | static const ReplyStats& GetReplyStats() {
    function TEST_F (line 244) | TEST_F(RedisReplyBuilderTest, MessageSend) {
    function TEST_F (line 257) | TEST_F(RedisReplyBuilderTest, SimpleError) {
    function TEST_F (line 290) | TEST_F(RedisReplyBuilderTest, VeryLongError) {
    function TEST_F (line 300) | TEST_F(RedisReplyBuilderTest, ErrorBuiltInMessage) {
    function TEST_F (line 324) | TEST_F(RedisReplyBuilderTest, ErrorReplyBuiltInMessage) {
    function TEST_F (line 349) | TEST_F(RedisReplyBuilderTest, ErrorNoneBuiltInMessage) {
    function TEST_F (line 373) | TEST_F(RedisReplyBuilderTest, StringMessage) {
    function TEST_F (line 396) | TEST_F(RedisReplyBuilderTest, EmptyArray) {
    function TEST_F (line 415) | TEST_F(RedisReplyBuilderTest, StrArray) {
    function TEST_F (line 442) | TEST_F(RedisReplyBuilderTest, SendSimpleStrArr) {
    function TEST_F (line 468) | TEST_F(RedisReplyBuilderTest, SendStringViewArr) {
    function TEST_F (line 499) | TEST_F(RedisReplyBuilderTest, SendBulkStringArr) {
    function TEST_F (line 524) | TEST_F(RedisReplyBuilderTest, NullBulkString) {
    function TEST_F (line 535) | TEST_F(RedisReplyBuilderTest, EmptyBulkString) {
    function TEST_F (line 547) | TEST_F(RedisReplyBuilderTest, NoAsciiBulkString) {
    function TEST_F (line 566) | TEST_F(RedisReplyBuilderTest, BulkStringWithCRLF) {
    function TEST_F (line 580) | TEST_F(RedisReplyBuilderTest, BulkStringWithStartBulkString) {
    function TEST_F (line 594) | TEST_F(RedisReplyBuilderTest, BulkStringWithStarString) {
    function TEST_F (line 605) | TEST_F(RedisReplyBuilderTest, BulkStringWithErrorString) {
    function TEST_F (line 617) | TEST_F(RedisReplyBuilderTest, Int) {
    function TEST_F (line 633) | TEST_F(RedisReplyBuilderTest, Double) {
    function TEST_F (line 652) | TEST_F(RedisReplyBuilderTest, MixedTypeArray) {
    function TEST_F (line 706) | TEST_F(RedisReplyBuilderTest, BatchMode) {
    function TEST_F (line 749) | TEST_F(RedisReplyBuilderTest, Resp3Double) {
    function TEST_F (line 756) | TEST_F(RedisReplyBuilderTest, Resp3NullString) {
    function TEST_F (line 763) | TEST_F(RedisReplyBuilderTest, SendStringArrayAsMap) {
    function TEST_F (line 779) | TEST_F(RedisReplyBuilderTest, SendStringArrayAsSet) {
    function TEST_F (line 795) | TEST_F(RedisReplyBuilderTest, SendScoredArray) {
    function TEST_F (line 826) | TEST_F(RedisReplyBuilderTest, SendLabeledScoredArray) {
    function TEST_F (line 847) | TEST_F(RedisReplyBuilderTest, BasicCapture) {
    function TEST_F (line 916) | TEST_F(RedisReplyBuilderTest, FormatDouble) {
    function TEST_F (line 934) | TEST_F(RedisReplyBuilderTest, VerbatimString) {
    function TEST_F (line 954) | TEST_F(RedisReplyBuilderTest, Issue3449) {
    function TEST_F (line 966) | TEST_F(RedisReplyBuilderTest, Issue4424) {
    function TEST_F (line 983) | TEST_F(RedisReplyBuilderTest, MCMetaGetLargeValue) {
    function BM_FormatDouble (line 999) | static void BM_FormatDouble(benchmark::State& state) {

FILE: src/facade/reply_capture.cc
  type facade (line 16) | namespace facade {
    type CaptureVisitor (line 106) | struct CaptureVisitor {

FILE: src/facade/reply_capture.h
  function namespace (line 16) | namespace facade {

FILE: src/facade/reply_mode.h
  function namespace (line 7) | namespace facade {

FILE: src/facade/reply_payload.h
  function namespace (line 14) | namespace facade {
  function Payload (line 48) | inline Payload make_simple_or_noreply(std::string_view resp) {

FILE: src/facade/resp_expr.cc
  type facade (line 9) | namespace facade {
    function FillBackedArgs (line 11) | void FillBackedArgs(const RespVec& src, cmn::BackedArguments* dest) {

FILE: src/facade/resp_expr.h
  function namespace (line 17) | namespace facade {

FILE: src/facade/resp_expr_test_utils.cc
  type facade (line 10) | namespace facade {
    function RespExpr (line 12) | RespExpr RespExprBuilder::BuildExpr(const RESPObj& obj) {

FILE: src/facade/resp_expr_test_utils.h
  function namespace (line 14) | namespace facade {

FILE: src/facade/resp_parser.cc
  type facade (line 15) | namespace facade {
    function RESPObj (line 27) | RESPObj& RESPObj::operator=(RESPObj&& other) noexcept {

FILE: src/facade/resp_parser.h
  function namespace (line 16) | namespace facade {

FILE: src/facade/resp_parser_test.cc
  type facade (line 14) | namespace facade {
    class RESPParserTest (line 16) | class RESPParserTest : public testing::Test {
      method SetUpTestSuite (line 18) | static void SetUpTestSuite() {
    function TEST_F (line 23) | TEST_F(RESPParserTest, BaseRespTypesTest) {
    function TEST_F (line 77) | TEST_F(RESPParserTest, RESPIteratorTest) {

FILE: src/facade/resp_srv_parser.cc
  type facade (line 13) | namespace facade {

FILE: src/facade/resp_srv_parser.h
  function namespace (line 14) | namespace facade {

FILE: src/facade/resp_srv_parser_test.cc
  type facade (line 15) | namespace facade {
    function PrintTo (line 18) | void PrintTo(const RespSrvParser::Result& result, std::ostream* os) {
    class RespSrvParserTest (line 41) | class RespSrvParserTest : public testing::Test {
    function TEST_F (line 55) | TEST_F(RespSrvParserTest, Inline) {
    function TEST_F (line 88) | TEST_F(RespSrvParserTest, Multi1) {
    function TEST_F (line 103) | TEST_F(RespSrvParserTest, Multi2) {
    function TEST_F (line 121) | TEST_F(RespSrvParserTest, Multi3) {
    function TEST_F (line 133) | TEST_F(RespSrvParserTest, InvalidMult1) {
    function TEST_F (line 137) | TEST_F(RespSrvParserTest, Empty) {
    function TEST_F (line 141) | TEST_F(RespSrvParserTest, LargeBulk) {
    function TEST_F (line 177) | TEST_F(RespSrvParserTest, Eol) {
    function TEST_F (line 184) | TEST_F(RespSrvParserTest, BulkSplit) {
    function TEST_F (line 190) | TEST_F(RespSrvParserTest, InlineSplit) {
    function TEST_F (line 201) | TEST_F(RespSrvParserTest, InlineReset) {

FILE: src/facade/resp_validator.cc
  function main (line 24) | int main(int argc, char* argv[]) {

FILE: src/facade/service_interface.cc
  type facade (line 11) | namespace facade {
    function DispatchResult (line 36) | DispatchResult ServiceInterface::DispatchCommandSimple(ParsedCommand* ...

FILE: src/facade/service_interface.h
  function namespace (line 13) | namespace util {
  type class (line 25) | enum class
  function DispatchResult (line 31) | enum class DispatchResult : uint8_t {

FILE: src/facade/socket_utils.cc
  function get_socket_family (line 21) | int get_socket_family(int fd) {
  type dfly (line 34) | namespace dfly {
    function GetSocketInfo (line 37) | std::string GetSocketInfo(int socket_fd) {

FILE: src/facade/socket_utils.h
  function namespace (line 9) | namespace dfly {

FILE: src/facade/tls_helpers.cc
  type facade (line 35) | namespace facade {
    function SSL_CTX (line 41) | SSL_CTX* CreateSslCntx(TlsContextRole role) {
    function PrintSSLError (line 127) | void PrintSSLError() {

FILE: src/facade/tls_helpers.h
  function namespace (line 11) | namespace facade {

FILE: src/huff/huf.h
  type HUF_CElt (line 55) | typedef size_t HUF_CElt;
  type U32 (line 62) | typedef U32 HUF_DTable;
  type HUF_flags_e (line 78) | typedef enum {
  type HUF_repeat (line 137) | typedef enum {
  type HUF_CTableHeader (line 198) | typedef struct {

FILE: src/huff/mem.h
  type U32 (line 21) | typedef  uint32_t U32;
  type BYTE (line 22) | typedef   uint8_t BYTE;

FILE: src/redis/crc16.c
  function crc16 (line 73) | uint16_t crc16(const char* buf, int len) {

FILE: src/redis/crc64.c
  function uint_fast64_t (line 69) | static inline uint_fast64_t crc_reflect(uint_fast64_t data, size_t data_...
  function _crc64 (line 88) | uint64_t _crc64(uint_fast64_t crc, const void *in_data, const uint64_t l...
  function crc64_init (line 116) | void crc64_init(void) {
  function crc64 (line 121) | uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l) {
  function crc64Test (line 130) | int crc64Test(int argc, char *argv[], int flags) {
  function main (line 157) | int main(int argc, char *argv[]) {

FILE: src/redis/crcspeed.c
  function crcspeed64little_init (line 33) | void crcspeed64little_init(crcfn64 crcfn, uint64_t table[8][256]) {
  function crcspeed16little_init (line 52) | void crcspeed16little_init(crcfn16 crcfn, uint16_t table[8][256]) {
  function rev8 (line 71) | static inline uint64_t rev8(uint64_t a) {
  function crcspeed64big_init (line 87) | void crcspeed64big_init(crcfn64 fn, uint64_t big_table[8][256]) {
  function crcspeed16big_init (line 97) | void crcspeed16big_init(crcfn16 fn, uint16_t big_table[8][256]) {
  function crcspeed64little (line 112) | uint64_t crcspeed64little(uint64_t little_table[8][256], uint64_t crc,
  function crcspeed16little (line 146) | uint16_t crcspeed16little(uint16_t little_table[8][256], uint16_t crc,
  function crcspeed64big (line 183) | uint64_t crcspeed64big(uint64_t big_table[8][256], uint64_t crc, void *buf,
  function crcspeed16big (line 216) | uint16_t crcspeed16big(uint16_t big_table[8][256], uint16_t crc_in, void...
  function crcspeed64native (line 253) | uint64_t crcspeed64native(uint64_t table[8][256], uint64_t crc, void *buf,
  function crcspeed16native (line 261) | uint16_t crcspeed16native(uint16_t table[8][256], uint16_t crc, void *buf,
  function crcspeed64native_init (line 270) | void crcspeed64native_init(crcfn64 fn, uint64_t table[8][256]) {
  function crcspeed16native_init (line 277) | void crcspeed16native_init(crcfn16 fn, uint16_t table[8][256]) {

FILE: src/redis/debug.c
  function serverLog (line 41) | void serverLog(int level, const char *fmt, ...) {
  function _serverPanic (line 54) | void _serverPanic(const char *file, int line, const char *msg, ...) {
  function _serverAssert (line 75) | void _serverAssert(const char *estr, const char *file, int line) {

FILE: src/redis/dict.c
  function dictSetHashFunctionSeed (line 75) | void dictSetHashFunctionSeed(uint8_t *seed) {
  function dictGenHashFunction (line 89) | uint64_t dictGenHashFunction(const void *key, size_t len) {
  function dictGenCaseHashFunction (line 93) | uint64_t dictGenCaseHashFunction(const unsigned char *buf, size_t len) {
  function _dictReset (line 100) | static void _dictReset(dict *d, int htidx)
  function dict (line 108) | dict *dictCreate(dictType *type)
  function _dictInit (line 117) | int _dictInit(dict *d, dictType *type)
  function dictResize (line 129) | int dictResize(dict *d)
  function _dictExpand (line 143) | int _dictExpand(dict *d, unsigned long size, int* malloc_failed)
  function dictExpand (line 194) | int dictExpand(dict *d, unsigned long size) {
  function dictTryExpand (line 199) | int dictTryExpand(dict *d, unsigned long size) {
  function dictRehash (line 214) | int dictRehash(dict *d, int n) {
  function timeInMilliseconds (line 262) | long long timeInMilliseconds(void) {
  function dictRehashMilliseconds (line 272) | int dictRehashMilliseconds(dict *d, int ms) {
  function _dictRehashStep (line 293) | static void _dictRehashStep(dict *d) {
  function dictAdd (line 298) | int dictAdd(dict *d, void *key, void *val)
  function dictEntry (line 325) | dictEntry *dictAddRaw(dict *d, void *key, dictEntry **existing)
  function dictReplace (line 359) | int dictReplace(dict *d, void *key, void *val)
  function dictEntry (line 389) | dictEntry *dictAddOrFind(dict *d, void *key) {
  function dictEntry (line 398) | static dictEntry *dictGenericDelete(dict *d, const void *key, int nofree) {
  function dictDelete (line 436) | int dictDelete(dict *ht, const void *key) {
  function dictEntry (line 461) | dictEntry *dictUnlink(dict *d, const void *key) {
  function dictFreeUnlinkedEntry (line 467) | void dictFreeUnlinkedEntry(dict *d, dictEntry *he) {
  function _dictClear (line 475) | int _dictClear(dict *d, int htidx, void(callback)(dict*)) {
  function dictRelease (line 502) | void dictRelease(dict *d)
  function dictEntry (line 509) | dictEntry *dictFind(dict *d, const void *key)
  function dictFingerprint (line 543) | unsigned long long dictFingerprint(dict *d) {
  function dictIterator (line 575) | dictIterator *dictGetIterator(dict *d)
  function dictIterator (line 588) | dictIterator *dictGetSafeIterator(dict *d) {
  function dictEntry (line 595) | dictEntry *dictNext(dictIterator *iter)
  function dictReleaseIterator (line 628) | void dictReleaseIterator(dictIterator *iter)
  function rev (line 641) | static unsigned long rev(unsigned long v) {
  function dictScan (line 735) | unsigned long dictScan(dict *d,
  function dictTypeExpandAllowed (line 826) | static int dictTypeExpandAllowed(dict *d) {
  function _dictExpandIfNeeded (line 834) | static int _dictExpandIfNeeded(dict *d)
  function _dictNextExp (line 858) | static signed char _dictNextExp(unsigned long size)
  function _dictKeyIndex (line 877) | static long _dictKeyIndex(dict *d, const void *key, uint64_t hash, dictE...
  function dictEmpty (line 902) | void dictEmpty(dict *d, void(callback)(dict*)) {
  function dictEnableResize (line 909) | void dictEnableResize(void) {
  function dictDisableResize (line 913) | void dictDisableResize(void) {
  function dictGetHash (line 917) | uint64_t dictGetHash(dict *d, const void *key) {
  function dictEntry (line 926) | dictEntry **dictFindEntryRefByPtrAndHash(dict *d, const void *oldptr, ui...
  function _dictGetStatsHt (line 949) | size_t _dictGetStatsHt(char *buf, size_t bufsize, dict *d, int htidx) {
  function dictGetStats (line 1009) | void dictGetStats(char *buf, size_t bufsize, dict *d) {
  function hashCallback (line 1031) | uint64_t hashCallback(const void *key) {
  function compareCallback (line 1035) | int compareCallback(dict *d, const void *key1, const void *key2) {
  function freeCallback (line 1045) | void freeCallback(dict *d, void *val) {
  function dictTest (line 1080) | int dictTest(int argc, char **argv, int flags) {

FILE: src/redis/dict.h
  type dictEntry (line 49) | typedef struct dictEntry {
  type dict (line 60) | typedef struct dict dict;
  type dictType (line 62) | typedef struct dictType {
  type dict (line 75) | struct dict {
  type dictIterator (line 92) | typedef struct dictIterator {

FILE: src/redis/geo.c
  function geoArray (line 57) | geoArray *geoArrayCreate(void) {
  function geoPoint (line 67) | geoPoint *geoArrayAppend(geoArray *ga, double *xy, double dist,
  function geoArrayFree (line 85) | void geoArrayFree(geoArray *ga) {
  function decodeGeohash (line 95) | int decodeGeohash(double bits, double *xy) {
  function geoWithinShape (line 115) | int geoWithinShape(GeoShape *shape, double score, double *xy, double *di...
  function scoresOfGeoHashBox (line 135) | void scoresOfGeoHashBox(GeoHashBits hash, GeoHashFix52Bits *min, GeoHash...

FILE: src/redis/geo.h
  type geoPoint (line 9) | typedef struct geoPoint {
  type geoArray (line 17) | typedef struct geoArray {

FILE: src/redis/geohash.c
  function interleave64 (line 55) | static inline uint64_t interleave64(uint32_t xlo, uint32_t ylo) {
  function deinterleave64 (line 85) | static inline uint64_t deinterleave64(uint64_t interleaved) {
  function geohashGetCoordRange (line 115) | void geohashGetCoordRange(GeoHashRange *long_range, GeoHashRange *lat_ra...
  function geohashEncode (line 124) | int geohashEncode(const GeoHashRange *long_range, const GeoHashRange *la...
  function geohashEncodeType (line 156) | int geohashEncodeType(double longitude, double latitude, uint8_t step, G...
  function geohashEncodeWGS84 (line 162) | int geohashEncodeWGS84(double longitude, double latitude, uint8_t step,
  function geohashDecode (line 167) | int geohashDecode(const GeoHashRange long_range, const GeoHashRange lat_...
  function geohashDecodeType (line 199) | int geohashDecodeType(const GeoHashBits hash, GeoHashArea *area) {
  function geohashDecodeWGS84 (line 205) | int geohashDecodeWGS84(const GeoHashBits hash, GeoHashArea *area) {
  function geohashDecodeAreaToLongLat (line 209) | int geohashDecodeAreaToLongLat(const GeoHashArea *area, double *xy) {
  function geohashDecodeToLongLatType (line 220) | int geohashDecodeToLongLatType(const GeoHashBits hash, double *xy) {
  function geohashDecodeToLongLatWGS84 (line 229) | int geohashDecodeToLongLatWGS84(const GeoHashBits hash, double *xy) {
  function geohash_move_x (line 233) | static void geohash_move_x(GeoHashBits *hash, int8_t d) {
  function geohash_move_y (line 253) | static void geohash_move_y(GeoHashBits *hash, int8_t d) {
  function geohashNeighbors (line 271) | void geohashNeighbors(const GeoHashBits *hash, GeoHashNeighbors *neighbo...

FILE: src/redis/geohash.h
  type GeoDirection (line 54) | typedef enum {
  type GeoHashBits (line 65) | typedef struct {
  type GeoHashRange (line 70) | typedef struct {
  type GeoHashArea (line 75) | typedef struct {
  type GeoHashNeighbors (line 81) | typedef struct {
  type GeoShape (line 94) | typedef struct {

FILE: src/redis/geohash_helper.c
  function deg_rad (line 57) | static inline double deg_rad(double ang) { return ang * D_R; }
  function rad_deg (line 58) | static inline double rad_deg(double ang) { return ang / D_R; }
  function geohashEstimateStepsByRadius (line 62) | uint8_t geohashEstimateStepsByRadius(double range_meters, double lat) {
  function geohashBoundingBox (line 98) | int geohashBoundingBox(GeoShape *shape, double *bounds) {
  function GeoHashRadius (line 121) | GeoHashRadius geohashCalculateAreasByShapeWGS84(GeoShape *shape) {
  function GeoHashFix52Bits (line 213) | GeoHashFix52Bits geohashAlign52Bits(const GeoHashBits hash) {
  function geohashGetLatDistance (line 224) | double geohashGetLatDistance(double lat1d, double lat2d) {
  function geohashGetDistance (line 229) | double geohashGetDistance(double lon1d, double lat1d, double lon2d, doub...
  function geohashGetDistanceIfInRadius (line 244) | int geohashGetDistanceIfInRadius(double x1, double y1,
  function geohashGetDistanceIfInRadiusWGS84 (line 252) | int geohashGetDistanceIfInRadiusWGS84(double x1, double y1, double x2,
  function geohashGetDistanceIfInRectangle (line 266) | int geohashGetDistanceIfInRectangle(double width_m, double height_m, dou...

FILE: src/redis/geohash_helper.h
  type GeoHashFix52Bits (line 41) | typedef uint64_t GeoHashFix52Bits;
  type GeoHashVarBits (line 42) | typedef uint64_t GeoHashVarBits;
  type GeoHashRadius (line 44) | typedef struct {

FILE: src/redis/hiredis.c
  function redisReply (line 65) | static redisReply *createReplyObject(int type) {
  function freeReplyObject (line 76) | void freeReplyObject(void *reply) {
  function countDigits (line 306) | static uint32_t countDigits(uint64_t v) {
  function bulklen (line 319) | static size_t bulklen(size_t len) {
  function redisvFormatCommand (line 323) | int redisvFormatCommand(char **target, const char *format, va_list ap) {
  function redisFormatCommand (line 572) | int redisFormatCommand(char **target, const char *format, ...) {
  function redisFormatSdsCommandArgv (line 593) | long long redisFormatSdsCommandArgv(sds *target, int argc, const char **...
  function redisFreeSdsCommand (line 640) | void redisFreeSdsCommand(sds cmd) {
  function redisFormatCommandArgv (line 649) | long long redisFormatCommandArgv(char **target, int argc, const char **a...
  function redisFreeCommand (line 687) | void redisFreeCommand(char *cmd) {
  function redisReader (line 691) | redisReader *redisReaderCreate(void) {

FILE: src/redis/hiredis.h
  type timeval (line 41) | struct timeval
  type redisAsyncContext (line 107) | struct redisAsyncContext
  type redisContext (line 108) | struct redisContext
  type redisAsyncContext (line 113) | struct redisAsyncContext
  type redisReply (line 120) | typedef struct redisReply {

FILE: src/redis/hyperloglog.c
  type hllhdr (line 188) | struct hllhdr {
  function MurmurHash64A (line 406) | uint64_t MurmurHash64A(const void* key, int len, unsigned int seed) {
  function hllPatLen (line 468) | int hllPatLen(unsigned char* ele, size_t elesize, long* regp) {
  function hllDenseSet (line 510) | int hllDenseSet(uint8_t* registers, long index, uint8_t count) {
  function hllDenseAdd (line 528) | int hllDenseAdd(uint8_t* registers, unsigned char* ele, size_t elesize) {
  function hllDenseRegHisto (line 536) | void hllDenseRegHisto(uint8_t* registers, int* reghisto) {
  function hllSparseToDense (line 601) | int hllSparseToDense(sds* hll_ptr) {
  function hllSparseSet (line 671) | int hllSparseSet(sds* hll_ptr, long index, uint8_t count, int* promoted) {
  function hllSparseAdd (line 935) | int hllSparseAdd(sds* hll_ptr, unsigned char *ele, size_t elesize, int* ...
  function hllSparseRegHisto (line 942) | void hllSparseRegHisto(uint8_t* sparse, int sparselen, int* invalid, int...
  function hllRawRegHisto (line 977) | void hllRawRegHisto(uint8_t* registers, int* reghisto) {
  function hllSigma (line 1003) | double hllSigma(double x) {
  function hllTau (line 1021) | double hllTau(double x) {
  function hllCount (line 1047) | uint64_t hllCount(struct hllhdr* hdr, int* invalid) {
  function hllMerge (line 1092) | int hllMerge(uint8_t* max, robj* hll) {
  function robj (line 1139) | robj* createHLLObject(void) {
  function isValidHLL (line 1175) | enum HllValidness isValidHLL(struct HllBufferPtr hll_buffer) {
  function getDenseHllSize (line 1205) | size_t getDenseHllSize() {
  function getSparseHllInitSize (line 1209) | size_t getSparseHllInitSize() {
  function initSparseHll (line 1214) | int initSparseHll(struct HllBufferPtr hll_ptr) {
  function createDenseHll (line 1240) | int createDenseHll(struct HllBufferPtr hll_ptr) {
  function convertSparseToDenseHll (line 1253) | int convertSparseToDenseHll(struct HllBufferPtr in_hll, struct HllBuffer...
  function pfadd_sparse (line 1304) | int pfadd_sparse(sds* hll_ptr, const unsigned char* value,
  function pfadd_dense (line 1317) | int pfadd_dense(struct HllBufferPtr hll_ptr, const unsigned char* value,
  function pfcountSingle (line 1335) | int64_t pfcountSingle(struct HllBufferPtr hll_ptr) {
  function hllMergeDense (line 1373) | static void hllMergeDense(uint8_t* registers, struct HllBufferPtr to) {
  function pfcountMulti (line 1385) | int64_t pfcountMulti(struct HllBufferPtr* hlls, size_t hlls_count) {
  function pfmerge (line 1407) | int pfmerge(struct HllBufferPtr* in_hlls, size_t in_hlls_count, struct H...

FILE: src/redis/hyperloglog.h
  type HllValidness (line 14) | enum HllValidness {
  type HllBufferPtr (line 21) | struct HllBufferPtr {
  type HllValidness (line 26) | enum HllValidness
  type HllBufferPtr (line 26) | struct HllBufferPtr
  type HllBufferPtr (line 32) | struct HllBufferPtr
  type HllBufferPtr (line 36) | struct HllBufferPtr
  type HllBufferPtr (line 43) | struct HllBufferPtr
  type HllBufferPtr (line 43) | struct HllBufferPtr
  type HllBufferPtr (line 48) | struct HllBufferPtr
  type HllBufferPtr (line 52) | struct HllBufferPtr
  type HllBufferPtr (line 56) | struct HllBufferPtr
  type HllBufferPtr (line 62) | struct HllBufferPtr
  type HllBufferPtr (line 62) | struct HllBufferPtr

FILE: src/redis/intset.c
  function _intsetValueEncoding (line 46) | static uint8_t _intsetValueEncoding(int64_t v) {
  function _intsetGetEncoded (line 56) | static int64_t _intsetGetEncoded(intset *is, int pos, uint8_t enc) {
  function _intsetGet (line 77) | static int64_t _intsetGet(intset *is, int pos) {
  function _intsetSet (line 82) | static void _intsetSet(intset *is, int pos, int64_t value) {
  function intset (line 98) | intset *intsetNew(void) {
  function intset (line 106) | static intset *intsetResize(intset *is, uint32_t len) {
  function intsetSearch (line 117) | static uint8_t intsetSearch(intset *is, int64_t value, uint32_t *pos) {
  function intset (line 159) | static intset *intsetUpgradeAndAdd(intset *is, int64_t value) {
  function intsetMoveTail (line 184) | static void intsetMoveTail(intset *is, uint32_t from, uint32_t to) {
  function intset (line 206) | intset *intsetAdd(intset *is, int64_t value, uint8_t *success) {
  function intset (line 236) | intset *intsetRemove(intset *is, int64_t value, int *success) {
  function intset (line 255) | intset *intsetTrimTail(intset *is, uint32_t tail_len) {
  function intsetFind (line 263) | uint8_t intsetFind(intset *is, int64_t value) {
  function intsetRandom (line 269) | int64_t intsetRandom(intset *is) {
  function intsetGet (line 277) | uint8_t intsetGet(intset *is, uint32_t pos, int64_t *value) {
  function intsetLen (line 286) | uint32_t intsetLen(const intset *is) {
  function intsetBlobLen (line 291) | size_t intsetBlobLen(intset *is) {
  function intsetValidateIntegrity (line 298) | int intsetValidateIntegrity(const unsigned char *p, size_t size, int dee...
  function intsetRepr (line 346) | static void intsetRepr(intset *is) {
  function error (line 353) | static void error(char *err) {
  function ok (line 359) | static void ok(void) {
  function usec (line 363) | static long long usec(void) {
  function intset (line 369) | static intset *createSet(int bits, int size) {
  function checkConsistency (line 385) | static void checkConsistency(intset *is) {
  function intsetTest (line 403) | int intsetTest(int argc, char **argv, int flags) {

FILE: src/redis/intset.h
  type intset (line 35) | typedef struct intset {

FILE: src/redis/listpack.c
  function lpSetTotalBytesChecked (line 117) | static void lpSetTotalBytesChecked(unsigned char *p, uint32_t v) {
  function lpSafeToAdd (line 163) | int lpSafeToAdd(unsigned char* lp, size_t add) {
  function lpStringToInt64 (line 193) | int lpStringToInt64(const char *s, unsigned long slen, int64_t *value) {
  function lpFree (line 269) | void lpFree(unsigned char *lp) {
  function lpEncodeIntegerGetType (line 284) | static inline void lpEncodeIntegerGetType(int64_t v, unsigned char *inte...
  function lpEncodeGetType (line 346) | static inline int lpEncodeGetType(const unsigned char *ele, uint32_t siz...
  function lpEncodeBacklen (line 367) | static inline unsigned long lpEncodeBacklen(unsigned char *buf, uint64_t...
  function lpDecodeBacklen (line 406) | static inline uint64_t lpDecodeBacklen(unsigned char *p) {
  function lpEncodeString (line 423) | static inline void lpEncodeString(unsigned char *buf, const unsigned cha...
  function lpCurrentEncodedSizeUnsafe (line 448) | static inline uint32_t lpCurrentEncodedSizeUnsafe(unsigned char *p) {
  function lpCurrentEncodedSizeBytes (line 466) | static inline uint32_t lpCurrentEncodedSizeBytes(unsigned char *p) {
  function lpLength (line 537) | unsigned long lpLength(unsigned char *lp) {
  function lpGetInteger (line 671) | int lpGetInteger(unsigned char *p, int64_t *ival) {
  function lpBytes (line 1221) | size_t lpBytes(unsigned char *lp) {
  function lpValidateNext (line 1284) | int lpValidateNext(unsigned char *lp, unsigned char **pp, size_t lpbytes) {
  function lpAssertValidEntry (line 1325) | static inline void lpAssertValidEntry(unsigned char* lp, size_t lpbytes,...
  function lpValidateIntegrity (line 1332) | int lpValidateIntegrity(unsigned char *lp, size_t size, int deep, listpa...
  function lpCompare (line 1373) | unsigned int lpCompare(unsigned char *p, const unsigned char *s, uint32_...
  function uintCompare (line 1393) | static int uintCompare(const void *a, const void *b) {
  function lpSaveValue (line 1398) | static inline void lpSaveValue(unsigned char *val, unsigned int len, int...
  function lpRandomPair (line 1408) | void lpRandomPair(unsigned char *lp, unsigned long total_count, listpack...
  function lpRandomPairs (line 1431) | void lpRandomPairs(unsigned char *lp, unsigned int count, listpackEntry ...
  function lpRandomPairsUnique (line 1484) | unsigned int lpRandomPairsUnique(unsigned char *lp, unsigned int count, ...
  function lpRepr (line 1523) | void lpRepr(unsigned char *lp) {
  function usec (line 1601) | static long long usec(void) {
  function stress (line 1607) | static void stress(int pos, int num, int maxsize, int dnum) {
  function randstring (line 1656) | static int randstring(char *target, unsigned int min, unsigned int max) {
  function verifyEntry (line 1682) | static void verifyEntry(unsigned char *p, unsigned char *s, size_t slen) {
  function lpValidation (line 1686) | static int lpValidation(unsigned char *p, unsigned int head_count, void ...
  function listpackTest (line 1697) | int listpackTest(int argc, char *argv[], int flags) {

FILE: src/redis/listpack.h
  type listpackEntry (line 49) | typedef struct {

FILE: src/redis/lua/bit/bit.c
  type __int32 (line 37) | typedef __int32 int32_t;
  type SBits (line 44) | typedef int32_t SBits;
  type UBits (line 45) | typedef uint32_t UBits;
  type BitNum (line 47) | typedef union {
  function UBits (line 57) | static UBits barg(lua_State *L, int idx)
  function bit_tobit (line 101) | static int bit_tobit(lua_State *L) { BRET(barg(L, 1)) }
  function bit_bnot (line 102) | static int bit_bnot(lua_State *L) { BRET(~barg(L, 1)) }
  function bit_bswap (line 125) | static int bit_bswap(lua_State *L)
  function bit_tohex (line 132) | static int bit_tohex(lua_State *L)
  type luaL_Reg (line 147) | struct luaL_Reg
  function LUALIB_API (line 169) | LUALIB_API int luaopen_bit(lua_State *L)

FILE: src/redis/lua/cjson/fpconv.c
  function fpconv_update_locale (line 52) | static void fpconv_update_locale()
  function valid_number_character (line 75) | static inline int valid_number_character(char ch)
  function strtod_buffer_size (line 94) | static int strtod_buffer_size(const char *s)
  function fpconv_strtod (line 106) | double fpconv_strtod(const char *nptr, char **endptr)
  function set_number_format (line 153) | static void set_number_format(char *fmt, int precision)
  function fpconv_g_fmt (line 174) | int fpconv_g_fmt(char *str, double num, int precision)
  function fpconv_init (line 199) | void fpconv_init()

FILE: src/redis/lua/cjson/fpconv.h
  function fpconv_init (line 10) | static inline void fpconv_init()

FILE: src/redis/lua/cjson/lua_cjson.c
  type json_token_type_t (line 77) | typedef enum {
  type json_config_t (line 112) | typedef struct {
  type json_parse_t (line 132) | typedef struct {
  type json_token_t (line 140) | typedef struct {
  function json_config_t (line 192) | static json_config_t *json_fetch_config(lua_State *l)
  function json_config_t (line 206) | static json_config_t *json_arg_init(lua_State *l, int args)
  function json_integer_option (line 218) | static int json_integer_option(lua_State *l, int optindex, int *setting,
  function json_enum_option (line 237) | static int json_enum_option(lua_State *l, int optindex, int *setting,
  function json_cfg_encode_sparse_array (line 266) | static int json_cfg_encode_sparse_array(lua_State *l)
  function json_cfg_encode_max_depth (line 279) | static int json_cfg_encode_max_depth(lua_State *l)
  function json_cfg_decode_max_depth (line 288) | static int json_cfg_decode_max_depth(lua_State *l)
  function json_cfg_encode_number_precision (line 296) | static int json_cfg_encode_number_precision(lua_State *l)
  function json_cfg_encode_keep_buffer (line 304) | static int json_cfg_encode_keep_buffer(lua_State *l)
  function json_verify_invalid_number_setting (line 325) | void json_verify_invalid_number_setting(lua_State *l, int *setting)
  function json_cfg_encode_invalid_numbers (line 336) | static int json_cfg_encode_invalid_numbers(lua_State *l)
  function json_cfg_decode_invalid_numbers (line 348) | static int json_cfg_decode_invalid_numbers(lua_State *l)
  function json_destroy_config (line 359) | static int json_destroy_config(lua_State *l)
  function json_create_config (line 371) | static void json_create_config(lua_State *l)
  function json_encode_exception (line 446) | static void json_encode_exception(lua_State *l, json_config_t *cfg, strb...
  function json_append_string (line 461) | static void json_append_string(lua_State *l, strbuf_t *json, int lindex)
  function lua_array_length (line 491) | static int lua_array_length(lua_State *l, json_config_t *cfg, strbuf_t *...
  function json_check_encode_depth (line 534) | static void json_check_encode_depth(lua_State *l, json_config_t *cfg,
  function json_append_array (line 564) | static void json_append_array(lua_State *l, json_config_t *cfg, int curr...
  function json_append_number (line 586) | static void json_append_number(lua_State *l, json_config_t *cfg,
  function json_append_object (line 616) | static void json_append_object(lua_State *l, json_config_t *cfg,
  function json_append_data (line 658) | static void json_append_data(lua_State *l, json_config_t *cfg,
  function json_encode (line 701) | static int json_encode(lua_State *l)
  function hexdigit2int (line 737) | static int hexdigit2int(char hex)
  function decode_hex4 (line 750) | static int decode_hex4(const char *hex)
  function codepoint_to_utf8 (line 773) | static int codepoint_to_utf8(char *utf8, int codepoint)
  function json_append_unicode_escape (line 817) | static int json_append_unicode_escape(json_parse_t *json)
  function json_set_token_error (line 875) | static void json_set_token_error(json_token_t *token, json_parse_t *json,
  function json_next_string_token (line 883) | static void json_next_string_token(json_parse_t *json, json_token_t *token)
  function json_is_invalid_number (line 958) | static int json_is_invalid_number(json_parse_t *json)
  function json_next_number_token (line 994) | static void json_next_number_token(json_parse_t *json, json_token_t *token)
  function json_next_token (line 1012) | static void json_next_token(json_parse_t *json, json_token_t *token)
  function json_throw_parse_error (line 1097) | static void json_throw_parse_error(lua_State *l, json_parse_t *json,
  function json_decode_ascend (line 1114) | static inline void json_decode_ascend(json_parse_t *json)
  function json_decode_descend (line 1119) | static void json_decode_descend(lua_State *l, json_parse_t *json, int sl...
  function json_parse_object_context (line 1133) | static void json_parse_object_context(lua_State *l, json_parse_t *json)
  function json_parse_array_context (line 1184) | static void json_parse_array_context(lua_State *l, json_parse_t *json)
  function json_process_value (line 1222) | static void json_process_value(lua_State *l, json_parse_t *json,
  function json_decode (line 1261) | static int json_decode(lua_State *l)
  function luaL_setfuncs (line 1308) | static void luaL_setfuncs (lua_State *l, const luaL_Reg *reg, int nup)
  function json_protect_conversion (line 1326) | static int json_protect_conversion(lua_State *l)
  function lua_cjson_new (line 1352) | static int lua_cjson_new(lua_State *l)
  function lua_cjson_safe_new (line 1392) | static int lua_cjson_safe_new(lua_State *l)
  function luaopen_cjson (line 1412) | int luaopen_cjson(lua_State *l)
  function luaopen_cjson_safe (line 1423) | int luaopen_cjson_safe(lua_State *l)

FILE: src/redis/lua/cjson/strbuf.c
  function die (line 32) | static void die(const char *fmt, ...)
  function strbuf_init (line 44) | void strbuf_init(strbuf_t *s, int len)
  function strbuf_t (line 68) | strbuf_t *strbuf_new(int len)
  function strbuf_set_increment (line 84) | void strbuf_set_increment(strbuf_t *s, int increment)
  function debug_stats (line 94) | static inline void debug_stats(strbuf_t *s)
  function strbuf_free (line 104) | void strbuf_free(strbuf_t *s)
  function calculate_new_size (line 134) | static int calculate_new_size(strbuf_t *s, int len)
  function strbuf_resize (line 164) | void strbuf_resize(strbuf_t *s, int len)
  function strbuf_append_string (line 182) | void strbuf_append_string(strbuf_t *s, const char *str)
  function strbuf_append_fmt (line 202) | void strbuf_append_fmt(strbuf_t *s, int len, const char *fmt, ...)
  function strbuf_append_fmt_retry (line 221) | void strbuf_append_fmt_retry(strbuf_t *s, const char *fmt, ...)

FILE: src/redis/lua/cjson/strbuf.h
  type strbuf_t (line 34) | typedef struct {
  function strbuf_reset (line 78) | static inline void strbuf_reset(strbuf_t *s)
  function strbuf_allocated (line 83) | static inline int strbuf_allocated(strbuf_t *s)
  function strbuf_empty_length (line 90) | static inline int strbuf_empty_length(strbuf_t *s)
  function strbuf_ensure_empty_length (line 95) | static inline void strbuf_ensure_empty_length(strbuf_t *s, int len)
  function strbuf_extend_length (line 106) | static inline void strbuf_extend_length(strbuf_t *s, int len)
  function strbuf_length (line 111) | static inline int strbuf_length(strbuf_t *s)
  function strbuf_append_char (line 116) | static inline void strbuf_append_char(strbuf_t *s, const char c)
  function strbuf_append_char_unsafe (line 122) | static inline void strbuf_append_char_unsafe(strbuf_t *s, const char c)
  function strbuf_append_mem (line 127) | static inline void strbuf_append_mem(strbuf_t *s, const char *c, int len)
  function strbuf_append_mem_unsafe (line 134) | static inline void strbuf_append_mem_unsafe(strbuf_t *s, const char *c, ...
  function strbuf_ensure_null (line 140) | static inline void strbuf_ensure_null(strbuf_t *s)

FILE: src/redis/lua/cmsgpack/lua_cmsgpack.c
  function memrevifle (line 69) | void memrevifle(void *ptr, size_t len) {
  type mp_buf (line 93) | typedef struct mp_buf {
  function mp_buf (line 107) | mp_buf *mp_buf_new(lua_State *L) {
  function mp_buf_append (line 118) | void mp_buf_append(lua_State *L, mp_buf *buf, const unsigned char *s, si...
  function mp_buf_free (line 130) | void mp_buf_free(lua_State *L, mp_buf *buf) {
  type mp_cur (line 148) | typedef struct mp_cur {
  function mp_cur_init (line 154) | void mp_cur_init(mp_cur *cursor, const unsigned char *s, size_t len) {
  function mp_encode_bytes (line 174) | void mp_encode_bytes(lua_State *L, mp_buf *buf, const unsigned char *s, ...
  function mp_encode_double (line 203) | void mp_encode_double(lua_State *L, mp_buf *buf, double d) {
  function mp_encode_int (line 221) | void mp_encode_int(lua_State *L, mp_buf *buf, int64_t n) {
  function mp_encode_array (line 293) | void mp_encode_array(lua_State *L, mp_buf *buf, int64_t n) {
  function mp_encode_map (line 316) | void mp_encode_map(lua_State *L, mp_buf *buf, int64_t n) {
  function mp_encode_lua_string (line 341) | void mp_encode_lua_string(lua_State *L, mp_buf *buf) {
  function mp_encode_lua_bool (line 349) | void mp_encode_lua_bool(lua_State *L, mp_buf *buf) {
  function mp_encode_lua_integer (line 355) | void mp_encode_lua_integer(lua_State *L, mp_buf *buf) {
  function mp_encode_lua_number (line 367) | void mp_encode_lua_number(lua_State *L, mp_buf *buf) {
  function mp_encode_lua_table_as_array (line 380) | void mp_encode_lua_table_as_array(lua_State *L, mp_buf *buf, int level) {
  function mp_encode_lua_table_as_map (line 397) | void mp_encode_lua_table_as_map(lua_State *L, mp_buf *buf, int level) {
  function table_is_an_array (line 425) | int table_is_an_array(lua_State *L) {
  function mp_encode_lua_table (line 468) | void mp_encode_lua_table(lua_State *L, mp_buf *buf, int level) {
  function mp_encode_lua_null (line 475) | void mp_encode_lua_null(lua_State *L, mp_buf *buf) {
  function mp_encode_lua_type (line 482) | void mp_encode_lua_type(lua_State *L, mp_buf *buf, int level) {
  function mp_pack (line 512) | int mp_pack(lua_State *L) {
  function mp_decode_to_lua_array (line 551) | void mp_decode_to_lua_array(lua_State *L, mp_cur *c, size_t len) {
  function mp_decode_to_lua_hash (line 565) | void mp_decode_to_lua_hash(lua_State *L, mp_cur *c, size_t len) {
  type luaL_Reg (line 892) | struct luaL_Reg

FILE: src/redis/lua/struct/lua_struct.c
  type STRUCT_INT (line 45) | typedef STRUCT_INT Inttype;
  type Uinttype (line 48) | typedef unsigned STRUCT_INT Uinttype;
  type cD (line 58) | struct cD {
  type Header (line 79) | typedef struct Header {
  function getnum (line 85) | static int getnum (lua_State *L, const char **fmt, int df) {
  function optsize (line 103) | static size_t optsize (lua_State *L, char opt, const char **fmt) {
  function gettoalign (line 129) | static int gettoalign (size_t len, Header *h, int opt, size_t size) {
  function controloptions (line 140) | static void controloptions (lua_State *L, int opt, const char **fmt,
  function putinteger (line 161) | static void putinteger (lua_State *L, luaL_Buffer *b, int arg, int endian,
  function correctbytes (line 188) | static void correctbytes (char *b, int size, int endian) {
  function b_pack (line 200) | static int b_pack (lua_State *L) {
  function lua_Number (line 258) | static lua_Number getinteger (const char *buff, int endian,
  function b_unpack (line 285) | static int b_unpack (lua_State *L) {
  function b_size (line 358) | static int b_size (lua_State *L) {
  type luaL_Reg (line 383) | struct luaL_Reg
  function LUALIB_API (line 393) | LUALIB_API int luaopen_struct (lua_State *L) {

FILE: src/redis/lzfP.h
  type u8 (line 164) | typedef unsigned char u8;
  type LZF_HSLOT (line 168) | typedef unsigned int LZF_HSLOT;
  type u8 (line 171) | typedef const u8 *LZF_HSLOT;
  type LZF_HSLOT (line 174) | typedef LZF_HSLOT LZF_STATE[1 << (HLOG)];
  type u16 (line 184) | typedef unsigned short u16;
  type u16 (line 186) | typedef unsigned int u16;

FILE: src/redis/lzf_c.c
  function lzf_compress (line 108) | size_t

FILE: src/redis/lzf_d.c
  function lzf_decompress (line 59) | size_t

FILE: src/redis/rax.c
  function raxSetDebugMsg (line 77) | void raxSetDebugMsg(int onoff) {
  function raxStackInit (line 90) | static inline void raxStackInit(raxStack *ts) {
  function raxStackPush (line 98) | static inline int raxStackPush(raxStack *ts, void *ptr) {
  function raxStackFree (line 141) | static inline void raxStackFree(raxStack *ts) {
  function raxNode (line 176) | raxNode *raxNewNode(size_t children, int datafield) {
  function rax (line 190) | rax *raxNew(void) {
  function raxNode (line 207) | raxNode *raxReallocForData(raxNode *n, void *data) {
  function raxSetData (line 214) | void raxSetData(raxNode *n, void *data) {
  function raxNode (line 243) | raxNode *raxAddChild(raxNode *n, unsigned char c, raxNode **childptr, ra...
  function raxNode (line 382) | raxNode *raxCompressNode(raxNode *n, unsigned char *s, size_t len, raxNo...
  function raxLowWalk (line 444) | static inline size_t
  function raxGenericInsert (line 495) | int raxGenericInsert(rax *rax, unsigned char *s, size_t len, void *data,...
  function raxInsert (line 896) | int raxInsert(rax *rax, unsigned char *s, size_t len, void *data, void *...
  function raxTryInsert (line 903) | int raxTryInsert(rax *rax, unsigned char *s, size_t len, void *data, voi...
  function raxFind (line 910) | int raxFind(rax *rax, unsigned char *s, size_t len, void **value) {
  function raxNode (line 926) | raxNode **raxFindParentLink(raxNode *parent, raxNode *child) {
  function raxNode (line 941) | raxNode *raxRemoveChild(raxNode *parent, raxNode *child) {
  function raxRemove (line 1013) | int raxRemove(rax *rax, unsigned char *s, size_t len, void **old) {
  function raxRecursiveFree (line 1217) | void raxRecursiveFree(rax *rax, raxNode *n, void (*free_callback)(void*,...
  function raxFreeWithCallbackAndArgument (line 1235) | void raxFreeWithCallbackAndArgument(rax *rax, void (*free_callback)(void...
  function freeCallbackWrapper (line 1242) | void freeCallbackWrapper(void* data, void* argument) {
  function raxFreeWithCallback (line 1252) | void raxFreeWithCallback(rax *rax, void (*free_callback)(void*)) {
  function raxFree (line 1257) | void raxFree(rax *rax) {
  function raxStart (line 1266) | void raxStart(raxIterator *it, rax *rt) {
  function raxIteratorAddChars (line 1280) | int raxIteratorAddChars(raxIterator *it, unsigned char *s, size_t len) {
  function raxIteratorDelChars (line 1303) | void raxIteratorDelChars(raxIterator *it, size_t count) {
  function raxIteratorNextStep (line 1321) | int raxIteratorNextStep(raxIterator *it, int noup) {
  function raxSeekGreatest (line 1419) | int raxSeekGreatest(raxIterator *it) {
  function raxIteratorPrevStep (line 1436) | int raxIteratorPrevStep(raxIterator *it, int noup) {
  function raxSeek (line 1513) | int raxSeek(raxIterator *it, const char *op, unsigned char *ele, size_t ...
  function raxNext (line 1669) | int raxNext(raxIterator *it) {
  function raxPrev (line 1684) | int raxPrev(raxIterator *it) {
  function raxRandomWalk (line 1708) | int raxRandomWalk(raxIterator *it, size_t steps) {
  function raxCompare (line 1751) | int raxCompare(raxIterator *iter, const char *op, unsigned char *key, si...
  function raxStop (line 1787) | void raxStop(raxIterator *it) {
  function raxEOF (line 1796) | int raxEOF(raxIterator *it) {
  function raxSize (line 1801) | uint64_t raxSize(rax *rax) {
  function raxAllocSize (line 1806) | size_t raxAllocSize(rax *rax) {
  function raxRecursiveShow (line 1838) | void raxRecursiveShow(int level, int lpad, raxNode *n) {
  function raxShow (line 1872) | void raxShow(rax *rax) {
  function raxDebugShowNode (line 1878) | void raxDebugShowNode(const char *msg, raxNode *n) {
  function raxTouch (line 1910) | unsigned long raxTouch(raxNode *n) {
  function checkedRaxRemove (line 1934) | int checkedRaxRemove(rax *rax, unsigned char *s, size_t len, void **old) {

FILE: src/redis/rax.h
  type raxNode (line 98) | typedef struct raxNode {
  type rax (line 133) | typedef struct rax {
  type raxStack (line 144) | typedef struct raxStack {
  type raxIterator (line 176) | typedef struct raxIterator {

FILE: src/redis/read.c
  function __redisReaderSetError (line 52) | static void __redisReaderSetError(redisReader *r, int type, const char *...
  function chrtos (line 76) | static size_t chrtos(char *buf, size_t size, char byte) {
  function __redisReaderSetErrorProtocolByte (line 100) | static void __redisReaderSetErrorProtocolByte(redisReader *r, char byte) {
  function __redisReaderSetErrorOOM (line 109) | static void __redisReaderSetErrorOOM(redisReader *r) {
  function string2ll (line 161) | static int string2ll(const char *s, size_t slen, long long *value) {
  function moveToNextTask (line 239) | static void moveToNextTask(redisReader *r) {
  function processLineItem (line 268) | static int processLineItem(redisReader *r) {
  function processBulkItem (line 397) | static int processBulkItem(redisReader *r) {
  function redisReaderGrow (line 469) | static int redisReaderGrow(redisReader *r) {
  function processAggregateItem (line 495) | static int processAggregateItem(redisReader *r) {
  function processItem (line 573) | static int processItem(redisReader *r) {
  function redisReader (line 658) | redisReader *redisReaderCreateWithFunctions(redisReplyObjectFunctions *f...
  function redisReaderFree (line 690) | void redisReaderFree(redisReader *r) {
  function redisReaderFeed (line 710) | int redisReaderFeed(redisReader *r, const char *buf, size_t len) {
  function redisReaderGetReply (line 741) | int redisReaderGetReply(redisReader *r, void **reply) {

FILE: src/redis/read.h
  type redisReadTask (line 76) | typedef struct redisReadTask {
  type redisReplyObjectFunctions (line 85) | typedef struct redisReplyObjectFunctions {
  type redisReader (line 95) | typedef struct redisReader {

FILE: src/redis/redis_aux.c
  function InitRedisTables (line 12) | void InitRedisTables() {
  function memrev64 (line 24) | void memrev64(void* p) {
  function intrev64 (line 42) | uint64_t intrev64(uint64_t v) {

FILE: src/redis/redis_aux.h
  type Server (line 22) | typedef struct ServerStub {

FILE: src/redis/sds.c
  function sdsHdrSize (line 44) | static inline int sdsHdrSize(char type) {
  function sdsReqType (line 60) | static inline char sdsReqType(size_t string_size) {
  function sdsTypeMaxSize (line 76) | static inline size_t sdsTypeMaxSize(char type) {
  function sds (line 103) | sds _sdsnewlen(const void *init, size_t initlen, int trymalloc) {
  function sds (line 168) | sds sdsnewlen(const void *init, size_t initlen) {
  function sds (line 174) | sds sdsempty(void) {
  function sds (line 179) | sds sdsnew(const char *init) {
  function sds (line 185) | sds sdsdup(const sds s) {
  function sdsfree (line 190) | void sdsfree(sds s) {
  function sdsupdatelen (line 209) | void sdsupdatelen(sds s) {
  function sdsclear (line 218) | void sdsclear(sds s) {
  function sds (line 235) | sds _sdsMakeRoomFor(sds s, size_t addlen, int greedy) {
  function sds (line 291) | sds sdsMakeRoomFor(sds s, size_t addlen) {
  function sds (line 296) | sds sdsMakeRoomForNonGreedy(sds s, size_t addlen) {
  function sds (line 306) | sds sdsRemoveFreeSpace(sds s) {
  function sds (line 345) | sds sdsResize(sds s, size_t size) {
  function sdsAllocSize (line 395) | size_t sdsAllocSize(sds s) {
  function sdsIncrLen (line 429) | void sdsIncrLen(sds s, ssize_t incr) {
  function sds (line 475) | sds sdsgrowzero(sds s, size_t len) {
  function sds (line 493) | sds sdscatlen(sds s, const void *t, size_t len) {
  function sds (line 508) | sds sdscat(sds s, const char *t) {
  function sds (line 516) | sds sdscatsds(sds s, const sds t) {
  function sds (line 522) | sds sdscpylen(sds s, const char *t, size_t len) {
  function sds (line 535) | sds sdscpy(sds s, const char *t) {
  function sdsll2str (line 546) | int sdsll2str(char *s, long long value) {
  function sdsull2str (line 588) | int sdsull2str(char *s, unsigned long long v) {
  function sds (line 620) | sds sdsfromlonglong(long long value) {
  function sds (line 628) | sds sdscatvprintf(sds s, const char *fmt, va_list ap) {
  function sds (line 685) | sds sdscatprintf(sds s, const char *fmt, ...) {
  function sds (line 710) | sds sdscatfmt(sds s, char const *fmt, ...) {
  function sds (line 819) | sds sdstrim(sds s, const char *cset) {
  function sdssubstr (line 837) | void sdssubstr(sds s, size_t start, size_t len) {
  function sdsrange (line 869) | int sdsrange(sds s, ssize_t start, ssize_t end) {
  function sdstolower (line 900) | void sdstolower(sds s) {
  function sdstoupper (line 907) | void sdstoupper(sds s) {
  function sdscmp (line 924) | int sdscmp(const sds s1, const sds s2) {
  function sds (line 952) | sds *sdssplitlen(const char *s, ssize_t len, const char *sep, int seplen...
  function sdsfreesplitres (line 1001) | void sdsfreesplitres(sds *tokens, int count) {
  function sds (line 1014) | sds sdscatrepr(sds s, const char *p, size_t len) {
  function is_hex_digit (line 1041) | int is_hex_digit(char c) {
  function hex_digit_to_int (line 1048) | int hex_digit_to_int(char c) {
  function sds (line 1089) | sds *sdssplitargs(const char *line, int *argc) {
  function sds (line 1208) | sds sdsmapchars(sds s, const char *from, const char *to, size_t setlen) {
  function sds (line 1224) | sds sdsjoin(char **argv, int argc, char *sep) {
  function sds (line 1236) | sds sdsjoinsds(sds *argv, int argc, const char *sep, size_t seplen) {
  function sds_free (line 1254) | void sds_free(void *ptr) { s_free(ptr); }
  function sds (line 1262) | sds sdstemplate(const char *template, sdstemplate_callback_t cb_func, vo...
  function sds (line 1320) | static sds sdsTestTemplateCallback(sds varname, void *arg) {
  function sdsTest (line 1330) | int sdsTest(int argc, char **argv, int flags) {

FILE: src/redis/sds.h
  type sdshdr5 (line 47) | struct __attribute__ ((__packed__)) sdsh
Condensed preview — 1014 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (9,892K chars).
[
  {
    "path": ".agent/rules/ANTIGRAVITY_INSTRUCTIONS.md",
    "chars": 168,
    "preview": "# Antigravity Agent Instructions for Dragonfly\n\n**READ [AGENTS.md](../../AGENTS.md)**\n\nAll project information, workflow"
  },
  {
    "path": ".circleci/config.yml",
    "chars": 745,
    "preview": "version: 2.1\n\nmachine: true\n\njobs:\n  build-ubuntu:\n      docker: \n        - image: ghcr.io/romange/ubuntu-dev:22\n      s"
  },
  {
    "path": ".clang-format",
    "chars": 481,
    "preview": "# ---\n# We'll use defaults from the Google style, but with 2 columns indentation.\nBasedOnStyle: Google\nIndentWidth: 2\nCo"
  },
  {
    "path": ".clang-tidy",
    "chars": 2932,
    "preview": "---\n\nChecks: >\n  -abseil-no-namespace,\n  bugprone*,\n  # Sadly narrowing conversions is too noisy\n  -bugprone-narrowing-c"
  },
  {
    "path": ".clangd",
    "chars": 189,
    "preview": "Diagnostics:\n  UnusedIncludes: None\n  MissingIncludes: None\n  Includes:\n    IgnoreHeader: base/*.h\n\nCompileFlags:\n  Comp"
  },
  {
    "path": ".claude/hooks/format-after-edit.sh",
    "chars": 686,
    "preview": "#!/bin/bash\n# Hook to automatically format files after Edit/Write operations\n# Filters out src/redis directory from form"
  },
  {
    "path": ".claude/settings.json",
    "chars": 891,
    "preview": "{\n  \"permissions\": {\n    \"allow\": [\n      \"Read($CLAUDE_PROJECT_DIR/**)\",\n      \"Edit($CLAUDE_PROJECT_DIR/**)\",\n      \"W"
  },
  {
    "path": ".claude/skills/reproduce-fuzz-crash/SKILL.md",
    "chars": 3921,
    "preview": "---\nname: reproduce-fuzz-crash\ndescription: >\n  Reproduce AFL++ fuzz crashes from GitHub Actions. Use when user provides"
  },
  {
    "path": ".ct.yaml",
    "chars": 222,
    "preview": "# See https://github.com/helm/chart-testing#configuration\nremote: origin\ntarget-branch: main\nchart-dirs:\n  - contrib/cha"
  },
  {
    "path": ".cursorrules",
    "chars": 136,
    "preview": "# Cursor AI Rules for Dragonfly\n\n**READ `AGENTS.md`**\n\nAll project information, workflows, patterns, and guidelines are "
  },
  {
    "path": ".devcontainer/alpine/devcontainer.json",
    "chars": 582,
    "preview": "{\n  \"name\": \"alpine-dev\",\n  \"image\": \"ghcr.io/romange/alpine-dev\",\n  \"customizations\": {\n    \"vscode\": {\n      \"extensio"
  },
  {
    "path": ".devcontainer/alpine/post-create.sh",
    "chars": 224,
    "preview": "#!/bin/bash\n\ncontainerWorkspaceFolder=$1\ngit config --global --add safe.directory ${containerWorkspaceFolder}\ngit config"
  },
  {
    "path": ".devcontainer/fedora/devcontainer.json",
    "chars": 454,
    "preview": "{\n  \"name\": \"fedora30\",\n  \"image\": \"ghcr.io/romange/fedora:30\",\n  \"customizations\": {\n    \"vscode\": {\n      \"extensions\""
  },
  {
    "path": ".devcontainer/fedora41/devcontainer.json",
    "chars": 456,
    "preview": "{\n  \"name\": \"fedora41\",\n  \"image\": \"ghcr.io/romange/fedora:41\",\n  \"customizations\": {\n    \"vscode\": {\n      \"extensions\""
  },
  {
    "path": ".devcontainer/ubuntu20/cmake-tools-kits.json",
    "chars": 133,
    "preview": "[\n  {\n    \"name\": \"GCC x86_64-linux-gnu\",\n    \"compilers\": {\n      \"C\": \"gcc\",\n      \"CXX\": \"g++\"\n    },\n    \"isTrusted\""
  },
  {
    "path": ".devcontainer/ubuntu20/devcontainer.json",
    "chars": 552,
    "preview": "{\n  \"name\": \"ubuntu20\",\n  \"image\": \"ghcr.io/romange/ubuntu-dev:20\",\n  \"customizations\": {\n    \"vscode\": {\n      \"extensi"
  },
  {
    "path": ".devcontainer/ubuntu20/post-create.sh",
    "chars": 232,
    "preview": "#!/bin/bash\n\ncontainerWorkspaceFolder=$1\ngit config --global --add safe.directory '*'\nmkdir -p /root/.local/share/CMakeT"
  },
  {
    "path": ".devcontainer/ubuntu20-gcc14/devcontainer.json",
    "chars": 737,
    "preview": "{\n  \"name\": \"ubuntu20-gcc14\",\n  \"image\": \"ghcr.io/romange/ubuntu-dev:20-gcc14\",\n  \"customizations\": {\n    \"vscode\": {\n  "
  },
  {
    "path": ".devcontainer/ubuntu22/devcontainer.json",
    "chars": 552,
    "preview": "{\n  \"name\": \"ubuntu22\",\n  \"image\": \"ghcr.io/romange/ubuntu-dev:22\",\n  \"customizations\": {\n    \"vscode\": {\n      \"extensi"
  },
  {
    "path": ".devcontainer/ubuntu22/post-create.sh",
    "chars": 224,
    "preview": "#!/bin/bash\n\ncontainerWorkspaceFolder=$1\ngit config --global --add safe.directory ${containerWorkspaceFolder}\ngit config"
  },
  {
    "path": ".devcontainer/ubuntu24/devcontainer.json",
    "chars": 552,
    "preview": "{\n  \"name\": \"ubuntu24\",\n  \"image\": \"ghcr.io/romange/ubuntu-dev:24\",\n  \"customizations\": {\n    \"vscode\": {\n      \"extensi"
  },
  {
    "path": ".dockerignore",
    "chars": 43,
    "preview": "_deps/*\nbuild-*\ntools/packaging/*\n.github/*"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 906,
    "preview": "---\nname: Bug report\nabout: Create a report to help Dragonfly DB improve\ntitle: ''\nlabels: 'bug'\nassignees: ''\n\n---\n\n**D"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 430,
    "preview": "blank_issues_enabled: true\n\ncontact_links:\n  - name: Dragonfly DB Discord Channel\n    url: https://discord.gg/HsPjXGVH85"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 845,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for Dragonfly DB\ntitle: ''\nlabels: 'feature request'\nassignees: ''\n\n---"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 755,
    "preview": "<!--\n**Commits Must Be Signed and Your PR title must conform to the conventional commit spec**\n  * See: https://github.c"
  },
  {
    "path": ".github/actions/builder/action.yml",
    "chars": 2586,
    "preview": "name: Build Dragonfly\ndescription: \"Build Dragonfly with configurable CMake options\"\n\ninputs:\n  build-type:\n    descript"
  },
  {
    "path": ".github/actions/fuzzing/action.yml",
    "chars": 9751,
    "preview": "name: Run AFL++ Fuzzing\ndescription: \"Run AFL++ fuzzing campaign with configurable parameters\"\n\ninputs:\n  mode:\n    desc"
  },
  {
    "path": ".github/actions/lint-test-chart/action.yml",
    "chars": 1829,
    "preview": "name: Lint test chart\ndescription: \"Run lint test chart\"\n\nruns:\n  using: \"composite\"\n  steps:\n      - name: Checkout\n   "
  },
  {
    "path": ".github/actions/multi-registry-docker-login/action.yml",
    "chars": 716,
    "preview": "name: 'Multi-Registry Docker Login'\ndescription: 'Authenticate with both GHCR and Google Artifact Registry'\ninputs:\n  GI"
  },
  {
    "path": ".github/actions/regression-tests/action.yml",
    "chars": 6613,
    "preview": "name: Regression Tests\ndescription: \"Run regression tests\"\n\ninputs:\n  dfly-executable:\n    required: true\n    type: stri"
  },
  {
    "path": ".github/actions/repeat/action.yml",
    "chars": 3559,
    "preview": "name: Run Tests On Repeat\ndescription: \"Repeat specific tests\"\n\ninputs:\n  dfly-executable:\n    required: true\n    type: "
  },
  {
    "path": ".github/actions/sync-valkey-tests/action.yml",
    "chars": 376,
    "preview": "name: Sync valkey-search tests\ndescription: \"Synchronizes valkey-search tests using a fixed revision\"\n\nruns:\n  using: co"
  },
  {
    "path": ".github/actions/test-docker/action.yml",
    "chars": 587,
    "preview": "name: Test Docker Image\n\ninputs:\n  image_id:\n    required: true\n    type: string\n  name:\n    required: true\n    type: st"
  },
  {
    "path": ".github/bullmq-skipped-tests.txt",
    "chars": 1641,
    "preview": "# BullMQ tests excluded from CI runs against Dragonfly\n#\n# Format: one pattern per line (used as JS regex in mocha --gre"
  },
  {
    "path": ".github/copilot-instructions.md",
    "chars": 912,
    "preview": "---\ndescription: 'Code review guidelines for GitHub copilot in this project'\napplyTo: '**'\nexcludeAgent: [\"coding-agent\""
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 1385,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n\n "
  },
  {
    "path": ".github/instructions/code-review.instructions.md",
    "chars": 6001,
    "preview": "---\ndescription: 'Code review instructions for Dragonfly'\napplyTo: '**'\nexcludeAgent: [\"coding-agent\"]\n---\n\n# Dragonfly "
  },
  {
    "path": ".github/workflows/benchmark.yml",
    "chars": 7085,
    "preview": "name: benchmark-tests\n\non:\n  schedule:\n    - cron: \"0 9 * * *\" # run at 6 AM UTC\n  workflow_dispatch:\n\npermissions:\n  co"
  },
  {
    "path": ".github/workflows/bullmq-tests.yml",
    "chars": 3081,
    "preview": "name: bullmq-tests\n\non:\n  schedule:\n    - cron: '0 7 * * *' # run at 7 AM daily\n  workflow_dispatch:\n\npermissions:\n  con"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 8439,
    "preview": "name: ci-tests\n\non:\n  # push:\n  # branches: [ main ]\n  pull_request:\n    branches: [main]\n  workflow_dispatch:\n\nconcurre"
  },
  {
    "path": ".github/workflows/copilot-setup-steps.yml",
    "chars": 1383,
    "preview": "# Copilot Build Environment Setup Steps\n# This file contains steps to configure the Dragonfly build environment\n# with A"
  },
  {
    "path": ".github/workflows/cov.yml",
    "chars": 3858,
    "preview": "name: Daily Coverage\n\non:\n    schedule:\n      - cron: '0 6 * * *' # run at 6 AM UTC\n    workflow_dispatch:\n\njobs:\n  buil"
  },
  {
    "path": ".github/workflows/daily-builds.yml",
    "chars": 4592,
    "preview": "name: daily-builds\n\non:\n  schedule:\n    - cron: '0 6 * * *' # run at 6 AM UTC\n  workflow_dispatch:\n\njobs:\n  build:\n    i"
  },
  {
    "path": ".github/workflows/docker-dev-release.yml",
    "chars": 7356,
    "preview": "name: Development Docker Build\n\non:\n  schedule:\n    - cron: '15 0 * * *'\n  workflow_dispatch:\n\nconcurrency:\n  group: ${{"
  },
  {
    "path": ".github/workflows/docker-release2.yml",
    "chars": 13769,
    "preview": "name: Docker Release-v2\n\non:\n  workflow_dispatch:\n    inputs:\n      TAG_NAME:\n        description: 'Tag name that the ma"
  },
  {
    "path": ".github/workflows/epoll-regression-tests.yml",
    "chars": 2247,
    "preview": "name: Epoll Regression Tests\n\non:\n  schedule:\n    - cron: \"0 0/3 * * *\"\n  workflow_dispatch:\n\njobs:\n  build:\n    if: git"
  },
  {
    "path": ".github/workflows/fuzz-long.yml",
    "chars": 2195,
    "preview": "name: AFL++ Long Fuzzing Campaign\r\n\r\non:\r\n  schedule:\r\n    # Run nightly at 2 AM UTC\r\n    - cron: '0 2 * * *'\r\n  workflo"
  },
  {
    "path": ".github/workflows/fuzz-pr.yml",
    "chars": 6793,
    "preview": "# Run AFL++ fuzzing on PRs that touch C++ code.\n#\n# For each PR, an LLM analyzes the diff and generates:\n#   1. Targeted"
  },
  {
    "path": ".github/workflows/generate-osrepo-site.yml",
    "chars": 3134,
    "preview": "name: generate-site\non:\n  workflow_dispatch:\n  release:\n    types: [published]\n\njobs:\n  gen-site:\n    runs-on: ubuntu-la"
  },
  {
    "path": ".github/workflows/heavy-tests.yml",
    "chars": 1767,
    "preview": "name: Heavy Tests\n\non:\n  schedule:\n    - cron: \"0 0/6 * * *\"\n  workflow_dispatch:\n\njobs:\n  build:\n    if: github.reposit"
  },
  {
    "path": ".github/workflows/ioloop-v2-regtests.yml",
    "chars": 1945,
    "preview": "name: RegTests IoLoopV2\n\n# Manually triggered only\non:\n  workflow_dispatch:\n\njobs:\n  build:\n    strategy:\n      matrix:\n"
  },
  {
    "path": ".github/workflows/mastodon-ruby-tests.yml",
    "chars": 2915,
    "preview": "name: Mastodon ruby tests\non:\n  schedule:\n    - cron: '0 6 * * *' # run at 6 AM UTC\n  workflow_dispatch:\n\n\njobs:\n  build"
  },
  {
    "path": ".github/workflows/package-install.yml",
    "chars": 1964,
    "preview": "name: package-install-tests\n\non:\n  schedule:\n    - cron: '0 6 * * *'\n  workflow_dispatch:\n  workflow_run:\n    workflows:"
  },
  {
    "path": ".github/workflows/regression-tests.yml",
    "chars": 2050,
    "preview": "name: Regression Tests\n\non:\n  schedule:\n    - cron: \"0 0/3 * * *\"\n  workflow_dispatch:\n\njobs:\n  build:\n    if: github.re"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 5648,
    "preview": "name: Version Release\n\non:\n  push:\n    tags:\n    - 'v*'\n\npermissions:\n  contents: write\n\nenv:\n  RELEASE_DIR: build-relea"
  },
  {
    "path": ".github/workflows/repeat-tests.yml",
    "chars": 4032,
    "preview": "name: Repeat Tests\n\non:\n  workflow_dispatch:\n    inputs:\n      branch:\n        description: \"The branch on which tests w"
  },
  {
    "path": ".github/workflows/test-fakeredis.yml",
    "chars": 4155,
    "preview": "---\nname: Test Dragonfly/Fakeredis\n\non:\n  workflow_dispatch:\n  pull_request:\n\npermissions:\n  contents: read\n  checks: wr"
  },
  {
    "path": ".gitignore",
    "chars": 446,
    "preview": "build/*\nbuild-*\nclang/*\nclang-*\n.vscode/*.db\n.vscode/settings.json\n.vscode/launch.json\nthird_party\ngenfiles/*\n*.sublime-"
  },
  {
    "path": ".gitmodules",
    "chars": 78,
    "preview": "[submodule \"helio\"]\n\tpath = helio\n\turl = https://github.com/romange/helio.git\n"
  },
  {
    "path": ".gitorderfile",
    "chars": 54,
    "preview": "*.py\n*.md\n*.in\n*.txt\n*.sh\n*.yml\n*.h\n*.cc\n*.lua\n*.go\n*\n"
  },
  {
    "path": ".nvmrc",
    "chars": 6,
    "preview": "22.19\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 907,
    "preview": "default_stages: [pre-commit]\nexclude: |\n    (?x)(\n      src/redis/.* |\n      src/huff/.* |\n      contrib/charts/dragonfl"
  },
  {
    "path": ".pre-commit-hooks.yaml",
    "chars": 472,
    "preview": "- id: conventional-commits\n  name: Conventional Commits Minder\n  entry: contrib/scripts/conventional-commits\n  language:"
  },
  {
    "path": ".snyk",
    "chars": 104,
    "preview": "# Snyk (https://snyk.io) policy file\nexclude:\n global:\n   - tests/integration/**\n   - contrib/charts/**\n"
  },
  {
    "path": ".vscode/c_cpp_properties.json",
    "chars": 364,
    "preview": "{\n  \"configurations\": [\n    {\n      \"name\": \"Linux\",\n      \"includePath\": [\n        \"${default}\"\n      ],\n      \"cStanda"
  },
  {
    "path": "AGENTS.md",
    "chars": 16692,
    "preview": "# Dragonfly Development Guide\n\n> **Essential reference for working with the Dragonfly codebase**\n> Architecture, build s"
  },
  {
    "path": "CLA.txt",
    "chars": 1069,
    "preview": "Thanks for your interest in contributing to Dragonfly™. By contributing to this project\nin any way form or media you gra"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 3786,
    "preview": "cmake_minimum_required(VERSION 3.15 FATAL_ERROR)\nset(PROJECT_CONTACT romange@gmail.com)\n\ninclude(CheckCXXCompilerFlag)\n\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 5254,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 3641,
    "preview": "# Contributing to Dragonfly DB\n\nThank you for your interest in Dragonfly DB.\n\nFeel free to browse our [Discussions](http"
  },
  {
    "path": "CONTRIBUTORS.md",
    "chars": 831,
    "preview": "# Contributors (alphabetical by surname)\n\n* **[Amir Alperin](https://github.com/iko1)**\n* **[Philipp Born](https://githu"
  },
  {
    "path": "LICENSE.md",
    "chars": 3289,
    "preview": "# Dragonfly Business Source License 1.1\n\n<u>License</u>: Business Source License 1.1 [BSL 1.1](https://spdx.org/licenses"
  },
  {
    "path": "Makefile",
    "chars": 2269,
    "preview": "BUILD_ARCH := $(shell uname -m)\nRELEASE_NAME := \"dragonfly-${BUILD_ARCH}\"\nHELIO_RELEASE_FLAGS = -DHELIO_RELEASE_FLAGS=\"-"
  },
  {
    "path": "README.ja-JP.md",
    "chars": 9097,
    "preview": "<p align=\"center\">\n  <a href=\"https://dragonflydb.io\">\n    <img  src=\"/.github/images/logo-full.svg\"\n      width=\"284\" b"
  },
  {
    "path": "README.ko-KR.md",
    "chars": 9549,
    "preview": "<p align=\"center\">\n  <a href=\"https://dragonflydb.io\">\n    <img  src=\"/.github/images/logo-full.svg\"\n      width=\"284\" b"
  },
  {
    "path": "README.md",
    "chars": 16756,
    "preview": "<p align=\"center\">\n  <a href=\"https://dragonflydb.io\">\n    <img  src=\"/.github/images/logo-full.svg\"\n      width=\"284\" b"
  },
  {
    "path": "README.pt-BR.md",
    "chars": 14632,
    "preview": "<p align=\"center\">\n  <a href=\"https://dragonflydb.io\">\n    <img  src=\"/.github/images/logo-full.svg\"\n      width=\"284\" b"
  },
  {
    "path": "README.zh-CN.md",
    "chars": 8048,
    "preview": "<p align=\"center\">\n  <a href=\"https://dragonflydb.io\">\n    <img  src=\"/.github/images/logo-full.svg\"\n      width=\"284\" b"
  },
  {
    "path": "TODO.md",
    "chars": 1585,
    "preview": "1. To move lua_project to dragonfly from helio (DONE)\n2. To limit lua stack to something reasonable like 4096.\n3. To inj"
  },
  {
    "path": "contrib/charts/dragonfly/.helmignore",
    "chars": 372,
    "preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
  },
  {
    "path": "contrib/charts/dragonfly/Chart.yaml",
    "chars": 1371,
    "preview": "apiVersion: v2\nname: dragonfly\ndescription: Dragonfly is a modern in-memory datastore, fully compatible with Redis and M"
  },
  {
    "path": "contrib/charts/dragonfly/README.md",
    "chars": 6362,
    "preview": "# dragonfly\n\n![Version: v0.12.0](https://img.shields.io/badge/Version-v0.12.0-informational?style=flat-square) ![Type: a"
  },
  {
    "path": "contrib/charts/dragonfly/ci/affinity-values.golden.yaml",
    "chars": 2813,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/affinity-values.yaml",
    "chars": 327,
    "preview": "affinity:\n  podAntiAffinity:\n    preferredDuringSchedulingIgnoredDuringExecution:\n    - podAffinityTerm:\n        labelSe"
  },
  {
    "path": "contrib/charts/dragonfly/ci/command_extraargs-values.golden.yaml",
    "chars": 2532,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/command_extraargs-values.yaml",
    "chars": 90,
    "preview": "command:\n  - /usr/local/bin/dragonfly\n  - --logtostderr\n\nextraArgs:\n  - --cache_mode=true\n"
  },
  {
    "path": "contrib/charts/dragonfly/ci/commonlabels-values.golden.yaml",
    "chars": 2634,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/commonlabels-values.yaml",
    "chars": 63,
    "preview": "commonLabels:\n  team: platform\n  project: cache-infrastructure\n"
  },
  {
    "path": "contrib/charts/dragonfly/ci/extracontainer-string-values.golden.yaml",
    "chars": 2577,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/extracontainer-string-values.yaml",
    "chars": 131,
    "preview": "extraContainers:\n  - name: sidecar-string\n    image: busybox:latest\n    command: [\"/bin/sh\"]\n    args: [\"-c\", \"date; sle"
  },
  {
    "path": "contrib/charts/dragonfly/ci/extracontainer-tpl-values.golden.yaml",
    "chars": 2585,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/extracontainer-tpl-values.yaml",
    "chars": 153,
    "preview": "extraContainers: |\n  - name: sidecar-tpl\n    image: {{ .Values.image.repository }}:latest\n    command: [\"/bin/sh\"]\n    a"
  },
  {
    "path": "contrib/charts/dragonfly/ci/extraenv-and-passwordSecret-values.golden.yaml",
    "chars": 3359,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/extraenv-and-passwordSecret-values.yaml",
    "chars": 661,
    "preview": "extraObjects:\n- apiVersion: v1\n  kind: Secret\n  metadata:\n    name: dfly-password\n  stringData:\n    password: foobar\n- a"
  },
  {
    "path": "contrib/charts/dragonfly/ci/extraenv-values.golden.yaml",
    "chars": 3051,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/extraenv-values.yaml",
    "chars": 462,
    "preview": "extraObjects:\n- apiVersion: v1\n  kind: ConfigMap\n  metadata:\n    name: my-configmap\n  data:\n    configKey1: configValue1"
  },
  {
    "path": "contrib/charts/dragonfly/ci/extravolumes-values.golden.yaml",
    "chars": 2576,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/extravolumes-values.yaml",
    "chars": 119,
    "preview": "extraVolumes:\n  - name: tmp\n    emptyDir:\n      sizeLimit: 500Mi\n\nextraVolumeMounts:\n  - mountPath: /tmp\n    name: tmp\n"
  },
  {
    "path": "contrib/charts/dragonfly/ci/initcontainer-string-values.golden.yaml",
    "chars": 2600,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/initcontainer-string-values.yaml",
    "chars": 131,
    "preview": "initContainers:\n  - name: initcontainer-string\n    image: busybox:1.28\n    command: [\"/bin/sh\"]\n    args: [\"-c\", \"date; "
  },
  {
    "path": "contrib/charts/dragonfly/ci/initcontainer-tpl-values.golden.yaml",
    "chars": 2610,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/initcontainer-tpl-values.yaml",
    "chars": 155,
    "preview": "initContainers: |\n  - name: initcontainer-tpl\n    image: {{ .Values.image.repository }}:latest\n    command: [\"/bin/sh\"]\n"
  },
  {
    "path": "contrib/charts/dragonfly/ci/password-old-env-values.golden.yaml",
    "chars": 2745,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/password-old-env-values.yaml",
    "chars": 250,
    "preview": "image:\n  tag: \"v1.13.0\"\n\nextraObjects:\n  - apiVersion: v1\n    kind: Secret\n    metadata:\n      name: dfly-password\n    s"
  },
  {
    "path": "contrib/charts/dragonfly/ci/passwordsecret-values.golden.yaml",
    "chars": 2748,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/passwordsecret-values.tpl.golden.yaml",
    "chars": 2758,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/passwordsecret-values.tpl.yaml",
    "chars": 248,
    "preview": "extraObjects:\n- apiVersion: v1\n  kind: Secret\n  metadata:\n    name: dragonfly-password\n  stringData:\n    password: fooba"
  },
  {
    "path": "contrib/charts/dragonfly/ci/passwordsecret-values.yaml",
    "chars": 213,
    "preview": "extraObjects:\n- apiVersion: v1\n  kind: Secret\n  metadata:\n    name: dfly-password\n  stringData:\n    password: foobar\n\npa"
  },
  {
    "path": "contrib/charts/dragonfly/ci/persistence-and-existing-secret.golden.yaml",
    "chars": 3066,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/persistence-and-existing-secret.yaml",
    "chars": 288,
    "preview": "storage:\n  enabled: true\n  storageClassName: \"standard\"\n  requests: 128Mi\n\nextraObjects:\n- apiVersion: v1\n  kind: Secret"
  },
  {
    "path": "contrib/charts/dragonfly/ci/persistent-values.golden.yaml",
    "chars": 2743,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/persistent-values.yaml",
    "chars": 74,
    "preview": "storage:\n  enabled: true\n  storageClassName: \"standard\"\n  requests: 128Mi\n"
  },
  {
    "path": "contrib/charts/dragonfly/ci/priorityclassname-values.golden.yaml",
    "chars": 2693,
    "preview": "---\n# Source: dragonfly/templates/extra-manifests.yaml\napiVersion: scheduling.k8s.io/v1\ndescription: This priority class"
  },
  {
    "path": "contrib/charts/dragonfly/ci/priorityclassname-values.yaml",
    "chars": 265,
    "preview": "priorityClassName: \"high-priority\"\n\nextraObjects:\n  - apiVersion: scheduling.k8s.io/v1\n    kind: PriorityClass\n    metad"
  },
  {
    "path": "contrib/charts/dragonfly/ci/prometheusrules-values.golden.yaml",
    "chars": 3630,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/prometheusrules-values.yaml",
    "chars": 403,
    "preview": "serviceMonitor:\n  enabled: true\nprometheusRule:\n  enabled: true\n  namespace: default\n  spec:\n    - alert: RedisDown\n    "
  },
  {
    "path": "contrib/charts/dragonfly/ci/resources-values.golden.yaml",
    "chars": 2512,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/resources-values.yaml",
    "chars": 97,
    "preview": "resources:\n  requests:\n    cpu: 100m\n    memory: 300Mi\n  limits:\n    cpu: 100m\n    memory: 400Mi\n"
  },
  {
    "path": "contrib/charts/dragonfly/ci/securitycontext-values.golden.yaml",
    "chars": 2526,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/securitycontext-values.yaml",
    "chars": 106,
    "preview": "podSecurityContext: {}\n\nsecurityContext:\n  allowPrivilegeEscalation: false\n  readOnlyRootFilesystem: true\n"
  },
  {
    "path": "contrib/charts/dragonfly/ci/service-loadbalancer-ip.golden.yaml",
    "chars": 2445,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/service-loadbalancer-ip.yaml",
    "chars": 59,
    "preview": "service:\n  type: LoadBalancer\n  loadBalancerIP: \"127.0.0.1\""
  },
  {
    "path": "contrib/charts/dragonfly/ci/service-monitor-values.golden.yaml",
    "chars": 3660,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/service-monitor-values.yaml",
    "chars": 143,
    "preview": "serviceMonitor:\n  enabled: true\n  namespace: \"\"\n  labels:\n    release: prometheus-stack\n  annotations: {}\n  interval: 10"
  },
  {
    "path": "contrib/charts/dragonfly/ci/taints-tolerations-values.golden.yaml",
    "chars": 2936,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/taints-tolerations-values.yaml",
    "chars": 442,
    "preview": "tolerations:\n  - key: key/high-memory\n    operator: \"Equal\"\n    value: \"true\"\n    effect: \"NoSchedule\"\n  - key: key/high"
  },
  {
    "path": "contrib/charts/dragonfly/ci/tls-values.golden.yaml",
    "chars": 4805,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/tls-values.yaml",
    "chars": 1313,
    "preview": "tls:\n  enabled: true\n  existing_secret: \"\"\n  cert: |\n    -----BEGIN CERTIFICATE-----\n    MIIB8zCCAZqgAwIBAgIEbb2Z2jAKBgg"
  },
  {
    "path": "contrib/charts/dragonfly/ci/tolerations-values.golden.yaml",
    "chars": 2489,
    "preview": "---\n# Source: dragonfly/templates/serviceaccount.yaml\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: test-dragonf"
  },
  {
    "path": "contrib/charts/dragonfly/ci/tolerations-values.yaml",
    "chars": 57,
    "preview": "tolerations:\n  - effect: NoSchedule\n    operator: Exists\n"
  },
  {
    "path": "contrib/charts/dragonfly/go.mod",
    "chars": 7292,
    "preview": "module dragonfly\n\ngo 1.24.0\n\ntoolchain go1.24.7\n\nrequire github.com/gruntwork-io/terratest v0.51.0\n\nrequire (\n\tfilippo.i"
  },
  {
    "path": "contrib/charts/dragonfly/go.sum",
    "chars": 32098,
    "preview": "filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=\nfilippo.io/edwards25519 v1.1.0/go.mod h1:"
  },
  {
    "path": "contrib/charts/dragonfly/golden_test.go",
    "chars": 1297,
    "preview": "package golden\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/gruntwork-i"
  },
  {
    "path": "contrib/charts/dragonfly/templates/NOTES.txt",
    "chars": 1554,
    "preview": "1. Get the application URL by running these commands:\n\n{{- if contains \"NodePort\" .Values.service.type }}\n  export NODE_"
  },
  {
    "path": "contrib/charts/dragonfly/templates/_helpers.tpl",
    "chars": 2061,
    "preview": "{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"dragonfly.name\" -}}\n{{- default .Chart.Name .Values.nameOverride | t"
  },
  {
    "path": "contrib/charts/dragonfly/templates/_pod.tpl",
    "chars": 4346,
    "preview": "{{- define \"dragonfly.volumemounts\" -}}\n{{- if or (.Values.storage.enabled) (.Values.extraVolumeMounts) (.Values.tls.ena"
  },
  {
    "path": "contrib/charts/dragonfly/templates/certificate.yaml",
    "chars": 1252,
    "preview": "{{- if and .Values.tls.enabled .Values.tls.createCerts }}\napiVersion: cert-manager.io/v1\nkind: Certificate\nmetadata:\n  n"
  },
  {
    "path": "contrib/charts/dragonfly/templates/deployment.yaml",
    "chars": 994,
    "preview": "{{- if not .Values.storage.enabled }}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"dragonfly.fulln"
  },
  {
    "path": "contrib/charts/dragonfly/templates/extra-manifests.yaml",
    "chars": 70,
    "preview": "{{ range .Values.extraObjects }}\n---\n{{ tpl (toYaml .) $ }}\n{{ end }}\n"
  },
  {
    "path": "contrib/charts/dragonfly/templates/metrics-service.yaml",
    "chars": 554,
    "preview": "{{- if .Values.serviceMonitor.enabled }}\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"dragonfly.fullname\" "
  },
  {
    "path": "contrib/charts/dragonfly/templates/prometheusrule.yaml",
    "chars": 544,
    "preview": "{{- if and ( .Capabilities.APIVersions.Has \"monitoring.coreos.com/v1\" ) .Values.serviceMonitor.enabled .Values.prometheu"
  },
  {
    "path": "contrib/charts/dragonfly/templates/service.yaml",
    "chars": 913,
    "preview": "apiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"dragonfly.fullname\" . }}\n  namespace: {{ .Release.Namespace }"
  },
  {
    "path": "contrib/charts/dragonfly/templates/serviceaccount.yaml",
    "chars": 362,
    "preview": "{{- if .Values.serviceAccount.create -}}\napiVersion: v1\nkind: ServiceAccount\nmetadata:\n  name: {{ include \"dragonfly.ser"
  },
  {
    "path": "contrib/charts/dragonfly/templates/servicemonitor.yaml",
    "chars": 1263,
    "preview": "{{- if .Values.serviceMonitor.enabled }}\napiVersion: monitoring.coreos.com/v1\nkind: ServiceMonitor\nmetadata:\n  name: {{ "
  },
  {
    "path": "contrib/charts/dragonfly/templates/statefulset.yaml",
    "chars": 1316,
    "preview": "{{- if .Values.storage.enabled }}\napiVersion: apps/v1\nkind: StatefulSet\nmetadata:\n  name: {{ include \"dragonfly.fullname"
  },
  {
    "path": "contrib/charts/dragonfly/templates/tls-secret.yaml",
    "chars": 458,
    "preview": "{{- if and (.Values.tls.enabled) (.Values.tls.cert) (.Values.tls.key) (not .Values.tls.existing_secret) }}\napiVersion: v"
  },
  {
    "path": "contrib/charts/dragonfly/values.yaml",
    "chars": 5855,
    "preview": "# Default values for dragonfly.\n# This is a YAML-formatted file.\n# Declare variables to be passed into your templates.\n\n"
  },
  {
    "path": "contrib/docker/README.md",
    "chars": 2447,
    "preview": "<p align=\"center\">\n  <a href=\"https://dragonflydb.io\">\n    <img src=\"https://raw.githubusercontent.com/dragonflydb/drago"
  },
  {
    "path": "contrib/docker/docker-compose.yml",
    "chars": 464,
    "preview": "services:\n  dragonfly:\n    image: 'docker.dragonflydb.io/dragonflydb/dragonfly'\n    ulimits:\n      memlock: -1\n    ports"
  },
  {
    "path": "contrib/scripts/conventional-commits",
    "chars": 2043,
    "preview": "#!/usr/bin/env bash\n\n# list of Conventional Commits types\ncc_types=(\"feat\" \"fix\")\ndefault_types=(\"build\" \"chore\" \"ci\" \"d"
  },
  {
    "path": "contrib/scripts/signed-commit",
    "chars": 458,
    "preview": "#!/usr/bin/env bash\n\nif [[ -z \"$1\" ]] || [[ ! -f \"$1\" ]]; then\n  echo \"ERROR: Commit message file not provided or does n"
  },
  {
    "path": "docs/README.md",
    "chars": 789,
    "preview": "<p align=\"center\">\n  <a href=\"https://dragonflydb.io\">\n    <img  src=\"https://raw.githubusercontent.com/dragonflydb/drag"
  },
  {
    "path": "docs/async-tiering.md",
    "chars": 8349,
    "preview": "# Async Tiering Design Document\n\n## Background\n\nOur current tiered storage component performs disk operations inline as "
  },
  {
    "path": "docs/cluster-node-health.md",
    "chars": 9296,
    "preview": "# Cluster Node Health\n\n**Node health is passive metadata provided by the cluster manager (control plane) via the\n`DFLYCL"
  },
  {
    "path": "docs/coordinator.excalidraw",
    "chars": 14534,
    "preview": "{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"https://excalidraw.com\",\n  \"elements\": [\n    {\n      \"type\": \"rec"
  },
  {
    "path": "docs/dashtable.md",
    "chars": 15326,
    "preview": "\n# Dashtable in Dragonfly\n\nDashtable is a very important data structure in Dragonfly. This document explains\nhow it fits"
  },
  {
    "path": "docs/dense_set.excalidraw",
    "chars": 48320,
    "preview": "{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"https://excalidraw.com\",\n  \"elements\": [\n    {\n      \"id\": \"LdnS4"
  },
  {
    "path": "docs/dense_set.md",
    "chars": 4677,
    "preview": "# DenseSet in Dragonfly\n\n`DenseSet` uses [classic hashtable with separate chaining](https://en.wikipedia.org/wiki/Hash_t"
  },
  {
    "path": "docs/df-share-nothing.md",
    "chars": 6878,
    "preview": "# Dragonfly Architecture\n\nDragonfly is a modern replacement for memory stores like Redis and Memcached. It scales vertic"
  },
  {
    "path": "docs/differences.md",
    "chars": 649,
    "preview": "# Differences with Redis\n\n## String lengths, indices.\n\nString sizes are limited to 256MB.\nIndices (say in GETRANGE and S"
  },
  {
    "path": "docs/faq.md",
    "chars": 3992,
    "preview": "# Dragonfly Frequently Asked Questions\n\n- [Dragonfly Frequently Asked Questions](#dragonfly-frequently-asked-questions)\n"
  },
  {
    "path": "docs/memcached_benchmark.md",
    "chars": 327,
    "preview": "Contention in memcached under the high write throughput.\n\n<img src=\"http://static.dragonflydb.io/repo-assets/memcached_p"
  },
  {
    "path": "docs/memory_bgsave.tsv",
    "chars": 888,
    "preview": "Time\tDragonfly\tRedis\n4\t4738531328\t6819917824\n5\t4738637824\t6819917824\n6\t4738658304\t6819913728\n7\t4738777088\t6820589568\n8\t4"
  },
  {
    "path": "docs/namespaces.md",
    "chars": 3704,
    "preview": "# Namespaces in Dragonfly\n\nDragonfly added an _experimental_ feature, allowing complete separation of data by different "
  },
  {
    "path": "docs/quick-start/README.md",
    "chars": 1575,
    "preview": "<p align=\"center\">\n  <a href=\"https://dragonflydb.io\">\n    <img src=\"https://raw.githubusercontent.com/dragonflydb/drago"
  },
  {
    "path": "docs/rdbsave.excalidraw",
    "chars": 30558,
    "preview": "{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"https://excalidraw.com\",\n  \"elements\": [\n    {\n      \"type\": \"rec"
  },
  {
    "path": "docs/rdbsave.md",
    "chars": 7177,
    "preview": "# RDB Snapshot design\n\nThe following document describes Dragonfly's point in time, forkless snapshotting procedure,\nincl"
  },
  {
    "path": "docs/shard-serialization.md",
    "chars": 53948,
    "preview": "# Shard Serialization\n\nThis document describes how Dragonfly serializes a single shard's data via `SliceSnapshot`. It\nco"
  },
  {
    "path": "docs/thread-per-core.excalidraw",
    "chars": 14209,
    "preview": "{\n  \"type\": \"excalidraw\",\n  \"version\": 2,\n  \"source\": \"https://excalidraw.com\",\n  \"elements\": [\n    {\n      \"type\": \"tex"
  },
  {
    "path": "docs/transaction.md",
    "chars": 19557,
    "preview": "# Life of a transaction\n\nThis document describes how Dragonfly transactions provide atomicity and serializability for it"
  },
  {
    "path": "fuzz/FUZZING.md",
    "chars": 4235,
    "preview": "# AFL++ Fuzzing for Dragonfly\n\n## Install AFL++\n\nAFL++ must be built from source with `AFL_PERSISTENT_RECORD` enabled fo"
  },
  {
    "path": "fuzz/dict/memcache.dict",
    "chars": 664,
    "preview": "# Memcache text protocol dictionary for AFL++\n\n# Store commands\n\"set\"\n\"add\"\n\"replace\"\n\"append\"\n\"prepend\"\n\"cas\"\n\n# Retrie"
  },
  {
    "path": "fuzz/dict/resp.dict",
    "chars": 5219,
    "preview": "# AFL++ dictionary for RESP protocol\n# Dragonfly command keywords and common patterns\n\n# RESP protocol markers\n\"*\"\n\"$\"\n\""
  },
  {
    "path": "fuzz/generate_targeted_seeds.py",
    "chars": 11620,
    "preview": "#!/usr/bin/env python3\n\"\"\"Generate PR-targeted fuzzing inputs from a code diff using an LLM.\n\nFuzzing terminology used i"
  },
  {
    "path": "fuzz/memcache_mutator.py",
    "chars": 10613,
    "preview": "\"\"\"AFL++ custom mutator for memcache text protocol.\n\nMutates at the command level instead of random bytes,\nkeeping memca"
  },
  {
    "path": "fuzz/package_crash.sh",
    "chars": 2934,
    "preview": "#!/usr/bin/env bash\n\nset -e\n\nGREEN='\\033[0;32m'\nRED='\\033[0;31m'\nNC='\\033[0m'\n\nprint_info() { echo -e \"${GREEN}[INFO]${N"
  },
  {
    "path": "fuzz/replay_crash.py",
    "chars": 2981,
    "preview": "#!/usr/bin/env python3\r\n\"\"\"Replays a crash from AFL++ persistent mode RECORD files.\r\n\r\nIn persistent mode, a crash depen"
  },
  {
    "path": "fuzz/resp_mutator.py",
    "chars": 14193,
    "preview": "\"\"\"AFL++ custom mutator for RESP protocol.\n\nInstead of random byte-level mutations (which would break protocol framing a"
  },
  {
    "path": "fuzz/run_fuzzer.sh",
    "chars": 5538,
    "preview": "#!/usr/bin/env bash\n\nset -e\n\nGREEN='\\033[0;32m'\nBLUE='\\033[0;34m'\nYELLOW='\\033[1;33m'\nNC='\\033[0m'\n\nSCRIPT_DIR=\"$(cd \"$("
  },
  {
    "path": "fuzz/seeds/memcache/add_replace.mc",
    "chars": 67,
    "preview": "set key1 0 0 3\r\nabc\r\nadd key2 0 0 3\r\ndef\r\nreplace key1 0 0 3\r\nxyz\r\n"
  },
  {
    "path": "fuzz/seeds/memcache/append_prepend.mc",
    "chars": 81,
    "preview": "set buf 0 0 5\r\nhello\r\nappend buf 0 0 6\r\n world\r\nprepend buf 0 0 4\r\nsay\r\nget buf\r\n"
  },
  {
    "path": "fuzz/seeds/memcache/cas.mc",
    "chars": 58,
    "preview": "set mykey 0 0 3\r\nabc\r\ngets mykey\r\ncas mykey 0 0 3 1\r\nxyz\r\n"
  },
  {
    "path": "fuzz/seeds/memcache/delete.mc",
    "chars": 82,
    "preview": "set key1 0 0 1\r\na\r\nset key2 0 0 1\r\nb\r\ndelete key1\r\ndelete key2 noreply\r\nget key1\r\n"
  },
  {
    "path": "fuzz/seeds/memcache/expiry.mc",
    "chars": 90,
    "preview": "set exp1 0 10 3\r\nabc\r\nset exp2 0 0 3\r\ndef\r\nset exp3 0 9999999 3\r\nghi\r\nget exp1 exp2 exp3\r\n"
  },
  {
    "path": "fuzz/seeds/memcache/flags.mc",
    "chars": 107,
    "preview": "set f1 0 0 3\r\nabc\r\nset f2 1 0 3\r\ndef\r\nset f3 65535 0 3\r\nghi\r\nset f4 4294967295 0 3\r\njkl\r\ngets f1 f2 f3 f4\r\n"
  },
  {
    "path": "fuzz/seeds/memcache/flush.mc",
    "chars": 52,
    "preview": "set a 0 0 1\r\nx\r\nset b 0 0 1\r\ny\r\nflush_all\r\nget a b\r\n"
  },
  {
    "path": "fuzz/seeds/memcache/gat.mc",
    "chars": 57,
    "preview": "set mykey 0 100 5\r\nhello\r\ngat 200 mykey\r\ngats 300 mykey\r\n"
  },
  {
    "path": "fuzz/seeds/memcache/incr_decr.mc",
    "chars": 84,
    "preview": "set counter 0 0 1\r\n0\r\nincr counter 1\r\nincr counter 10\r\ndecr counter 5\r\nget counter\r\n"
  },
  {
    "path": "fuzz/seeds/memcache/large_value.mc",
    "chars": 128,
    "preview": "set big 0 0 100\r\naaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r\ng"
  },
  {
    "path": "fuzz/seeds/memcache/meta_commands.mc",
    "chars": 55,
    "preview": "ms mykey 5\r\nhello\r\nmg mykey\r\nmd mykey\r\nma counter\r\nmn\r\n"
  },
  {
    "path": "fuzz/seeds/memcache/multiget.mc",
    "chars": 80,
    "preview": "set k1 0 0 1\r\na\r\nset k2 0 0 1\r\nb\r\nset k3 0 0 1\r\nc\r\nget k1 k2 k3\r\ngets k1 k2 k3\r\n"
  },
  {
    "path": "fuzz/seeds/memcache/noreply.mc",
    "chars": 136,
    "preview": "set key1 0 0 3 noreply\r\nabc\r\nadd key2 0 0 3 noreply\r\ndef\r\nreplace key1 0 0 3 noreply\r\nxyz\r\nincr counter 1 noreply\r\ndelet"
  },
  {
    "path": "fuzz/seeds/memcache/set_get.mc",
    "chars": 35,
    "preview": "set mykey 0 0 5\r\nhello\r\nget mykey\r\n"
  },
  {
    "path": "fuzz/seeds/memcache/stats_version.mc",
    "chars": 22,
    "preview": "stats\r\nversion\r\nquit\r\n"
  },
  {
    "path": "fuzz/seeds/resp/acl.resp",
    "chars": 48,
    "preview": "*2\r\n$3\r\nACL\r\n$6\r\nWHOAMI\r\n*2\r\n$3\r\nACL\r\n$4\r\nLIST\r\n"
  },
  {
    "path": "fuzz/seeds/resp/acl_ops.resp",
    "chars": 140,
    "preview": "*2\n$3\nACL\n$6\nWHOAMI\n*2\n$3\nACL\n$4\nLIST\n*2\n$3\nACL\n$5\nUSERS\n*3\n$3\nACL\n$3\nCAT\n*2\n$3\nACL\n$7\nGENPASS\n*2\n$7\nCOMMAND\n$5\nCOUNT\n*2"
  },
  {
    "path": "fuzz/seeds/resp/acl_ops2.resp",
    "chars": 474,
    "preview": "*2\n$3\nACL\n$6\nWHOAMI\n*2\n$3\nACL\n$4\nLIST\n*2\n$3\nACL\n$5\nUSERS\n*3\n$3\nACL\n$3\nCAT\n$6\nstring\n*2\n$3\nACL\n$7\nGENPASS\n*4\n$3\nACL\n$7\nSE"
  },
  {
    "path": "fuzz/seeds/resp/bf_add.resp",
    "chars": 114,
    "preview": "*4\n$10\nBF.RESERVE\n$7\nmybloom\n$4\n0.01\n$4\n1000\n*3\n$6\nBF.ADD\n$7\nmybloom\n$5\nitem1\n*3\n$9\nBF.EXISTS\n$7\nmybloom\n$5\nitem1\n"
  },
  {
    "path": "fuzz/seeds/resp/bitfield.resp",
    "chars": 40,
    "preview": "*6\n$8\nBITFIELD\n$3\nkey\n$3\nGET\n$2\nu8\n$1\n0\n"
  }
]

// ... and 814 more files (download for full content)

About this extraction

This page contains the full source code of the dragonflydb/dragonfly GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1014 files (8.9 MB), approximately 2.4M tokens, and a symbol index with 7250 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!