From c5dab1ae8ff6afb40d304dd5ca258e802b9a9443 Mon Sep 17 00:00:00 2001 From: liwenhui-soul <38217397+liwenhui-soul@users.noreply.github.com> Date: Fri, 24 Dec 2021 13:34:33 +0800 Subject: [PATCH] fix balance parser --- src/parser/parser.yy | 54 +++++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/src/parser/parser.yy b/src/parser/parser.yy index fa11549f2d4..1964b57cfde 100644 --- a/src/parser/parser.yy +++ b/src/parser/parser.yy @@ -3723,30 +3723,42 @@ integer_list balance_sentence : KW_BALANCE KW_LEADER { - auto sentence = new AdminJobSentence(meta::cpp2::AdminJobOp::ADD, - meta::cpp2::AdminCmd::LEADER_BALANCE); - $$ = sentence; + auto sentence = new AdminJobSentence(meta::cpp2::AdminJobOp::ADD, + meta::cpp2::AdminCmd::LEADER_BALANCE); + $$ = sentence; + } + | + KW_BALANCE KW_IN KW_ZONE { + auto sentence = new AdminJobSentence(meta::cpp2::AdminJobOp::ADD, + meta::cpp2::AdminCmd::DATA_BALANCE); + $$ = sentence; } - | KW_BALANCE KW_DATA { - auto sentence = new AdminJobSentence(meta::cpp2::AdminJobOp::ADD, - meta::cpp2::AdminCmd::DATA_BALANCE); - $$ = sentence; + | KW_BALANCE KW_IN KW_ZONE KW_REMOVE host_list { + auto sentence = new AdminJobSentence(meta::cpp2::AdminJobOp::ADD, + meta::cpp2::AdminCmd::DATA_BALANCE); + HostList* hl = $5; + std::vector has = hl->hosts(); + for (HostAddr& ha: has) { + sentence->addPara(ha.toString()); + } + delete hl; + $$ = sentence; } - | KW_BALANCE KW_DATA legal_integer { - auto sentence = new AdminJobSentence(meta::cpp2::AdminJobOp::SHOW); - sentence->addPara(std::to_string($3)); - $$ = sentence; + | KW_BALANCE KW_ACROSS KW_ZONE { + auto sentence = new AdminJobSentence(meta::cpp2::AdminJobOp::ADD, + meta::cpp2::AdminCmd::ZONE_BALANCE); + $$ = sentence; } - | KW_BALANCE KW_DATA KW_REMOVE host_list { - auto sentence = new AdminJobSentence(meta::cpp2::AdminJobOp::ADD, - meta::cpp2::AdminCmd::DATA_BALANCE); - HostList* hl = $4; - std::vector has = hl->hosts(); - for (HostAddr& ha: has) { - sentence->addPara(ha.toString()); - } - delete hl; - $$ = sentence; + | KW_BALANCE KW_ACROSS KW_ZONE KW_REMOVE zone_name_list { + auto sentence = new AdminJobSentence(meta::cpp2::AdminJobOp::ADD, + meta::cpp2::AdminCmd::ZONE_BALANCE); + ZoneNameList* nl = $5; + std::vector names = nl->zoneNames(); + for (std::string& name: names) { + sentence->addPara(name); + } + delete nl; + $$ = sentence; } ;