google/distbench

Trying to compile with gRPC 1.41.0

obedmr opened this issue · 4 comments

Hi,
Not sure what's the best method to reach to you folks, but let me go here. I have an specific requirement to build distbench with gRPC 1.41.0. When I try to build it with the bazel build :all command I'm getting the following error:

Extracting Bazel installation...
Starting local Bazel server and connecting to it...
Loading: 
Loading: 0 packages loaded
Loading: 0 packages loaded
Loading: 0 packages loaded
Loading: 0 packages loaded
Loading: 0 packages loaded
Analyzing: 23 targets (1 packages loaded)
Analyzing: 23 targets (1 packages loaded, 0 targets configured)
Analyzing: 23 targets (34 packages loaded, 36 targets configured)
ERROR: Traceback (most recent call last):
        File "/root/.cache/bazel/_bazel_root/41bc40a3bd5fcb088ad6274fd8e222db/external/build_bazel_rules_apple/apple/internal/testing/ios_rules.bzl", line 62, column 61, in <toplevel>
                ios_ui_test_bundle = rule_factory.create_apple_bundling_rule(
        File "/root/.cache/bazel/_bazel_root/41bc40a3bd5fcb088ad6274fd8e222db/external/build_bazel_rules_apple/apple/internal/rule_factory.bzl", line 904, column 55, in _create_apple_bundling_rule
                rule_attrs.append(_common_binary_linking_attrs(rule_descriptor))
        File "/root/.cache/bazel/_bazel_root/41bc40a3bd5fcb088ad6274fd8e222db/external/build_bazel_rules_apple/apple/internal/rule_factory.bzl", line 218, column 21, in _common_binary_linking_attrs
                apple_common.objc_proto_aspect,
Error: 'apple_common' value has no field or method 'objc_proto_aspect'
INFO: Repository go_sdk instantiated at:
  /distbench/WORKSPACE.bazel:37:16: in <toplevel>
  /root/.cache/bazel/_bazel_root/41bc40a3bd5fcb088ad6274fd8e222db/external/com_github_grpc_grpc/bazel/grpc_extra_deps.bzl:50:27: in grpc_extra_deps
  /root/.cache/bazel/_bazel_root/41bc40a3bd5fcb088ad6274fd8e222db/external/io_bazel_rules_go/go/private/sdk.bzl:268:28: in go_register_toolchains
  /root/.cache/bazel/_bazel_root/41bc40a3bd5fcb088ad6274fd8e222db/external/io_bazel_rules_go/go/private/sdk.bzl:92:21: in go_download_sdk
Repository rule _go_download_sdk defined at:
  /root/.cache/bazel/_bazel_root/41bc40a3bd5fcb088ad6274fd8e222db/external/io_bazel_rules_go/go/private/sdk.bzl:79:35: in <toplevel>
ERROR: /distbench/BUILD:191:16: error loading package '@com_github_grpc_grpc//src/compiler': at /root/.cache/bazel/_bazel_root/41bc40a3bd5fcb088ad6274fd8e222db/external/com_github_grpc_grpc/bazel/grpc_build_system.bzl:29:6: at /root/.cache/bazel/_bazel_root/41bc40a3bd5fcb088ad6274fd8e222db/external/build_bazel_rules_apple/apple/ios.bzl:22:5: initialization of module 'apple/internal/testing/ios_rules.bzl' failed and referenced by '//:_distbench_cc_grpc_proto_grpc_codegen'
ERROR: Analysis of target '//:_distbench_cc_grpc_proto_grpc_codegen' failed; build aborted: Analysis failed
INFO: Elapsed time: 26.284s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (34 packages loaded, 36 targets configured)
FAILED: Build did NOT complete successfully (34 packages loaded, 36 targets configured)

I modified the WORKSPACE.bazel in order to point to my custom gRPC. Below my change:

diff --git a/WORKSPACE.bazel b/WORKSPACE.bazel
index d35ccd8..3d919e5 100644
--- a/WORKSPACE.bazel
+++ b/WORKSPACE.bazel
@@ -16,13 +16,20 @@ rules_proto_toolchains()

 ##### gRPC Rules for Bazel
 http_archive(
-    name = "com_github_grpc_grpc",
+    name = "com_github_grpc_grpc2",
     sha256 = "bba65891b8c8eaea9f10b0ccccb4b6173590aee36937f5b52e8665720bcaa4c1",
     urls = [
         "https://github.com/grpc/grpc/archive/b0f37a22bbae12a4b225a88be6d18d5e41dce881.tar.gz",  # Release 1.43
     ],
     strip_prefix = "grpc-b0f37a22bbae12a4b225a88be6d18d5e41dce881",
 )
+
+new_local_repository(
+    name = "com_github_grpc_grpc",
+    path = "/custom-grpc",
+    build_file = "BUILD",
+)
+
 load("@com_github_grpc_grpc//bazel:grpc_deps.bzl", "grpc_deps")
 grpc_deps()

It seems to me like an Apple specific build, since I'm only interested in a Linux-only build, is there a way to overcome this?

In case that you're interested in how I'm building it, below the Dockerfile I'm playing with:

FROM archlinux

RUN pacman -Syu --noconfirm bazel git gcc which python
RUN git clone https://github.com/google/distbench.git
WORKDIR distbench
# Build
COPY custom-grpc /custom-grpc
COPY workspace.diff /

# Apply patches
RUN git apply /workspace.diff

RUN bazel build :all

Thanks in advance for your help.

Hi,

Going back to 1.41.1, with

 http_archive(
     name = "com_github_grpc_grpc",
-    sha256 = "bba65891b8c8eaea9f10b0ccccb4b6173590aee36937f5b52e8665720bcaa4c1",
+    sha256 = "bd2ec83a5ed255950daa00e5c8a557a97b8ae20e530757c6c07ea4d78c846caa",
     urls = [
-        "https://github.com/grpc/grpc/archive/b0f37a22bbae12a4b225a88be6d18d5e41dce881.tar.gz",  # Release 1.43
+        "https://github.com/grpc/grpc/archive/635693ce624f3b3a89e5a764f0664958ef08b2b9.tar.gz",  # Release 1.41.1
     ],
-    strip_prefix = "grpc-b0f37a22bbae12a4b225a88be6d18d5e41dce881",
+    strip_prefix = "grpc-635693ce624f3b3a89e5a764f0664958ef08b2b9",
 )

Make me get the exact same error as you in my environment.

I am pretty sure that if you updated your custom grpc to a newer version it would solve the problem. (also 1.41.1 was working before for me, so something was updated which broke grpc and then was fixed in a newer version).

I hope this helps.

Hi @oserres, thanks for the help, I was able to run in 1.41.0 release (sorry I put the wrong version before). One of the issue is that I was putting the custom gRPC dependency as new_local_repository instead of local_repository. I also modified the apple dependency to the one used in 1.43.0. And it works. But, when running the benchmark I was able to only run:

bazel run :distbench -- test_sequencer &
bazel run :distbench -- node_manager --test_sequencer=localhost:10000 --port=9999 &

But, when I run the simple_test.sh it fails on this; I've tried with a newer version of boringssl but still the same.

ERROR: /root/.cache/bazel/_bazel_root/41bc40a3bd5fcb088ad6274fd8e222db/external/boringssl/BUILD:161:11: Compiling src/crypto/x509v3/v3_utl.c failed: (Exit 1): process-wrapper failed: error executing command
  (cd /root/.cache/bazel/_bazel_root/41bc40a3bd5fcb088ad6274fd8e222db/sandbox/processwrapper-sandbox/15725/execroot/__main__ && \
  exec env - \
    BAZEL_LINKLIBS=-l%:libstdc++.a:-lm \
    BAZEL_LINKOPTS=-static-libgcc \
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \
    PWD=/proc/self/cwd \
    TMPDIR=/tmp \
  /root/.cache/bazel/_bazel_root/install/814b1f4390b05dc026f88e181a6b474d/process-wrapper '--timeout=0' '--kill_delay=15' /usr/sbin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG -ffunction-sections -fdata-sections -MD -MF bazel-out/k8-opt/bin/external/boringssl/_objs/crypto/v3_utl.d '-frandom-seed=bazel-out/k8-opt/bin/external/boringssl/_objs/crypto/v3_utl.o' -iquote external/boringssl -iquote bazel-out/k8-opt/bin/external/boringssl -isystem external/boringssl/src/include -isystem bazel-out/k8-opt/bin/external/boringssl/src/include -Wa,--noexecstack '-D_XOPEN_SOURCE=700' -Wall -Werror '-Wformat=2' -Wsign-compare -Wmissing-field-initializers -Wwrite-strings -Wshadow -fno-common '-std=c11' -Wmissing-prototypes -Wold-style-definition -Wstrict-prototypes -fno-canonical-system-headers -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -c external/boringssl/src/crypto/x509v3/v3_utl.c -o bazel-out/k8-opt/bin/external/boringssl/_objs/crypto/v3_utl.o)
In file included from /usr/include/string.h:535,
                 from external/boringssl/src/crypto/x509v3/v3_utl.c:63:
In function 'memset',
    inlined from 'OPENSSL_memset' at external/boringssl/src/crypto/x509v3/../internal.h:840:10,
    inlined from 'ipv6_from_asc' at external/boringssl/src/crypto/x509v3/v3_utl.c:1328:9:
/usr/include/bits/string_fortified.h:59:10: error: '__builtin_memset' forming offset 16 is out of the bounds [0, 16] [-Werror=array-bounds]
   59 |   return __builtin___memset_chk (__dest, __ch, __len,
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   60 |                                  __glibc_objsize0 (__dest));
      |                                  ~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors
Target //:distbench failed to build
Use --verbose_failures to see the command lines of failed build steps.
INFO: Elapsed time: 1.296s, Critical Path: 0.98s
INFO: 55 processes: 55 internal.
FAILED: Build did NOT complete successfully
FAILED: Build did NOT complete successfully

Wow, It's solved. There was a compiler version related issue. I was doing it with Archlinux gcc (12.1.0) and it was failing, then I moved to an Ubuntu's based docker image (with gcc 11.2.0) and it worked. Later, it would be worth to see why this new gcc compiler version is complaining.

➜  docker-distbench git:(master) ✗ docker run --rm distbench:ubuntu gcc --version
gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

➜  docker-distbench git:(master) ✗ docker run --rm distbench:archlinux gcc --version
gcc (GCC) 12.1.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Thanks a lot for the help folks, I'm closing the issue since it's already solved in my side.

Thanks for the update ! Good to know.