Skip to content

chore(deps): upgrade grpc, jackson, logback, commons and drop joda-time - #6950

Open
halibobo1205 wants to merge 5 commits into
tronprotocol:developfrom
halibobo1205:feature/upgrade_dependencies
Open

chore(deps): upgrade grpc, jackson, logback, commons and drop joda-time#6950
halibobo1205 wants to merge 5 commits into
tronprotocol:developfrom
halibobo1205:feature/upgrade_dependencies

Conversation

@halibobo1205

Copy link
Copy Markdown
Collaborator

What does this PR do?

Dependency From To
io.grpc:grpc-* 1.83.0 1.83.1
com.fasterxml.jackson.core:jackson-databind 2.18.6 2.18.10
ch.qos.logback:logback-classic 1.2.13 1.3.16
org.slf4j:slf4j-api / jcl-over-slf4j / jul-to-slf4j 1.7.36 2.0.17
org.apache.commons:commons-lang3 3.4 3.20.0
org.apache.commons:commons-collections4 4.1 4.6.0
org.apache.commons:commons-math 2.2 removed
joda-time:joda-time 2.3 removed

Along with them:

  • Remove the temporary gRPC stream-limit shim now covered by grpc-java 1.83.1, restoring the plain NettyServerBuilder.maxConcurrentCallsPerConnection(...) call.
  • Replace Joda-Time with java.time: a new Time.getIsoTimeString helper for the six log-formatting call sites.
  • Update the bundled Logback configuration for 1.3.

Why are these changes required?

To pick up upstream fixes, remove obsolete compatibility code, and reduce unused or legacy dependencies. Specifically:

  • The gRPC shim carried a TODO: Remove this shim after grpc/grpc-java#12930 is fixed. That fix shipped in v1.83.1, which now enforces the advertised concurrent-stream limit at handler startup — exactly what the shim did.
  • Logback 1.2.x is end-of-life. 1.3.16 is the last 1.3.x release and the ceiling for this project, since Logback 1.5.x requires JDK 11 while the x86_64 build still targets JDK 8. Logback 1.3 requires the SLF4J 2.0 provider model, hence the paired SLF4J bump.
  • commons-lang3 3.4 was the declared version only: libp2p already forces 3.18.0 onto the runtime classpath, so this aligns the declaration with what actually ships.
  • commons-math has no imports anywhere; Joda-Time was used only for log formatting and test date arithmetic, both expressible with the JDK.

This PR has been tested by:

  • Relevant gRPC security, logging, JSON, collections, and time-related tests.
  • Dependency verification and Logback configuration checks.
  • The gRPC stream-limit test was also run as a negative control: with the shim removed it fails on 1.83.0 and passes on 1.83.1.

Compatibility notes

  • Tested Logback 1.2-style custom --log-config files continue to load and emit logs.
  • jmxConfigurator is ignored by Logback 1.3, so JMX-based logging management is no longer available.
  • The legacy shutdown hook is compatibility-mapped with a warning; custom configurations should migrate to DefaultShutdownHook.
  • SizeAndTimeBasedRollingPolicy checks maxFileSize less frequently, so log files may temporarily exceed the configured limit during heavy writes.
  • Invalid custom appender classes are reported to the console but may prevent other appender references from being attached.
  • SLF4J 2.x removes org.slf4j.impl.StaticLoggerBinder. Reflections 0.9.11 probes for that class to decide whether to log, so its own scan diagnostics are now silent. All of its logging sites are null-guarded, so there is no functional impact; actuator registration still fails loudly through TronError(ACTUATOR_REGISTER).

Extra details

UTC timestamp output remains unchanged. Non-UTC output may use updated offsets from the JDK time-zone database while still representing the same instant.

1. bump grpcVersion to 1.83.1 to pick up the upstream fix for
   grpc/grpc-java#12930 (PR grpc/grpc-java#12942), which enforces
   connection.remote().maxActiveStreams(maxStreams) at handler startup
2. drop GrpcNettyMaxConcurrentStreamsLimiter, the local protocol-negotiator
   shim that applied the same limit while 1.83.0 left the remote endpoint
   unbounded until the client acknowledged SETTINGS
bump jackson-databind from 2.18.6 to 2.18.10 to pick up cumulative fixes from the 2.18.x line
1. bump logback-classic from 1.2.13 to 1.3.16 and slf4j-api,
   jcl-over-slf4j, jul-to-slf4j from 1.7.36 to 2.0.17; logback 1.3
   requires the slf4j 2.0 provider model, and 1.3.16 is the last 1.3.x
   release and the ceiling for the x86_64 JDK 8 build, since 1.5.x
   requires JDK 11
2. rename DelayingShutdownHook to DefaultShutdownHook in the toolkit
   logback.xml; logback 1.3 removed the old class and only auto-maps
   the legacy name with a startup warning
3. drop the CONSOLE appender from the toolkit logback.xml; no logger
   ever referenced it, so it never emitted output on 1.2 either, and
   logback 1.3 now flags it with an unreferenced-appender warning
4. accept one known 1.3.x behavior change: SizeAndTimeBasedRollingPolicy
   now throttles its maxFileSize comparison to once per 60s
   (SimpleInvocationGate) instead of the adaptive ~100-800ms gate of
   1.2.13, so under sustained heavy logging a file can overshoot the
   500MB cap by up to 60s of writes before the %i rollover fires;
   time-based rollover and totalSizeCap/maxHistory cleanup are ungated
   and unaffected
5. note for operators running a custom --log-config file: well-formed
   1.2-era configs using standard elements keep working unchanged
   (jmxConfigurator degrades to an ignored-property warning, the legacy
   shutdown hook name is auto-mapped), and malformed XML still fails
   fast via TronError(LOG_LOAD) exactly as on 1.2; however, a config
   that references an uninstantiable class (e.g. a custom appender
   missing from the classpath) now aborts the whole appender-ref phase
   instead of losing just that one appender, so the node starts with no
   log output while the ERROR statuses are printed to stdout by
   LogService
1. bump commons-lang3 from 3.4 to 3.20.0; the runtime classpath already
   resolved 3.18.0 through libp2p 2.2.9's transitive requirement, so
   align the declaration with what actually ships and move past the
   CVE-2025-48924 range that the nominal 3.4 still sits in
2. bump commons-collections4 from 4.1 to 4.6.0
3. remove commons-math 2.2; no source file imports
   org.apache.commons.math and nothing else in the dependency graph
   requests it
1. drop the joda-time 2.3 dependency.
2. replace the six new DateTime(millis) log-formatting call sites in
   DynamicPropertiesStore, DposTask and DposService with a new
   Time.getIsoTimeString helper backed by java.time; its formatter
   (yyyy-MM-dd'T'HH:mm:ss.SSSXXX in the system zone) reproduces joda's
   DateTime.toString() output byte for byte where the JDK and joda 2.3
   time-zone databases agree (UTC nodes are unaffected); zones whose
   rules changed after joda's 2013-era tzdb, e.g. Europe/Moscow, now
   render the corrected offset for the same instant.
3. replace DateTime.now() day arithmetic in four test classes with the
   java.time equivalent, ZonedDateTime.now().minusDays(n)/plusDays(n)
   .toInstant().toEpochMilli(), keeping joda's calendar semantics
   one-to-one, and map plain DateTime.now().getMillis() to
   System.currentTimeMillis()
@halibobo1205 halibobo1205 added this to the GreatVoyage-v4.8.3 milestone Sep 4, 2026
@halibobo1205 halibobo1205 added the topic:dependency dependency upgrade label Sep 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

topic:dependency dependency upgrade

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant