bazel icon indicating copy to clipboard operation
bazel copied to clipboard

Please consider exposing WorkRequestHandler to workspaces

Open bnavetta opened this issue 4 years ago • 8 comments

Description of the problem / feature request:

I'd like to be able to reuse WorkRequestHandler for implementing custom persistent workers.

Feature requests: what underlying problem are you trying to solve with this feature?

The com.google.devtools.build.lib.worker.WorkRequestHandler class is a great starting point for implementing persistent workers. However, external workers can't use it because it's inside the Bazel codebase and not exported under @bazel_tools. It'd be easier to write custom workers if they could reuse WorkRequestHandler.

What operating system are you running Bazel on?

macOS Big Sur

What's the output of bazel info release?

INFO: Invocation ID: 49fb37be-a171-4419-a1b5-a2078ef9f44b
WARNING: info command does not support starlark options. Ignoring options: [--@io_bazel_rules_scala//scala/settings:stamp_scala_import=False]
release 4.2.1

Have you found anything relevant by searching the web?

Any other information, logs, or outputs that you want to share?

bazel query @bazel_tools//... shows other built-in tools that rules can reuse, like singlejar and the work request proto definitions at @bazel_tools//src/main/protobuf:worker_protocol_proto. Based on the location that worker_protocol_proto is at, I spent a while trying to depend on @bazel_tools//src/main/java/com/google/devtools/build/lib/worker to work.

bnavetta avatar Jan 11 '22 15:01 bnavetta

We don't want to add more things to @bazel_tools, see https://github.com/bazelbuild/bazel/issues/4301.

larsrc-google avatar Jan 12 '22 08:01 larsrc-google

@larsrc-google what do you think about publishing part of Bazel library as independent maven artifacts? Actually, it is less about @bazel_tools, more about not copy-paste code from Bazel repo to do persistent worker properly.

dieu avatar Jan 12 '22 17:01 dieu

It's a good idea, and we're now talking internally about what the best way to do this kind of API-like thing is. There will be some maintenance involved if we separate it out.

larsrc-google avatar Jan 24 '22 09:01 larsrc-google

It's a good idea, and we're now talking internally about what the best way to do this kind of API-like thing is. There will be some maintenance involved if we separate it out.

@larsrc-google We chatted briefly after the Performance BOF session. Is this something you'd still be willing to do?

Bencodes avatar Nov 17 '22 19:11 Bencodes

I think the reluctance to add stuff to @bazel_tools is mainly around having to tie fixes to the "stuff" to Bazel releases. So we could release this WorkRequestHandler thing as (part of?) a library that's separately packaged and released, but on the flip side, the thing to watch out for would be version mismatches between the running Bazel version (the "server" of this protocol, if I understand correctly), and this library that users are using. Maybe using a proto/grpc interface would be better?

Wyverald avatar Nov 18 '22 18:11 Wyverald

Just for clarification: Is it impossible to depend on WorkRequestHandler, or is it just problematic because it pulls in much more than it ought to? If the former, that should be fixed, it's definitely intended to be depended upon.

larsrc-google avatar Jan 18 '23 10:01 larsrc-google

I'm no longer working on that codebase, but I think it's currently impossible to depend on WorkRequestHandler outside of Bazel itself. Even if a workspace were to pull in the Bazel repository as a dependency, the visibility for //src/main/java/com/google/devtools/build/lib/worker:work_request_handlers, which defines WorkRequestHandler, is //src:__subpackages__, so it can't be depended on

bnavetta avatar Jan 18 '23 13:01 bnavetta

:head_palm: Making it public.

larsrc-google avatar Jan 18 '23 15:01 larsrc-google

The worker API and Java handler implementation have been moved to https://github.com/bazelbuild/bazel-worker-api.

tjgq avatar Sep 17 '24 09:09 tjgq