This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 8eb2ca1453 GH-49661: [CI][C++] Suppress deprecated warnings with gRPC 
1.80.0 (#49662)
8eb2ca1453 is described below

commit 8eb2ca14530bad4e65853586d95f7b20d1af168e
Author: Sutou Kouhei <[email protected]>
AuthorDate: Mon Apr 6 09:34:05 2026 +0900

    GH-49661: [CI][C++] Suppress deprecated warnings with gRPC 1.80.0 (#49662)
    
    ### Rationale for this change
    
    gRPC 1.80.0 introduced some deprecation warnings. See GH-49661 for real 
warning messages.
    
    ### What changes are included in this PR?
    
    * Use `grpc::experimental::InMemoryCertificateProvider` instead of 
`grpc::experimental::StaticDataCertificateProvider`
    * Use `set_root_certificate_provider()` instead of 
`set_certificate_provider()` of 
`grpc::experimental::TlsChannelCredentialsOptions`
    * Don't call 
`::grpc::experimental::TlsChannelCredentialsOptions::watch_root_certs()` 
because we called `set_root_certificate_provider()` with gRPC 1.80.0 or later
    
    ### Are these changes tested?
    
    Yes.
    
    ### Are there any user-facing changes?
    
    No.
    * GitHub Issue: #49661
    
    Authored-by: Sutou Kouhei <[email protected]>
    Signed-off-by: Sutou Kouhei <[email protected]>
---
 cpp/src/arrow/flight/transport/grpc/grpc_client.cc | 18 +++++++--
 .../arrow/flight/transport/grpc/util_internal.cc   | 43 ++++++++++++++++++++++
 .../arrow/flight/transport/grpc/util_internal.h    | 12 ++++++
 3 files changed, 70 insertions(+), 3 deletions(-)

diff --git a/cpp/src/arrow/flight/transport/grpc/grpc_client.cc 
b/cpp/src/arrow/flight/transport/grpc/grpc_client.cc
index 737ec5fe91..f1a5dcd686 100644
--- a/cpp/src/arrow/flight/transport/grpc/grpc_client.cc
+++ b/cpp/src/arrow/flight/transport/grpc/grpc_client.cc
@@ -732,19 +732,31 @@ class GrpcClientImpl : public internal::ClientTransport {
 #  endif  // defined(GRPC_USE_CERTIFICATE_VERIFIER)
 
 #  if defined(GRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS)
+#    if GRPC_CPP_VERSION_CHECK(1, 80, 0)
+          auto certificate_provider =
+              
std::make_shared<::grpc::experimental::InMemoryCertificateProvider>();
+          
RETURN_NOT_OK(FromAbslStatus(certificate_provider->UpdateRoot(kDummyRootCert)));
+#    else
           auto certificate_provider =
               
std::make_shared<::grpc::experimental::StaticDataCertificateProvider>(
                   kDummyRootCert);
+#    endif
 #    if defined(GRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS_ROOT_CERTS)
           ::grpc::experimental::TlsChannelCredentialsOptions tls_options(
               certificate_provider);
-#    else   // defined(GRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS_ROOT_CERTS)
-            // While gRPC >= 1.36 does not require a root cert (it has a 
default)
-            // in practice the path it hardcodes is broken. See 
grpc/grpc#21655.
+#    else  // defined(GRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS_ROOT_CERTS)
+           // While gRPC >= 1.36 does not require a root cert (it has a 
default)
+           // in practice the path it hardcodes is broken. See grpc/grpc#21655.
           ::grpc::experimental::TlsChannelCredentialsOptions tls_options;
+#      if GRPC_CPP_VERSION_CHECK(1, 80, 0)
+          tls_options.set_root_certificate_provider(certificate_provider);
+#      else
           tls_options.set_certificate_provider(certificate_provider);
+#      endif
 #    endif  // defined(GRPC_USE_TLS_CHANNEL_CREDENTIALS_OPTIONS_ROOT_CERTS)
+#    if !GRPC_CPP_VERSION_CHECK(1, 80, 0)
           tls_options.watch_root_certs();
+#    endif
           tls_options.set_root_cert_name("dummy");
 #    if defined(GRPC_USE_CERTIFICATE_VERIFIER)
           tls_options.set_certificate_verifier(std::move(cert_verifier));
diff --git a/cpp/src/arrow/flight/transport/grpc/util_internal.cc 
b/cpp/src/arrow/flight/transport/grpc/util_internal.cc
index ff8607778b..95b205d678 100644
--- a/cpp/src/arrow/flight/transport/grpc/util_internal.cc
+++ b/cpp/src/arrow/flight/transport/grpc/util_internal.cc
@@ -331,6 +331,49 @@ static ::grpc::Status ToRawGrpcStatus(const Status& 
arrow_status) {
   return status;
 }
 
+#if GRPC_CPP_VERSION_CHECK(1, 80, 0)
+Status FromAbslStatus(const ::absl::Status& absl_status) {
+  switch (absl_status.code()) {
+    case ::absl::StatusCode::kOk:
+      return Status::OK();
+    case ::absl::StatusCode::kCancelled:
+      return Status::Cancelled(absl_status.ToString());
+    case ::absl::StatusCode::kUnknown:
+      return Status::UnknownError(absl_status.ToString());
+    case ::absl::StatusCode::kInvalidArgument:
+      return Status::Invalid(absl_status.ToString());
+    case ::absl::StatusCode::kDeadlineExceeded:
+      return Status::IOError(absl_status.ToString());
+    case ::absl::StatusCode::kNotFound:
+      return Status::KeyError(absl_status.ToString());
+    case ::absl::StatusCode::kAlreadyExists:
+      return Status::AlreadyExists(absl_status.ToString());
+    case ::absl::StatusCode::kPermissionDenied:
+      return Status::IOError(absl_status.ToString());
+    case ::absl::StatusCode::kResourceExhausted:
+      return Status::IOError(absl_status.ToString());
+    case ::absl::StatusCode::kFailedPrecondition:
+      return Status::IOError(absl_status.ToString());
+    case ::absl::StatusCode::kAborted:
+      return Status::IOError(absl_status.ToString());
+    case ::absl::StatusCode::kOutOfRange:
+      return Status::Invalid(absl_status.ToString());
+    case ::absl::StatusCode::kUnimplemented:
+      return Status::NotImplemented(absl_status.ToString());
+    case ::absl::StatusCode::kInternal:
+      return Status::IOError(absl_status.ToString());
+    case ::absl::StatusCode::kUnavailable:
+      return Status::IOError(absl_status.ToString());
+    case ::absl::StatusCode::kDataLoss:
+      return Status::IOError(absl_status.ToString());
+    case ::absl::StatusCode::kUnauthenticated:
+      return Status::IOError(absl_status.ToString());
+    default:
+      return Status::UnknownError(absl_status.ToString());
+  }
+}
+#endif
+
 }  // namespace grpc
 }  // namespace transport
 }  // namespace flight
diff --git a/cpp/src/arrow/flight/transport/grpc/util_internal.h 
b/cpp/src/arrow/flight/transport/grpc/util_internal.h
index 5687c7a872..6f3d86eb65 100644
--- a/cpp/src/arrow/flight/transport/grpc/util_internal.h
+++ b/cpp/src/arrow/flight/transport/grpc/util_internal.h
@@ -34,6 +34,12 @@ class Status;
 
 namespace flight {
 
+#define GRPC_CPP_VERSION_CHECK(major, minor, patch)                            
 \
+  ((GRPC_CPP_VERSION_MAJOR > (major) ||                                        
 \
+    (GRPC_CPP_VERSION_MAJOR == (major) && GRPC_CPP_VERSION_MINOR > (minor)) || 
 \
+    ((GRPC_CPP_VERSION_MAJOR == (major) && GRPC_CPP_VERSION_MINOR == (minor) 
&& \
+      GRPC_CPP_VERSION_PATCH >= (patch)))))
+
 #define GRPC_RETURN_NOT_OK(expr)                                 \
   do {                                                           \
     ::arrow::Status _s = (expr);                                 \
@@ -90,6 +96,12 @@ ARROW_FLIGHT_EXPORT
 ::grpc::Status ToGrpcStatus(const Status& arrow_status,
                             ::grpc::ServerContext* ctx = nullptr);
 
+// gRPC 1.80.0 or later use absl::Status.
+#if GRPC_CPP_VERSION_CHECK(1, 80, 0)
+/// Convert an Abseil status to an Arrow status.
+ARROW_FLIGHT_EXPORT
+Status FromAbslStatus(const ::absl::Status& absl_status);
+#endif
 }  // namespace grpc
 }  // namespace transport
 }  // namespace flight

Reply via email to