3131#include " src/common/base/base.h"
3232#include " src/common/base/statuspb/status.pb.h"
3333#include " src/common/uuid/uuid.h"
34+ #include " src/vizier/services/agent/shared/vizier_results/result_conversion.h"
3435
3536namespace px {
3637namespace vizier {
@@ -64,38 +65,25 @@ class StandaloneResultSinkServer final : public carnotpb::ResultSinkService::Ser
6465 consumer = consumer_pair->second ;
6566 }
6667
67- ::px::api::vizierpb::ExecuteScriptResponse resp;
68- resp.set_query_id (query_id.str ());
68+ const auto resp = ExecuteScriptResponseFromChunk (*rb, query_id.str ());
69+ if (resp.has_value ()) {
70+ consumer->Write (*resp);
71+ }
6972
7073 if (rb->has_execution_and_timing_info ()) {
71- HandleExecutionAndTimingInfo (&resp, rb.get ());
72- consumer->Write (resp);
74+ absl::base_internal::SpinLockHolder lock (&id_to_query_consumer_map_lock_);
75+ consumer_map_.erase (query_id);
76+ }
77+
78+ if (rb->has_execution_error () && rb->execution_error ().err_code () == 0 ) {
79+ // err_code 0 is Carnot reporting success; ExecuteScriptResponseFromChunk
80+ // emits nothing for it and the stream ends here.
81+ response->set_success (true );
7382 {
74- // Query is complete.
7583 absl::base_internal::SpinLockHolder lock (&id_to_query_consumer_map_lock_);
7684 consumer_map_.erase (query_id);
7785 }
78- }
79-
80- if (rb->has_query_result ()) {
81- HandleQueryResult (&resp, rb.get ());
82-
83- consumer->Write (resp);
84- }
85-
86- if (rb->has_execution_error ()) {
87- auto exec_error = rb->execution_error ();
88- if (exec_error.err_code () == 0 ) {
89- response->set_success (true );
90- {
91- absl::base_internal::SpinLockHolder lock (&id_to_query_consumer_map_lock_);
92- consumer_map_.erase (query_id);
93- }
94- return ::grpc::Status::OK ;
95- }
96- auto status = resp.mutable_status ();
97- status->set_message (exec_error.msg ());
98- consumer->Write (resp);
86+ return ::grpc::Status::OK ;
9987 }
10088
10189 rb = std::make_unique<carnotpb::TransferResultChunkRequest>();
@@ -113,72 +101,6 @@ class StandaloneResultSinkServer final : public carnotpb::ResultSinkService::Ser
113101 }
114102
115103 private:
116- void HandleQueryResult (::px::api::vizierpb::ExecuteScriptResponse* resp,
117- carnotpb::TransferResultChunkRequest* rb) {
118- auto query_result = rb->query_result ();
119- auto row_data = query_result.row_batch ();
120-
121- auto batch = resp->mutable_data ()->mutable_batch ();
122-
123- batch->set_table_id (query_result.table_name ());
124- batch->set_num_rows (row_data.num_rows ());
125- batch->set_eow (row_data.eow ());
126- batch->set_eos (row_data.eos ());
127-
128- for (auto col : row_data.cols ()) {
129- ::px::api::vizierpb::Column c;
130- if (col.has_boolean_data ()) {
131- auto batch_cols = batch->add_cols ()->mutable_boolean_data ();
132- for (auto dt : col.boolean_data ().data ()) {
133- batch_cols->add_data (dt);
134- }
135- }
136- if (col.has_int64_data ()) {
137- auto batch_cols = batch->add_cols ()->mutable_int64_data ();
138- for (auto dt : col.int64_data ().data ()) {
139- batch_cols->add_data (dt);
140- }
141- }
142- if (col.has_time64ns_data ()) {
143- auto batch_cols = batch->add_cols ()->mutable_time64ns_data ();
144- for (auto dt : col.time64ns_data ().data ()) {
145- batch_cols->add_data (dt);
146- }
147- }
148- if (col.has_float64_data ()) {
149- auto batch_cols = batch->add_cols ()->mutable_float64_data ();
150- for (auto dt : col.float64_data ().data ()) {
151- batch_cols->add_data (dt);
152- }
153- }
154- if (col.has_string_data ()) {
155- auto batch_cols = batch->add_cols ()->mutable_string_data ();
156- for (auto dt : col.string_data ().data ()) {
157- batch_cols->add_data (dt);
158- }
159- }
160- if (col.has_uint128_data ()) {
161- auto batch_cols = batch->add_cols ()->mutable_uint128_data ();
162- for (auto dt : col.uint128_data ().data ()) {
163- auto n = batch_cols->add_data ();
164- n->set_low (dt.low ());
165- n->set_high (dt.high ());
166- }
167- }
168- }
169- }
170-
171- void HandleExecutionAndTimingInfo (::px::api::vizierpb::ExecuteScriptResponse* resp,
172- carnotpb::TransferResultChunkRequest* rb) {
173- auto timing_info = rb->execution_and_timing_info ();
174- auto stats = resp->mutable_data ()->mutable_execution_stats ();
175- stats->set_bytes_processed (timing_info.execution_stats ().bytes_processed ());
176- stats->set_records_processed (timing_info.execution_stats ().records_processed ());
177- auto timing = stats->mutable_timing ();
178- timing->set_execution_time_ns (timing_info.execution_stats ().timing ().execution_time_ns ());
179- timing->set_compilation_time_ns (timing_info.execution_stats ().timing ().compilation_time_ns ());
180- }
181-
182104 absl::flat_hash_map<sole::uuid, ::grpc::ServerWriter<::px::api::vizierpb::ExecuteScriptResponse>*>
183105 consumer_map_ ABSL_GUARDED_BY (id_to_query_consumer_map_lock_);
184106 mutable absl::base_internal::SpinLock id_to_query_consumer_map_lock_;
0 commit comments