rocketmq_remoting/protocol/header/namesrv/
broker_request.rs1use std::fmt::Display;
18
19use cheetah_string::CheetahString;
20use rocketmq_macros::RequestHeaderCodecV2;
21use serde::Deserialize;
22use serde::Serialize;
23
24#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
25#[serde(rename_all = "camelCase")]
26pub struct UnRegisterBrokerRequestHeader {
27 #[required]
28 pub broker_name: CheetahString,
29
30 #[required]
31 pub broker_addr: CheetahString,
32
33 #[required]
34 pub cluster_name: CheetahString,
35
36 #[required]
37 pub broker_id: u64,
38}
39
40impl Display for UnRegisterBrokerRequestHeader {
41 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
42 write!(
43 f,
44 "UnRegisterBrokerRequestHeader {{ brokerName: {}, brokerAddr: {}, clusterName: {}, \
45 brokerId: {} }}",
46 self.broker_name, self.broker_addr, self.cluster_name, self.broker_id
47 )
48 }
49}
50
51#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
52#[serde(rename_all = "camelCase")]
53pub struct BrokerHeartbeatRequestHeader {
54 #[required]
55 pub cluster_name: CheetahString,
56
57 #[required]
58 pub broker_addr: CheetahString,
59
60 #[required]
61 pub broker_name: CheetahString,
62 pub broker_id: Option<i64>,
63 pub epoch: Option<i32>,
64 pub max_offset: Option<i64>,
65 pub confirm_offset: Option<i64>,
66 pub heartbeat_timeout_mills: Option<i64>,
67 pub election_priority: Option<i32>,
68}
69
70#[derive(Debug, Clone, Deserialize, Serialize, Default, RequestHeaderCodecV2)]
71#[serde(rename_all = "camelCase")]
72pub struct GetBrokerMemberGroupRequestHeader {
73 #[required]
74 pub cluster_name: CheetahString,
75 #[required]
76 pub broker_name: CheetahString,
77}
78
79impl GetBrokerMemberGroupRequestHeader {
80 pub fn new(
84 cluster_name: impl Into<CheetahString>,
85 broker_name: impl Into<CheetahString>,
86 ) -> Self {
87 Self {
88 cluster_name: cluster_name.into(),
89
90 broker_name: broker_name.into(),
91 }
92 }
93}
94
95#[cfg(test)]
130mod tests {
131 use cheetah_string::CheetahString;
132
133 use super::*;
134
135 #[test]
136 fn new_creates_instance_with_correct_values() {
137 let header = GetBrokerMemberGroupRequestHeader::new("testCluster", "testBroker");
138 assert_eq!(header.cluster_name, CheetahString::from("testCluster"));
139 assert_eq!(header.broker_name, CheetahString::from("testBroker"));
140 }
141
142 #[test]
143 fn new_creates_instance_with_empty_values() {
144 let header = GetBrokerMemberGroupRequestHeader::new("", "");
145 assert_eq!(header.cluster_name, CheetahString::from(""));
146 assert_eq!(header.broker_name, CheetahString::from(""));
147 }
148
149 #[test]
150 fn new_creates_instance_with_long_values() {
151 let long_string = "a".repeat(1000);
152 let header = GetBrokerMemberGroupRequestHeader::new(&long_string, &long_string);
153 assert_eq!(header.cluster_name, CheetahString::from(&long_string));
154 assert_eq!(header.broker_name, CheetahString::from(&long_string));
155 }
156
157 #[test]
158 fn broker_heartbeat_request_header_with_required_fields() {
159 let header = BrokerHeartbeatRequestHeader {
160 cluster_name: CheetahString::from("testCluster"),
161 broker_addr: CheetahString::from("testAddr"),
162 broker_name: CheetahString::from("testBroker"),
163 broker_id: Some(1),
164 epoch: Some(1),
165 max_offset: Some(100),
166 confirm_offset: Some(50),
167 heartbeat_timeout_mills: Some(3000),
168 election_priority: Some(1),
169 };
170 assert_eq!(header.cluster_name, CheetahString::from("testCluster"));
171 assert_eq!(header.broker_addr, CheetahString::from("testAddr"));
172 assert_eq!(header.broker_name, CheetahString::from("testBroker"));
173 assert_eq!(header.broker_id, Some(1));
174 assert_eq!(header.epoch, Some(1));
175 assert_eq!(header.max_offset, Some(100));
176 assert_eq!(header.confirm_offset, Some(50));
177 assert_eq!(header.heartbeat_timeout_mills, Some(3000));
178 assert_eq!(header.election_priority, Some(1));
179 }
180
181 #[test]
182 fn broker_heartbeat_request_header_with_optional_fields() {
183 let header = BrokerHeartbeatRequestHeader {
184 cluster_name: CheetahString::from("testCluster"),
185 broker_addr: CheetahString::from("testAddr"),
186 broker_name: CheetahString::from("testBroker"),
187 broker_id: None,
188 epoch: None,
189 max_offset: None,
190 confirm_offset: None,
191 heartbeat_timeout_mills: None,
192 election_priority: None,
193 };
194 assert_eq!(header.cluster_name, CheetahString::from("testCluster"));
195 assert_eq!(header.broker_addr, CheetahString::from("testAddr"));
196 assert_eq!(header.broker_name, CheetahString::from("testBroker"));
197 assert!(header.broker_id.is_none());
198 assert!(header.epoch.is_none());
199 assert!(header.max_offset.is_none());
200 assert!(header.confirm_offset.is_none());
201 assert!(header.heartbeat_timeout_mills.is_none());
202 assert!(header.election_priority.is_none());
203 }
204
205 #[test]
206 fn broker_heartbeat_request_header_with_empty_values() {
207 let header = BrokerHeartbeatRequestHeader {
208 cluster_name: CheetahString::from(""),
209 broker_addr: CheetahString::from(""),
210 broker_name: CheetahString::from(""),
211 broker_id: None,
212 epoch: None,
213 max_offset: None,
214 confirm_offset: None,
215 heartbeat_timeout_mills: None,
216 election_priority: None,
217 };
218 assert_eq!(header.cluster_name, CheetahString::from(""));
219 assert_eq!(header.broker_addr, CheetahString::from(""));
220 assert_eq!(header.broker_name, CheetahString::from(""));
221 assert!(header.broker_id.is_none());
222 assert!(header.epoch.is_none());
223 assert!(header.max_offset.is_none());
224 assert!(header.confirm_offset.is_none());
225 assert!(header.heartbeat_timeout_mills.is_none());
226 assert!(header.election_priority.is_none());
227 }
228
229 #[test]
230 fn broker_heartbeat_request_header_with_long_values() {
231 let long_string = "a".repeat(1000);
232 let header = BrokerHeartbeatRequestHeader {
233 cluster_name: CheetahString::from(&long_string),
234 broker_addr: CheetahString::from(&long_string),
235 broker_name: CheetahString::from(&long_string),
236 broker_id: Some(1),
237 epoch: Some(1),
238 max_offset: Some(100),
239 confirm_offset: Some(50),
240 heartbeat_timeout_mills: Some(3000),
241 election_priority: Some(1),
242 };
243 assert_eq!(header.cluster_name, CheetahString::from(&long_string));
244 assert_eq!(header.broker_addr, CheetahString::from(&long_string));
245 assert_eq!(header.broker_name, CheetahString::from(&long_string));
246 assert_eq!(header.broker_id, Some(1));
247 assert_eq!(header.epoch, Some(1));
248 assert_eq!(header.max_offset, Some(100));
249 assert_eq!(header.confirm_offset, Some(50));
250 assert_eq!(header.heartbeat_timeout_mills, Some(3000));
251 assert_eq!(header.election_priority, Some(1));
252 }
253}