Verify process network address filter before attempting setclass. Provide error message if no matching process addresses found

This commit is contained in:
Ray Jenkins 2022-01-19 14:03:41 -06:00 committed by Jingyu Zhou
parent 5e0b1fd13f
commit 234760f516
1 changed files with 17 additions and 0 deletions

View File

@ -73,6 +73,23 @@ ACTOR Future<Void> printProcessClass(Reference<IDatabase> db) {
};
ACTOR Future<bool> setProcessClass(Reference<IDatabase> db, KeyRef network_address, KeyRef class_type) {
// Check if the network address filter matches any processes before proceeding.
state Reference<ITransaction> preCheckFilterTr = db->createTransaction();
loop {
preCheckFilterTr->setOption(FDBTransactionOptions::SPECIAL_KEY_SPACE_ENABLE_WRITES);
try {
ThreadFuture<Optional<Value>> result = preCheckFilterTr->get(network_address.withPrefix(fdb_cli::processClassTypeSpecialKeyRange.begin));
Optional<Value> val = wait(safeThreadFutureToFuture(result));
if (!val.present()) {
printf("No matching addresses found\n");
return false;
}
break;
} catch (Error& e) {
wait(safeThreadFutureToFuture(preCheckFilterTr->onError(e)));
}
}
state Reference<ITransaction> tr = db->createTransaction();
loop {
tr->setOption(FDBTransactionOptions::SPECIAL_KEY_SPACE_ENABLE_WRITES);