Skip to content

Commit

Permalink
chore: Add error tags for content encoders
Browse files Browse the repository at this point in the history
Bug: 382284929
Fix: 382284929
Change-Id: Iac8a5b2020912eea1a9e938c394a9781105946f2
GitOrigin-RevId: b60e383b42d3a176d44f32173a5cd22c90c2cc65
  • Loading branch information
lusayaa authored and copybara-github committed Jan 6, 2025
1 parent b9a1fee commit 21899f9
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ cc_library(
],
deps = [
"//components/data/converters:cbor_converter",
"//components/errors:error_tag",
"//components/util:request_context",
"//public:constants",
"//public/applications/pa:response_utils",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,22 @@
#include <vector>

#include "components/data/converters/cbor_converter.h"
#include "components/errors/error_tag.h"
#include "public/applications/pa/response_utils.h"
#include "src/util/status_macro/status_macros.h"

namespace kv_server {
namespace {

enum class ErrorTag : int {
kParsePartitionOutput = 1,
};

} // namespace

absl::StatusOr<std::string> CborV2EncoderDecoder::EncodeV2GetValuesResponse(
v2::GetValuesResponse& response_proto) const {
PS_ASSIGN_OR_RETURN(std::string response,
V2GetValuesResponseCborEncode(response_proto));
return response;
return V2GetValuesResponseCborEncode(response_proto);
}

absl::StatusOr<std::string> CborV2EncoderDecoder::EncodePartitionOutputs(
Expand All @@ -50,8 +56,10 @@ absl::StatusOr<std::string> CborV2EncoderDecoder::EncodePartitionOutputs(
}

if (partition_outputs.empty()) {
return absl::InternalError(
"Parsing partition output proto from json failed for all outputs");
return StatusWithErrorTag(
absl::InternalError(
"Parsing partition output proto from json failed for all outputs"),
__FILE__, ErrorTag::kParsePartitionOutput);
}

const auto cbor_string = PartitionOutputsCborEncode(partition_outputs);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,31 @@
#include <utility>
#include <vector>

#include "components/errors/error_tag.h"
#include "nlohmann/json.hpp"

namespace kv_server {

namespace {

using google::protobuf::util::MessageToJsonString;

enum class ErrorTag : int {
kJsonEncodeV2GetValuesResponse = 1,
kNoPartitionOutputsInCompressionGroup = 2,
kJsonDecodeGetValuesRequest = 3,
};
} // namespace

absl::StatusOr<std::string> JsonV2EncoderDecoder::EncodeV2GetValuesResponse(
v2::GetValuesResponse& response_proto) const {
std::string response;
PS_RETURN_IF_ERROR(MessageToJsonString(response_proto, &response));
auto status = MessageToJsonString(response_proto, &response);
if (!status.ok()) {
return StatusWithErrorTag(absl::InvalidArgumentError(status.message()),
__FILE__,
ErrorTag::kJsonEncodeV2GetValuesResponse);
}
return response;
}

Expand All @@ -55,8 +70,10 @@ absl::StatusOr<std::string> JsonV2EncoderDecoder::EncodePartitionOutputs(
json_partition_output_list.emplace_back(partition_output_json);
}
if (json_partition_output_list.size() == 0) {
return absl::InvalidArgumentError(
"No partition outputs were added to compression group content");
return StatusWithErrorTag(
absl::InvalidArgumentError(
"No partition outputs were added to compression group content"),
__FILE__, ErrorTag::kNoPartitionOutputsInCompressionGroup);
}
return json_partition_output_list.dump();
}
Expand All @@ -65,8 +82,12 @@ absl::StatusOr<v2::GetValuesRequest>
JsonV2EncoderDecoder::DecodeToV2GetValuesRequestProto(
std::string_view request) const {
v2::GetValuesRequest request_proto;
PS_RETURN_IF_ERROR(
google::protobuf::util::JsonStringToMessage(request, &request_proto));
auto status =
google::protobuf::util::JsonStringToMessage(request, &request_proto);
if (!status.ok()) {
return StatusWithErrorTag(absl::InvalidArgumentError(status.message()),
__FILE__, ErrorTag::kJsonDecodeGetValuesRequest);
}
return request_proto;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,29 @@
#include <vector>

#include "absl/strings/str_cat.h"
#include "components/errors/error_tag.h"
#include "nlohmann/json.hpp"
#include "public/applications/pa/api_overlay.pb.h"

namespace kv_server {

namespace {
enum class ErrorTag : int {
kProtoEncodeV2GetValuesResponse = 1,
kNoPartitionOutputsInCompressionGroup = 2,
kEmptyV2GetValuesRequest = 3,
kParseV2GetValuesProto = 4,
};
} // namespace

absl::StatusOr<std::string> ProtoV2EncoderDecoder::EncodeV2GetValuesResponse(
v2::GetValuesResponse& response_proto) const {
std::string response;
if (!response_proto.SerializeToString(&response)) {
auto error_message = "Cannot serialize the response as a proto.";
return absl::InvalidArgumentError(error_message);
return StatusWithErrorTag(absl::InvalidArgumentError(error_message),
__FILE__,
ErrorTag::kProtoEncodeV2GetValuesResponse);
}
return response;
}
Expand Down Expand Up @@ -58,8 +70,10 @@ absl::StatusOr<std::string> ProtoV2EncoderDecoder::EncodePartitionOutputs(
json_partition_output_list.emplace_back(partition_output_json);
}
if (json_partition_output_list.size() == 0) {
return absl::InvalidArgumentError(
"No partition outputs were added to compression group content");
return StatusWithErrorTag(
absl::InvalidArgumentError(
"No partition outputs were added to compression group content"),
__FILE__, ErrorTag::kNoPartitionOutputsInCompressionGroup);
}
return json_partition_output_list.dump();
}
Expand All @@ -69,13 +83,16 @@ ProtoV2EncoderDecoder::DecodeToV2GetValuesRequestProto(
std::string_view request) const {
v2::GetValuesRequest request_proto;
if (request.empty()) {
return absl::InvalidArgumentError(
"Received empty request, not converting to v2::GetValuesRequest proto");
return StatusWithErrorTag(
absl::InvalidArgumentError("Received empty request, not converting to "
"v2::GetValuesRequest proto"),
__FILE__, ErrorTag::kEmptyV2GetValuesRequest);
}
if (!request_proto.ParseFromString(request)) {
auto error_message = absl::StrCat(
"Cannot parse request as a valid serialized proto object: ", request);
return absl::InvalidArgumentError(error_message);
return StatusWithErrorTag(absl::InvalidArgumentError(error_message),
__FILE__, ErrorTag::kParseV2GetValuesProto);
}
return request_proto;
}
Expand Down
4 changes: 4 additions & 0 deletions public/applications/pa/response_utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@

namespace kv_server::application_pa {

namespace {

enum class ErrorTag : int {
kJsonStringToMessageError = 1,
kMessageToJsonStringError = 2
Expand All @@ -28,6 +30,8 @@ enum class ErrorTag : int {
using google::protobuf::util::JsonStringToMessage;
using google::protobuf::util::MessageToJsonString;

} // namespace

absl::StatusOr<PartitionOutput> PartitionOutputFromJson(
std::string_view json_str) {
PartitionOutput partition_output_proto;
Expand Down

0 comments on commit 21899f9

Please sign in to comment.