Skip to content

Commit b25f1c7

Browse files
committed
Add ability to list all lbtargets over gRPC
1 parent ae9581c commit b25f1c7

File tree

3 files changed

+43
-18
lines changed

3 files changed

+43
-18
lines changed

cli/dpservice-cli/cmd/list_loadbalancer_targets.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,6 @@ func (o *ListLoadBalancerTargetOptions) AddFlags(fs *pflag.FlagSet) {
5454
}
5555

5656
func (o *ListLoadBalancerTargetOptions) MarkRequiredFlags(cmd *cobra.Command) error {
57-
for _, name := range []string{"lb-id"} {
58-
if err := cmd.MarkFlagRequired(name); err != nil {
59-
return err
60-
}
61-
}
6257
return nil
6358
}
6459

src/dp_lb.c

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -249,20 +249,10 @@ const union dp_ipv6 *dp_lb_get_backend_ip(struct flow_key *flow_key, uint32_t vn
249249
return &lb_val->back_end_ips[pos];
250250
}
251251

252-
int dp_get_lb_back_ips(const void *id_key, struct dp_grpc_responder *responder)
252+
static int dp_get_single_lb_back_ips(const struct lb_value *lb_val, struct dp_grpc_responder *responder)
253253
{
254-
struct lb_key *lb_k;
255-
struct lb_value *lb_val;
256254
struct dpgrpc_lb_target *reply;
257255

258-
if (DP_FAILED(rte_hash_lookup_data(id_map_lb_tbl, id_key, (void **)&lb_k)))
259-
return DP_GRPC_ERR_NO_LB;
260-
261-
if (DP_FAILED(rte_hash_lookup_data(lb_table, lb_k, (void **)&lb_val)))
262-
return DP_GRPC_ERR_NO_BACKIP;
263-
264-
dp_grpc_set_multireply(responder, sizeof(*reply));
265-
266256
for (int i = 0; i < DP_LB_MAX_IPS_PER_VIP; ++i) {
267257
if (!dp_is_ipv6_zero(&lb_val->back_end_ips[i])) {
268258
reply = dp_grpc_add_reply(responder);
@@ -271,10 +261,47 @@ int dp_get_lb_back_ips(const void *id_key, struct dp_grpc_responder *responder)
271261
dp_set_ipaddr6(&reply->addr, &lb_val->back_end_ips[i]);
272262
}
273263
}
264+
return DP_GRPC_OK;
265+
}
266+
267+
static int dp_get_all_lb_back_ips(struct dp_grpc_responder *responder)
268+
{
269+
uint32_t iter = 0;
270+
const struct lb_key *lb_key;
271+
struct lb_value *lb_val;
272+
int ret;
274273

274+
if (rte_hash_count(id_map_lb_tbl) == 0)
275+
return DP_GRPC_OK;
276+
277+
while ((ret = rte_hash_iterate(lb_table, (const void **)&lb_key, (void **)&lb_val, &iter)) != -ENOENT) {
278+
if (DP_FAILED(ret))
279+
return DP_GRPC_ERR_ITERATOR;
280+
dp_get_single_lb_back_ips(lb_val, responder);
281+
// ignore errors, try to send as much as possible
282+
}
275283
return DP_GRPC_OK;
276284
}
277285

286+
int dp_get_lb_back_ips(const void *id_key, struct dp_grpc_responder *responder)
287+
{
288+
struct lb_key *lb_k;
289+
struct lb_value *lb_val;
290+
291+
dp_grpc_set_multireply(responder, sizeof(struct dpgrpc_lb_target));
292+
293+
if (!id_key || *(const char *)id_key == '\0')
294+
return dp_get_all_lb_back_ips(responder);
295+
296+
if (DP_FAILED(rte_hash_lookup_data(id_map_lb_tbl, id_key, (void **)&lb_k)))
297+
return DP_GRPC_ERR_NO_LB;
298+
299+
if (DP_FAILED(rte_hash_lookup_data(lb_table, lb_k, (void **)&lb_val)))
300+
return DP_GRPC_ERR_NO_BACKIP;
301+
302+
return dp_get_single_lb_back_ips(lb_val, responder);
303+
}
304+
278305
int dp_add_lb_back_ip(const void *id_key, const union dp_ipv6 *back_ip)
279306
{
280307
struct lb_value *lb_val = NULL;

src/grpc/dp_async_grpc.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -851,8 +851,11 @@ const char* ListLoadBalancerTargetsCall::FillRequest(struct dpgrpc_request* requ
851851
{
852852
DPGRPC_LOG_INFO("Listing loadbalancer targets",
853853
DP_LOG_LBID(request_.loadbalancer_id().c_str()));
854-
if (SNPRINTF_FAILED(request->list_lbtrgt.lb_id, request_.loadbalancer_id()))
855-
return "Invalid loadbalancer_id";
854+
if (request_.loadbalancer_id().empty())
855+
request->list_lbtrgt.lb_id[0] = 0;
856+
else
857+
if (SNPRINTF_FAILED(request->list_lbtrgt.lb_id, request_.loadbalancer_id()))
858+
return "Invalid loadbalancer_id";
856859
return NULL;
857860
}
858861
void ListLoadBalancerTargetsCall::ParseReply(struct dpgrpc_reply* reply)

0 commit comments

Comments
 (0)