Skip to content

Commit

Permalink
Reworking Java server lifecycle management (#70)
Browse files Browse the repository at this point in the history
* Rather than having a watcher sniffing for gRPC traffic, and shutting
  down the server when it doesn't see any, have the server shut itself
  down if it's been idle for a while. This has a few advantages:
   * It means that if a single package takes longer than the deadline
     to parse, we won't abruptly kill the server - we now stay alive
     when there are in-flight requests.
   * It also means that if we end up with lingering server processes
     (e.g. beacuse of an error on the Go side), they will clean
     themselves up at some point.
   * It means the server will exit cleanly, rather than seeing a signal.
* Remove the javaparser-wrapper completely. Right now, this extra
  process adds complexity to what's going on (multiple processes,
  multiple ports), as well as a small amount of overhead proxying all
  requests.
* Move same-package import filtering from the javaparser-wrapper into
  generate.go directly.
* Shut down when Gazelle tells us we're done parsing source.
  This hook was only recently added to Gazelle, so if people are using
  and older version of gazelle, the server will time itself out.
* Have the Java process pick its own port and report it back, rather
  than be given a port which is _hopefully_ free - this avoids a TOCTOU
  race.

This has a few benefits:
1. It simplifies the general flow.
2. It seems to speed up running gazelle in this repo on my machine from
   generally taking ~3.8 seconds to generally taking ~1.8 seconds.
  • Loading branch information
illicitonion authored Oct 5, 2022
1 parent eb54c97 commit 50427b7
Show file tree
Hide file tree
Showing 26 changed files with 327 additions and 512 deletions.
1 change: 1 addition & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ maven_install(
name = "frozen_deps",
artifacts = [
"com.google.code.findbugs:jsr305:3.0.2",
"com.google.errorprone:error_prone_annotations:2.11.0",
"com.google.guava:guava:30.1.1-jre",
"commons-cli:commons-cli:1.5.0",
"io.grpc:grpc-api:1.40.0",
Expand Down
2 changes: 1 addition & 1 deletion frozen_deps_install.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"dependency_tree": {
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
"__INPUT_ARTIFACTS_HASH": 1411780159,
"__INPUT_ARTIFACTS_HASH": -1395678455,
"__RESOLVED_ARTIFACTS_HASH": 1576619931,
"conflict_resolution": {
"com.google.errorprone:error_prone_annotations:2.9.0": "com.google.errorprone:error_prone_annotations:2.11.0",
Expand Down
3 changes: 3 additions & 0 deletions java/gazelle/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ go_library(
"lang.go",
"resolve.go",
],
data = [
"//java/src/com/github/bazel_contrib/contrib_rules_jvm/javaparser/generators:Main",
],
importpath = "github.com/bazel-contrib/rules_jvm/java/gazelle",
visibility = ["//visibility:public"],
deps = [
Expand Down
6 changes: 5 additions & 1 deletion java/gazelle/configure.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,11 @@ func (jc *Configurer) Configure(c *config.Config, rel string, f *rule.File) {
}

if jc.lang.parser == nil {
jc.lang.parser = javaparser.NewRunner(jc.lang.logger, c.RepoRoot, jc.lang.javaLogLevel)
runner, err := javaparser.NewRunner(jc.lang.logger, c.RepoRoot, jc.lang.javaLogLevel)
if err != nil {
jc.lang.logger.Fatal().Err(err).Msg("could not start javaparser")
}
jc.lang.parser = runner
}

if jc.lang.mavenResolver == nil {
Expand Down
4 changes: 4 additions & 0 deletions java/gazelle/lang.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,3 +116,7 @@ func (l javaLang) Loads() []rule.LoadInfo {
}

func (l javaLang) Fix(c *config.Config, f *rule.File) {}

func (l javaLang) DoneGeneratingRules() {
l.parser.ServerManager().Shutdown()
}
5 changes: 1 addition & 4 deletions java/gazelle/private/javaparser/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,13 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library(
name = "javaparser",
srcs = ["javaparser.go"],
data = ["//java/gazelle/private/javaparser/cmd/javaparser-wrapper"],
importpath = "github.com/bazel-contrib/rules_jvm/java/gazelle/private/javaparser",
visibility = ["//java/gazelle:__subpackages__"],
deps = [
"//java/gazelle/private/bazel",
"//java/gazelle/private/java",
"//java/gazelle/private/javaparser/netutil",
"//java/gazelle/private/javaparser/proto/gazelle/java/javaparser/v0:javaparser",
"//java/gazelle/private/servermanager",
"//java/gazelle/private/sorted_set",
"@com_github_rs_zerolog//:zerolog",
"@org_golang_google_grpc//:go_default_library",
],
)
23 changes: 0 additions & 23 deletions java/gazelle/private/javaparser/cmd/javaparser-wrapper/BUILD.bazel

This file was deleted.

This file was deleted.

This file was deleted.

232 changes: 0 additions & 232 deletions java/gazelle/private/javaparser/cmd/javaparser-wrapper/main.go

This file was deleted.

Loading

0 comments on commit 50427b7

Please sign in to comment.