Skip to content

Commit 199c5a2

Browse files
authored
[ISSUE #84] ⚡ Namesrv support get kv list by namespace (request code 219) (#94)
1 parent 6362710 commit 199c5a2

File tree

7 files changed

+64
-100
lines changed

7 files changed

+64
-100
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ Feature list:
8686
| Put KV Config | 100 | :sparkling_heart: :white_check_mark: | |
8787
| Get KV Config | 101 | :sparkling_heart: :white_check_mark: | |
8888
| Delete KV Config | 102 | :sparkling_heart: :white_check_mark: | |
89-
| Get kv list by namespace | 219 | :broken_heart: :x: | |
89+
| Get kv list by namespace | 219 | :sparkling_heart: :white_check_mark: | |
9090
| Query Data Version | 322 | :sparkling_heart: :white_check_mark: | |
9191
| Register Broker | 103 | :heart: | |
9292
| Unregister Broker | 104 | :broken_heart: :x: | |
@@ -97,7 +97,7 @@ Feature list:
9797
| Add write perm of brober | 327 | :sparkling_heart: :white_check_mark: | |
9898
| Get all topic list from name server | 206 | :sparkling_heart: :white_check_mark: | |
9999
| Delete topic in name server | 216 | :sparkling_heart: :white_check_mark: | |
100-
| Register topic in name server | 217 | :broken_heart: :x: | |
100+
| Register topic in name server | 217 | :sparkling_heart: :white_check_mark: | |
101101
| Get topics by cluster | 224 | :broken_heart: :x: | |
102102
| Get system topic list from name server | 304 | :broken_heart: :x: | |
103103
| Get unit topic list | 311 | :broken_heart: :x: | |

rocketmq-namesrv/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ Feature list:
1919
| Put KV Config | 100 | :sparkling_heart: :white_check_mark: | |
2020
| Get KV Config | 101 | :sparkling_heart: :white_check_mark: | |
2121
| Delete KV Config | 102 | :sparkling_heart: :white_check_mark: | |
22-
| Get kv list by namespace | 219 | :broken_heart: :x: | |
22+
| Get kv list by namespace | 219 | :sparkling_heart: :white_check_mark: | |
2323
| Query Data Version | 322 | :sparkling_heart: :white_check_mark: | |
2424
| Register Broker | 103 | :heart: :white_check_mark: | |
2525
| Unregister Broker | 104 | :broken_heart: :x: | |
@@ -30,7 +30,7 @@ Feature list:
3030
| Add write perm of brober | 327 | :sparkling_heart: :white_check_mark: | |
3131
| Get all topic list from name server | 206 | :sparkling_heart: :white_check_mark: | |
3232
| Delete topic in name server | 216 | :sparkling_heart: :white_check_mark: | |
33-
| Register topic in name server | 217 | :broken_heart: :x: | |
33+
| Register topic in name server | 217 | :sparkling_heart: :white_check_mark: | |
3434
| Get topics by cluster | 224 | :broken_heart: :x: | |
3535
| Get system topic list from name server | 304 | :broken_heart: :x: | |
3636
| Get unit topic list | 311 | :broken_heart: :x: | |

rocketmq-namesrv/src/processor/default_request_processor.rs

+25-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,10 @@ use rocketmq_common::{
2323
CRC32Utils,
2424
};
2525
use rocketmq_remoting::{
26-
code::{request_code::RequestCode, response_code::RemotingSysResponseCode},
26+
code::{
27+
request_code::RequestCode,
28+
response_code::{RemotingSysResponseCode, ResponseCode},
29+
},
2730
protocol::{
2831
body::{
2932
broker_body::{
@@ -39,7 +42,7 @@ use rocketmq_remoting::{
3942
},
4043
kv_config_header::{
4144
DeleteKVConfigRequestHeader, GetKVConfigRequestHeader, GetKVConfigResponseHeader,
42-
PutKVConfigRequestHeader,
45+
GetKVListByNamespaceRequestHeader, PutKVConfigRequestHeader,
4346
},
4447
perm_broker_header::{
4548
AddWritePermOfBrokerRequestHeader, AddWritePermOfBrokerResponseHeader,
@@ -92,6 +95,7 @@ impl RequestProcessor for DefaultRequestProcessor {
9295
}
9396
Some(RequestCode::DeleteTopicInNamesrv) => self.delete_topic_in_name_srv(request),
9497
Some(RequestCode::RegisterTopicInNamesrv) => self.register_topic_to_name_srv(request),
98+
Some(RequestCode::GetKvlistByNamespace) => self.get_kv_list_by_namespace(request),
9599
_ => RemotingCommand::create_response_command_with_code(
96100
RemotingSysResponseCode::SystemError,
97101
),
@@ -394,6 +398,25 @@ impl DefaultRequestProcessor {
394398
}
395399
RemotingCommand::create_response_command()
396400
}
401+
402+
fn get_kv_list_by_namespace(&mut self, request: RemotingCommand) -> RemotingCommand {
403+
let request_header = request
404+
.decode_command_custom_header::<GetKVListByNamespaceRequestHeader>()
405+
.unwrap();
406+
let value = self
407+
.kvconfig_manager
408+
.write()
409+
.get_kv_list_by_namespace(request_header.namespace.as_str());
410+
if value.is_some() {
411+
return RemotingCommand::create_response_command().set_body(value);
412+
}
413+
RemotingCommand::create_response_command_with_code(ResponseCode::QueryNotFound).set_remark(
414+
Some(format!(
415+
"No config item, Namespace: {}",
416+
request_header.namespace.as_str()
417+
)),
418+
)
419+
}
397420
}
398421

399422
fn extract_register_topic_config_from_request(

rocketmq-remoting/src/code/response_code.rs

-12
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,6 @@ pub enum RemotingSysResponseCode {
2323
TransactionFailed = 4,
2424
}
2525

26-
/*impl Into<i32> for RemotingSysResponseCode {
27-
fn into(self) -> i32 {
28-
match self {
29-
RemotingSysResponseCode::Success => 0,
30-
RemotingSysResponseCode::SystemError => 1,
31-
RemotingSysResponseCode::SystemBusy => 2,
32-
RemotingSysResponseCode::RequestCodeNotSupported => 3,
33-
RemotingSysResponseCode::TransactionFailed => 4,
34-
}
35-
}
36-
}*/
37-
3826
impl From<RemotingSysResponseCode> for i32 {
3927
fn from(value: RemotingSysResponseCode) -> Self {
4028
value as i32

rocketmq-remoting/src/protocol/header.rs

-1
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,4 @@
1616
*/
1717
pub mod broker;
1818
pub mod client_request_header;
19-
pub mod kv_config_request_header;
2019
pub mod namesrv;

rocketmq-remoting/src/protocol/header/kv_config_request_header.rs

-81
This file was deleted.

rocketmq-remoting/src/protocol/header/namesrv/kv_config_header.rs

+35
Original file line numberDiff line numberDiff line change
@@ -200,3 +200,38 @@ impl FromMap for DeleteKVConfigRequestHeader {
200200
})
201201
}
202202
}
203+
204+
pub struct GetKVListByNamespaceRequestHeader {
205+
pub namespace: String,
206+
}
207+
208+
impl GetKVListByNamespaceRequestHeader {
209+
const NAMESPACE: &'static str = "namespace";
210+
211+
pub fn new(namespace: impl Into<String>) -> Self {
212+
Self {
213+
namespace: namespace.into(),
214+
}
215+
}
216+
}
217+
218+
impl CommandCustomHeader for GetKVListByNamespaceRequestHeader {
219+
fn to_map(&self) -> Option<HashMap<String, String>> {
220+
Some(HashMap::from([(
221+
GetKVListByNamespaceRequestHeader::NAMESPACE.to_string(),
222+
self.namespace.clone(),
223+
)]))
224+
}
225+
}
226+
227+
impl FromMap for GetKVListByNamespaceRequestHeader {
228+
type Target = GetKVListByNamespaceRequestHeader;
229+
230+
fn from(map: &HashMap<String, String>) -> Option<Self::Target> {
231+
Some(GetKVListByNamespaceRequestHeader {
232+
namespace: map
233+
.get(GetKVListByNamespaceRequestHeader::NAMESPACE)
234+
.cloned()?,
235+
})
236+
}
237+
}

0 commit comments

Comments
 (0)