@@ -19,7 +19,7 @@ use std::sync::Arc;
19
19
20
20
use bytes:: Bytes ;
21
21
use rocketmq_common:: {
22
- common:: { mix_all, mq_version:: RocketMqVersion } ,
22
+ common:: { mix_all, mq_version:: RocketMqVersion , namesrv :: namesrv_config :: NamesrvConfig } ,
23
23
CRC32Utils ,
24
24
} ;
25
25
use rocketmq_remoting:: {
@@ -29,19 +29,23 @@ use rocketmq_remoting::{
29
29
broker_body:: register_broker_body:: RegisterBrokerBody ,
30
30
topic_info_wrapper:: topic_config_wrapper:: TopicConfigAndMappingSerializeWrapper ,
31
31
} ,
32
- header:: broker_request_header:: RegisterBrokerRequestHeader ,
32
+ header:: {
33
+ broker_request_header:: RegisterBrokerRequestHeader ,
34
+ namesrv:: kv_config_request_header:: PutKVConfigRequestHeader ,
35
+ } ,
33
36
remoting_command:: RemotingCommand ,
34
37
RemotingSerializable ,
35
38
} ,
36
39
runtime:: processor:: RequestProcessor ,
37
40
} ;
38
41
use tracing:: warn;
39
42
40
- use crate :: route:: route_info_manager:: RouteInfoManager ;
43
+ use crate :: { route:: route_info_manager:: RouteInfoManager , KVConfigManager } ;
41
44
42
45
#[ derive( Debug , Clone ) ]
43
46
pub struct DefaultRequestProcessor {
44
47
route_info_manager : Arc < parking_lot:: RwLock < RouteInfoManager > > ,
48
+ kvconfig_manager : Arc < parking_lot:: RwLock < KVConfigManager > > ,
45
49
}
46
50
47
51
impl RequestProcessor for DefaultRequestProcessor {
@@ -63,18 +67,47 @@ impl RequestProcessor for DefaultRequestProcessor {
63
67
}
64
68
}
65
69
70
+ ///implementation put KV config
71
+ impl DefaultRequestProcessor {
72
+ fn put_kv_config ( & mut self , request : RemotingCommand ) -> RemotingCommand {
73
+ let request_header = request
74
+ . decode_command_custom_header :: < PutKVConfigRequestHeader > ( )
75
+ . unwrap ( ) ;
76
+ //check namespace and key, need?
77
+ if request_header. namespace . is_empty ( ) || request_header. key . is_empty ( ) {
78
+ return RemotingCommand :: create_response_command_with_code (
79
+ RemotingSysResponseCode :: SystemError ,
80
+ )
81
+ . set_remark ( Some ( String :: from ( "namespace or key is empty" ) ) ) ;
82
+ }
83
+ self . kvconfig_manager . write ( ) . put_kv_config (
84
+ request_header. namespace . as_str ( ) ,
85
+ request_header. key . as_str ( ) ,
86
+ request_header. value . as_str ( ) ,
87
+ ) ;
88
+ RemotingCommand :: create_response_command ( )
89
+ }
90
+ }
91
+
66
92
#[ allow( clippy:: new_without_default) ]
67
93
impl DefaultRequestProcessor {
68
- pub fn new ( ) -> Self {
94
+ pub fn new ( namesrv_config : NamesrvConfig ) -> Self {
69
95
Self {
70
96
route_info_manager : Arc :: new ( parking_lot:: RwLock :: new ( RouteInfoManager :: new ( ) ) ) ,
97
+ kvconfig_manager : Arc :: new ( parking_lot:: RwLock :: new ( KVConfigManager :: new (
98
+ namesrv_config,
99
+ ) ) ) ,
71
100
}
72
101
}
73
102
74
103
pub ( crate ) fn new_with_route_info_manager (
75
104
route_info_manager : Arc < parking_lot:: RwLock < RouteInfoManager > > ,
105
+ kvconfig_manager : Arc < parking_lot:: RwLock < KVConfigManager > > ,
76
106
) -> Self {
77
- Self { route_info_manager }
107
+ Self {
108
+ route_info_manager,
109
+ kvconfig_manager,
110
+ }
78
111
}
79
112
}
80
113
impl DefaultRequestProcessor {
0 commit comments