Skip to content

Commit 11251a8

Browse files
authored
refactor(meta-service): move kvapi-test-suite to separate crate (#18279)
* chore(meta-service): minor refine on sequence generator * chore: udpate meta-client requirements * refactor(meta-service): move kvapi-test-suite to separate crate
1 parent 6533304 commit 11251a8

File tree

15 files changed

+87
-27
lines changed

15 files changed

+87
-27
lines changed

Cargo.lock

Lines changed: 14 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ members = [
9898
"src/meta/control",
9999
"src/meta/ee",
100100
"src/meta/kvapi",
101+
"src/meta/kvapi-test-suite",
101102
"src/meta/process",
102103
"src/meta/proto-conv",
103104
"src/meta/protos",
@@ -149,6 +150,7 @@ databend-common-meta-cache = { path = "src/meta/cache" }
149150
databend-common-meta-client = { path = "src/meta/client" }
150151
databend-common-meta-control = { path = "src/meta/control" }
151152
databend-common-meta-kvapi = { path = "src/meta/kvapi" }
153+
databend-common-meta-kvapi-test-suite = { path = "src/meta/kvapi-test-suite" }
152154
databend-common-meta-process = { path = "src/meta/process" }
153155
databend-common-meta-raft-store = { path = "src/meta/raft-store" }
154156
databend-common-meta-semaphore = { path = "src/meta/semaphore" }

src/meta/api/src/sequence_api_impl.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,14 @@ impl<KV: kvapi::KVApi<Error = MetaError> + ?Sized> SequenceApi for KV {
112112
// V1 sequence stores the value in a separate key.
113113

114114
let storage_ident = SequenceStorageIdent::new_from(name_ident.clone());
115-
let x = self.get_pb(&storage_ident).await?;
115+
let storage_value = self.get_pb(&storage_ident).await?;
116116

117-
let next_available = x.map(|seqv| *seqv.data.deref()).unwrap_or(0);
117+
// If the storage value is removed, the sequence meta must also be removed.
118+
let Some(storage_value) = storage_value else {
119+
return Ok(None);
120+
};
121+
122+
let next_available = *storage_value.data.deref();
118123

119124
seq_meta.data.current = next_available;
120125
Ok(Some(seq_meta))
@@ -216,7 +221,7 @@ impl<KV: kvapi::KVApi<Error = MetaError> + ?Sized> SequenceApi for KV {
216221
});
217222
}
218223
Err(_e) => {
219-
// continue
224+
// conflict, continue
220225
}
221226
}
222227
}

src/meta/api/src/sequence_nextval_impl.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,6 @@ where KV: kvapi::KVApi<Error = MetaError> + ?Sized
5757
) -> Result<Result<(u64, u64), &'static str>, KVAppError> {
5858
debug!("{}", func_name!());
5959

60-
let sequence_seq = self.sequence_meta.seq;
61-
6260
let start = self.sequence_meta.current;
6361
if u64::MAX - start < count {
6462
return Err(KVAppError::AppError(AppError::SequenceError(
@@ -77,7 +75,7 @@ where KV: kvapi::KVApi<Error = MetaError> + ?Sized
7775
// update meta
7876
self.sequence_meta.current += count;
7977

80-
let condition = vec![txn_cond_eq_seq(&self.ident, sequence_seq)];
78+
let condition = vec![txn_cond_eq_seq(&self.ident, self.sequence_meta.seq)];
8179
let if_then = vec![
8280
txn_op_put_pb(&self.ident, &self.sequence_meta.data, None)?, // name -> meta
8381
];
@@ -111,14 +109,14 @@ where KV: kvapi::KVApi<Error = MetaError> + ?Sized
111109
let storage_ident = SequenceStorageIdent::new_from(self.ident.clone());
112110
let storage_key = storage_ident.to_string_key();
113111

114-
let sequence_seq = self.sequence_meta.seq;
115-
let sequence_meta = self.sequence_meta.data.clone();
112+
let sequence_meta = &self.sequence_meta.data;
116113

117114
let delta = count * (self.sequence_meta.step as u64);
118115

119-
let txn = TxnRequest::new(vec![txn_cond_eq_seq(&self.ident, sequence_seq)], vec![
120-
TxnOp::fetch_add_u64(&storage_key, delta as i64),
121-
]);
116+
let txn = TxnRequest::new(
117+
vec![txn_cond_eq_seq(&self.ident, self.sequence_meta.seq)],
118+
vec![TxnOp::fetch_add_u64(&storage_key, delta as i64)],
119+
);
122120

123121
let (succ, responses) = send_txn(self.kv_api, txn).await?;
124122

src/meta/client/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ pub static METACLI_COMMIT_SEMVER: LazyLock<Version> = LazyLock::new(|| {
156156
/// - 2025-06-26: since TODO: add when merge
157157
/// 🖥 server: add `FetchAddU64.match_seq`
158158
///
159+
/// - 2025-07-01: since TODO: add when enables sequence v1
160+
/// 👥 client: new sequence API depends on `FetchAddU64`.
161+
///
159162
/// Server feature set:
160163
/// ```yaml
161164
/// server_features:

src/meta/kvapi-test-suite/Cargo.toml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[package]
2+
name = "databend-common-meta-kvapi-test-suite"
3+
version = { workspace = true }
4+
authors = { workspace = true }
5+
license = { workspace = true }
6+
publish = { workspace = true }
7+
edition = { workspace = true }
8+
9+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
10+
11+
[dependencies]
12+
anyhow = { workspace = true }
13+
databend-common-meta-kvapi = { workspace = true }
14+
databend-common-meta-types = { workspace = true }
15+
display-more = { workspace = true }
16+
fastrace = { workspace = true }
17+
log = { workspace = true }
18+
tokio = { workspace = true }
19+
20+
[lints]
21+
workspace = true

src/meta/kvapi-test-suite/src/lib.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Copyright 2021 Datafuse Labs
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
#![allow(clippy::uninlined_format_args)]
16+
17+
mod test_suite;
18+
pub use test_suite::TestSuite;

src/meta/kvapi/src/kvapi/test_suite.rs renamed to src/meta/kvapi-test-suite/src/test_suite.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
use std::time::Duration;
1616

17+
use databend_common_meta_kvapi::kvapi;
1718
use databend_common_meta_types::protobuf as pb;
1819
use databend_common_meta_types::protobuf::BooleanExpression;
1920
use databend_common_meta_types::protobuf::FetchAddU64Response;
@@ -48,11 +49,9 @@ use fastrace::func_path;
4849
use log::debug;
4950
use log::info;
5051

51-
use crate::kvapi;
52-
5352
pub struct TestSuite {}
5453

55-
impl kvapi::TestSuite {
54+
impl TestSuite {
5655
#[fastrace::trace]
5756
pub async fn test_all<KV, B>(&self, builder: B) -> anyhow::Result<()>
5857
where
@@ -115,7 +114,7 @@ impl kvapi::TestSuite {
115114
}
116115
}
117116

118-
impl kvapi::TestSuite {
117+
impl TestSuite {
119118
#[fastrace::trace]
120119
pub async fn kv_write_read<KV: kvapi::KVApi>(&self, kv: &KV) -> anyhow::Result<()> {
121120
info!("--- kvapi::KVApiTestSuite::kv_write_read() start");
@@ -1601,7 +1600,7 @@ impl kvapi::TestSuite {
16011600
}
16021601

16031602
/// Test that write and read should be forwarded to leader
1604-
impl kvapi::TestSuite {
1603+
impl TestSuite {
16051604
#[fastrace::trace]
16061605
pub async fn kv_write_read_across_nodes<KV: kvapi::KVApi>(
16071606
&self,

src/meta/kvapi/Cargo.toml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,10 @@ anyhow = { workspace = true }
1313
async-trait = { workspace = true }
1414
databend-common-meta-app-types = { workspace = true }
1515
databend-common-meta-types = { workspace = true }
16-
display-more = { workspace = true }
17-
fastrace = { workspace = true }
1816
futures-util = { workspace = true }
1917
log = { workspace = true }
2018
serde = { workspace = true }
2119
thiserror = { workspace = true }
22-
tokio = { workspace = true }
2320

2421
[lints]
2522
workspace = true

src/meta/kvapi/src/kvapi/mod.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ mod key_parser;
2323
mod message;
2424
mod pair;
2525
mod prefix;
26-
mod test_suite;
2726
mod value;
2827
mod value_with_name;
2928

@@ -52,6 +51,5 @@ pub use pair::BasicPair;
5251
pub use pair::Pair;
5352
pub use pair::SeqPair;
5453
pub use prefix::prefix_to_range;
55-
pub use test_suite::TestSuite;
5654
pub use value::Value;
5755
pub use value_with_name::ValueWithName;

0 commit comments

Comments
 (0)