mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2025-05-11 18:35:46 +02:00
refactor(debug-cmd): simplify error handling in ParsePopulateArgs
This commit is contained in:
parent
b9d240a856
commit
f67bca78da
1 changed files with 2 additions and 40 deletions
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue