refactor: flatten kvapi crate by removing redundant kvapi/ subdirectory#62
Merged
drmingdrmer merged 1 commit intodatabendlabs:mainfrom Feb 21, 2026
Merged
Conversation
The `kvapi` crate had a redundant nesting layer where `src/lib.rs` declared a single `pub mod kvapi` mapping to `src/kvapi/mod.rs`. This forced callers to write `databend_meta_kvapi::kvapi::Key` instead of `databend_meta_kvapi::Key`. All 15 source files are moved from `src/kvapi/` to `src/`, and `kvapi/mod.rs` is merged into `lib.rs`. Internal `use crate::kvapi::X` imports become `use crate::X`; files that used the bare `use crate::kvapi` module alias switch to `use crate as kvapi` to preserve unqualified `kvapi::KVApi` syntax in trait bounds and impl blocks. External consumers follow the same pattern: `databend_meta_kvapi::kvapi::X` → `databend_meta_kvapi::X`.
xp-trumpet
approved these changes
Feb 21, 2026
Collaborator
xp-trumpet
left a comment
There was a problem hiding this comment.
@xp-trumpet partially reviewed 41 files and all commit messages.
Reviewable status:complete! all files reviewed, all discussions resolved (waiting on drmingdrmer).
There was a problem hiding this comment.
Pull request overview
Flattens the databend-meta-kvapi crate’s module layout by removing the redundant kvapi/ nesting, and updates in-repo consumers to use the new top-level exports (e.g. databend_meta_kvapi::KVApi instead of databend_meta_kvapi::kvapi::KVApi).
Changes:
- Replace
pub mod kvapiindirection with a flat crate root (src/lib.rsnow declares modules and re-exports public API directly). - Update imports across server/client crates and integration tests to the new
databend_meta_kvapi::*paths (oruse databend_meta_kvapi as kvapiwhere akvapi::...qualifier is desired). - Move previously nested items (e.g.
message,list_options) to top-level modules and re-export them from the crate root.
Reviewed changes
Copilot reviewed 39 out of 41 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| crates/server/service/tests/it/meta_node/t90_time_revert_cross_snapshot_boundary.rs | Update KvApiExt import to new top-level path. |
| crates/server/service/tests/it/meta_node/meta_node_lifecycle.rs | Update KvApiExt import to new top-level path. |
| crates/server/service/tests/it/meta_node/meta_node_kv_api_expire.rs | Update KvApiExt import to new top-level path. |
| crates/server/service/tests/it/grpc/t53_metasrv_grpc_snapshot_keys_layout.rs | Update KvApiExt import to new top-level path. |
| crates/server/service/tests/it/grpc/metasrv_grpc_watch.rs | Update KvApiExt import to new top-level path. |
| crates/server/service/tests/it/grpc/metasrv_grpc_kv_transaction.rs | Update KvApiExt import to new top-level path. |
| crates/server/service/tests/it/grpc/metasrv_grpc_kv_read_v1.rs | Update KvApiExt import to new top-level path. |
| crates/server/service/tests/it/grpc/metasrv_grpc_kv_list.rs | Update KvApiExt import to new top-level path. |
| crates/server/service/tests/it/grpc/metasrv_grpc_kv_get_many.rs | Update KvApiExt import to new top-level path. |
| crates/server/service/tests/it/grpc/metasrv_grpc_kv_api_restart_cluster.rs | Update KvApiExt import to new top-level path. |
| crates/server/service/tests/it/grpc/metasrv_grpc_export.rs | Update KvApiExt import to new top-level path. |
| crates/server/service/tests/it/grpc/metasrv_grpc_api.rs | Update KvApiExt / UpsertKVReply imports to new top-level paths. |
| crates/server/service/tests/it/grpc/metasrv_connection_error.rs | Update KvApiExt import to new top-level path. |
| crates/server/service/src/meta_service/meta_leader.rs | Update KVApi, KvApiExt, ListOptions imports to new top-level paths. |
| crates/server/service/src/meta_node/meta_handle.rs | Update UpsertKVReply import to new top-level path. |
| crates/server/service/src/message.rs | Update request/reply type imports (GetKVReq, ListKVReq, etc.) to new top-level paths. |
| crates/server/raft-store/src/sm_v003/sm_v003_test.rs | Update KVApi / ListOptions imports to new top-level paths. |
| crates/server/raft-store/src/sm_v003/sm_v003_kv_api.rs | Switch to use databend_meta_kvapi as kvapi and update helper/type imports to top-level. |
| crates/client/kvapi/src/value_with_name.rs | Replace use crate::kvapi with use crate as kvapi after flattening. |
| crates/client/kvapi/src/value.rs | Replace use crate::kvapi with use crate as kvapi after flattening. |
| crates/client/kvapi/src/testing.rs | Update intra-crate imports to flattened module layout. |
| crates/client/kvapi/src/pair.rs | Replace use crate::kvapi with use crate as kvapi after flattening. |
| crates/client/kvapi/src/message.rs | New top-level message/request/reply types module (moved out of nested kvapi/). |
| crates/client/kvapi/src/list_options.rs | New top-level ListOptions module (moved out of nested kvapi/). |
| crates/client/kvapi/src/lib.rs | Replace pub mod kvapi; with direct module declarations + pub use re-exports. |
| crates/client/kvapi/src/kvapi/mod.rs | Remove old nested kvapi module root. |
| crates/client/kvapi/src/kv_api_ext.rs | Update imports and test module to flattened paths. |
| crates/client/kvapi/src/key_parser.rs | Update helper/type imports to flattened module layout. |
| crates/client/kvapi/src/key_codec.rs | Update imports to flattened module layout. |
| crates/client/kvapi/src/key_builder.rs | Update helper imports and test import paths to flattened module layout. |
| crates/client/kvapi/src/key.rs | Update imports and test imports to flattened module layout. |
| crates/client/kvapi/src/item.rs | Update Key import to new top-level path. |
| crates/client/kvapi/src/helper.rs | Update KeyError import to new top-level path. |
| crates/client/kvapi/src/dir_name.rs | Update imports and test imports to flattened module layout. |
| crates/client/kvapi/src/api.rs | Update ListOptions import and keep kvapi::KVApi naming via use crate as kvapi. |
| crates/client/kvapi-tests/tests/it/metasrv_builder.rs | Switch to use databend_meta_kvapi as kvapi alias. |
| crates/client/kvapi-test-suite/src/kvapi_test_suite.rs | Switch to use databend_meta_kvapi as kvapi alias; update KVStream import. |
| crates/client/client/tests/it/grpc_client.rs | Update KvApiExt import to new top-level path. |
| crates/client/client/src/kvapi_impl.rs | Switch to use databend_meta_kvapi as kvapi alias and update helper/type imports. |
| crates/client/client/src/grpc_client.rs | Update fail_fast import to new top-level path. |
| crates/client/client/src/client_handle.rs | Update KVStream return type to new top-level path. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changelog
refactor: flatten kvapi crate by removing redundant kvapi/ subdirectory
The
kvapicrate had a redundant nesting layer wheresrc/lib.rsdeclareda single
pub mod kvapimapping tosrc/kvapi/mod.rs. This forced callersto write
databend_meta_kvapi::kvapi::Keyinstead ofdatabend_meta_kvapi::Key.All 15 source files are moved from
src/kvapi/tosrc/, andkvapi/mod.rsis merged into
lib.rs. Internaluse crate::kvapi::Ximports becomeuse crate::X; files that used the bareuse crate::kvapimodule aliasswitch to
use crate as kvapito preserve unqualifiedkvapi::KVApisyntaxin trait bounds and impl blocks. External consumers follow the same pattern:
databend_meta_kvapi::kvapi::X→databend_meta_kvapi::X.