/* * Util.actor.cpp * * This source file is part of the FoundationDB open source project * * Copyright 2013-2021 Apple Inc. and the FoundationDB project authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "fdbcli/fdbcli.actor.h" #include "fdbclient/ManagementAPI.actor.h" #include "fdbclient/Schemas.h" #include "fdbclient/Status.h" #include "flow/Arena.h" #include "flow/actorcompiler.h" // This must be the last #include. namespace fdb_cli { bool tokencmp(StringRef token, const char* command) { if (token.size() != strlen(command)) return false; return !memcmp(token.begin(), command, token.size()); } void printUsage(StringRef command) { const auto& helpMap = CommandFactory::commands(); auto i = helpMap.find(command.toString()); if (i != helpMap.end()) printf("Usage: %s\n", i->second.usage.c_str()); else fprintf(stderr, "ERROR: Unknown command `%s'\n", command.toString().c_str()); } ACTOR Future getSpecialKeysFailureErrorMessage(Reference tr) { Optional errorMsg = wait(safeThreadFutureToFuture(tr->get(fdb_cli::errorMsgSpecialKey))); // Error message should be present ASSERT(errorMsg.present()); // Read the json string auto valueObj = readJSONStrictly(errorMsg.get().toString()).get_obj(); // verify schema auto schema = readJSONStrictly(JSONSchemas::managementApiErrorSchema.toString()).get_obj(); std::string errorStr; ASSERT(schemaMatch(schema, valueObj, errorStr, SevError, true)); // return the error message return valueObj["message"].get_str(); } } // namespace fdb_cli