Skip to content

[ZEPPELIN-6400] Remove ZeppelinConfiguration dependency from zeppelin-interpreter module#5167

Draft
jongyoul wants to merge 4 commits intomasterfrom
ZEPPELIN-6400-remove-zepconf-from-interpreter
Draft

[ZEPPELIN-6400] Remove ZeppelinConfiguration dependency from zeppelin-interpreter module#5167
jongyoul wants to merge 4 commits intomasterfrom
ZEPPELIN-6400-remove-zepconf-from-interpreter

Conversation

@jongyoul
Copy link
Member

@jongyoul jongyoul commented Mar 6, 2026

Summary

  • Move ZeppelinConfiguration from zeppelin-interpreter to zeppelin-zengine so it is no longer included in the shaded interpreter JAR. This prevents the Maven shade plugin from corrupting config string literals, which caused classpath-order-dependent configuration loading failures.
  • Replace ZeppelinConfiguration usage in zeppelin-interpreter with Properties-based configuration across InterpreterLauncher, LifecycleManager, RecoveryStorage, DependencyResolver, and all launcher plugins (Docker, K8s, YARN, Flink).
  • Update callers in zeppelin-zengine, zeppelin-server, flink, and markdown interpreter modules.

Motivation

ZeppelinConfiguration in zeppelin-interpreter gets processed by the Maven shade plugin, which corrupts string literals (e.g., org.apache.zeppelinunshaded.org.apache.zeppelin). This causes config keys to mismatch at runtime depending on classpath ordering. Moving it to zeppelin-zengine (which is not shaded) permanently eliminates this class of bugs.

As discussed by the community: "ZeppelinConfiguration belongs to the Zeppelin server, and the Zeppelin interpreter should really only work on a HashMap with ConfigKey and ConfigValue."

Changes

Area Change
zeppelin-interpreter (core) Remove ZeppelinConfiguration imports; use Properties for config
InterpreterLauncher ZeppelinConfiguration zConfProperties zProperties
LifecycleManager / RecoveryStorage Constructor takes Properties instead of ZeppelinConfiguration
DependencyResolver Accept individual config values instead of ZeppelinConfiguration
Launcher plugins (7 files) Updated to Properties-based API
zeppelin-zengine PluginManager passes derived values (absolute paths) via Properties
ZeppelinConfiguration.java Moved from zeppelin-interpreterzeppelin-zengine

50 files changed, +320 −1591 lines (net reduction ~1271 lines)

Test Plan

  • CI: core.yml - Core module tests
  • CI: core.yml - Interpreter tests (Spark, Flink)
  • CI: frontend.yml - E2E tests
  • CI: quick.yml - RAT license check
  • Verify shaded JAR does not contain ZeppelinConfiguration

jongyoul and others added 4 commits March 6, 2026 17:48
…-interpreter module

Move ZeppelinConfiguration to zeppelin-zengine so it is no longer
included in the shaded interpreter JAR. This prevents the Maven shade
plugin from corrupting config string literals, which caused classpath-
order-dependent configuration loading failures.

Key changes:
- Replace ZeppelinConfiguration usage in zeppelin-interpreter with
  Properties-based configuration
- Update InterpreterLauncher, LifecycleManager, RecoveryStorage,
  DependencyResolver to accept Properties instead of ZeppelinConfiguration
- Update all launcher plugins (Docker, K8s, YARN, Flink) accordingly
- Move ZeppelinConfiguration.java and ZeppelinLocationStrategy.java
  from zeppelin-interpreter to zeppelin-zengine
- Update callers in zeppelin-zengine, zeppelin-server, flink, and
  markdown interpreters

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
FlexmarkParser now accepts Properties for better extensibility,
instead of a single boolean escapeHtml parameter.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…onnectTimeout

ZeppelinConfiguration parsed time values like "600s" internally, but
after switching to Properties, the raw string is passed directly.
Add parseTimeValue() to handle "s" (seconds) and "ms" (milliseconds)
suffixes in timeout configuration values.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…zengine

Move server-side-only classes (InterpreterLauncher, InterpreterClient,
InterpreterLaunchContext, RecoveryStorage, InterpreterLauncherTest)
from zeppelin-interpreter to zeppelin-zengine. This allows launcher
plugins and recovery storage to keep using ZeppelinConfiguration
directly, eliminating unnecessary Properties conversion code.

Reverts launcher plugins and zengine launcher/recovery files to
their original ZeppelinConfiguration-based implementations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant