refactor(debug-cmd): simplify error handling in ParsePopulateArgs

This commit is contained in:
yexiaochuan 2025-04-13 17:23:12 +08:00
parent b9d240a856
commit f67bca78da

View file

@ -723,66 +723,29 @@ optional<DebugCmd::PopulateOptions> DebugCmd::ParsePopulateArgs(CmdArgList args,
PopulateOptions options; PopulateOptions options;
options.total_count = parser.Next<uint64_t>(); options.total_count = parser.Next<uint64_t>();
if (parser.HasError()) {
builder->SendError("Invalid total count");
parser.Error();
return nullopt;
}
options.prefix = parser.NextOrDefault<string_view>(""); options.prefix = parser.NextOrDefault<string_view>("");
options.val_size = parser.NextOrDefault<uint32_t>(100); options.val_size = parser.NextOrDefault<uint32_t>(100);
if (parser.HasError()) {
builder->SendError("Invalid value size");
parser.Error();
return nullopt;
}
while (parser.HasNext()) { while (parser.HasNext()) {
PopulateFlag flag = parser.MapNext("RAND", FLAG_RAND, "TYPE", FLAG_TYPE, "ELEMENTS", PopulateFlag flag = parser.MapNext("RAND", FLAG_RAND, "TYPE", FLAG_TYPE, "ELEMENTS",
FLAG_ELEMENTS, "SLOT", FLAG_SLOT, "EXPIRE", FLAG_EXPIRE); FLAG_ELEMENTS, "SLOT", FLAG_SLOT, "EXPIRE", FLAG_EXPIRE);
if (parser.HasError()) {
builder->SendError("Unknown or invalid flag");
parser.Error();
return nullopt;
}
switch (flag) { switch (flag) {
case FLAG_RAND: case FLAG_RAND:
options.populate_random_values = true; options.populate_random_values = true;
break; break;
case FLAG_TYPE: case FLAG_TYPE:
options.type = absl::AsciiStrToUpper(parser.Next<string_view>()); options.type = absl::AsciiStrToUpper(parser.Next<string_view>());
if (parser.HasError()) {
builder->SendError("Invalid type name");
parser.Error();
return nullopt;
}
break; break;
case FLAG_ELEMENTS: case FLAG_ELEMENTS:
options.elements = parser.Next<uint32_t>(); options.elements = parser.Next<uint32_t>();
if (parser.HasError()) {
builder->SendError("Invalid elements count");
parser.Error();
return nullopt;
}
break; break;
case FLAG_SLOT: { case FLAG_SLOT: {
auto [start, end] = parser.Next<FInt<0, 16383>, FInt<0, 16383>>(); auto [start, end] = parser.Next<FInt<0, 16383>, FInt<0, 16383>>();
if (parser.HasError()) {
builder->SendError("Invalid slot range");
parser.Error();
return nullopt;
}
options.slot_range = cluster::SlotRange{start, end}; options.slot_range = cluster::SlotRange{start, end};
break; break;
} }
case FLAG_EXPIRE: { case FLAG_EXPIRE: {
auto [min_ttl, max_ttl] = parser.Next<uint32_t, uint32_t>(); auto [min_ttl, max_ttl] = parser.Next<uint32_t, uint32_t>();
if (parser.HasError()) {
builder->SendError("Invalid expire range");
parser.Error();
return nullopt;
}
if (min_ttl >= max_ttl) { if (min_ttl >= max_ttl) {
builder->SendError(kExpiryOutOfRange); builder->SendError(kExpiryOutOfRange);
parser.Error(); parser.Error();
@ -792,14 +755,13 @@ optional<DebugCmd::PopulateOptions> DebugCmd::ParsePopulateArgs(CmdArgList args,
break; break;
} }
default: default:
LOG(ERROR) << "Error flag value in Populate arguments";
builder->SendError(kSyntaxErr); builder->SendError(kSyntaxErr);
parser.Error();
return nullopt; return nullopt;
} }
} }
if (parser.HasError()) { if (parser.HasError()) {
builder->SendError(kSyntaxErr); builder->SendError(parser.Error()->MakeReply());
parser.Error();
return nullopt; return nullopt;
} }
return options; return options;