Skip to content

TEZ-4007: Introduce AmExtensions and Zookeeper-based FrameworkServices - #427

Merged
abstractdog merged 8 commits into
apache:masterfrom
abstractdog:TEZ-4007
Jan 16, 2026
Merged

TEZ-4007: Introduce AmExtensions and Zookeeper-based FrameworkServices#427
abstractdog merged 8 commits into
apache:masterfrom
abstractdog:TEZ-4007

Conversation

@abstractdog

@abstractdogabstractdog commented Sep 6, 2025

Copy link
Copy Markdown
Contributor

This PR contains a Zookeeper-based Framework service and a major refactor in this area.

Pieces of this PR:

  • include curator dependency
  • remove amUuid from DAGAppMaster
  • harmonized id/opaque id to externalId in terms of variable and env constant name
  • FrameworkService base interface: marker interface for framework-level services, implementations are framework-specific (currently yarn or zookeeper)
    • ClientFrameworkService: interface for client-side framework services; users of this class can acquire tez clients for the actual framework (yarn/zookeeper)
    • ServerFrameworkService: interface for server-side framework services; users of this class can acquire server-side logic for the actual framework (yarn/zookeeper)
  • AMExtensions: a class that encapsulates all the pluggable logic within DAGAppMaster
  • update unit tests to provide an AMExtensions to prevent NPE while mocking

@tez-yetus

This comment was marked as outdated.

* Curator/Zookeeper impl of AMRegistryClient
*/
@InterfaceAudience.Public
public class ZkAMRegistryClient extends AMRegistryClient {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a question. What is the duty of ZooKeeper here? When I read this patch a while ago, I presumed ZooKeeper would be used for two reasons. My memory might be wrong.

  1. Generate a unique application ID
  2. Service discovery for application masters

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@okumin: both:

  1. ZkAMRegistry.generateNewId takes care of generating applicationId (backed by zookeeper)
  2. it also for service discovery (AM registers itself, client receives updates about that)

I'm happy to see that you're interested in the area!
please be aware that it's under refactor, I'll let you know, when it's ready

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. Background: I wonder if it can be independent of ZooKeeper technically. The reliability and fault-tolerance of ZK are beneficial in many environments, but in other cases, high availability is not necessary. Trino does not provide fault-tolerance with its coordinator, and some users appreciate the ease of use.

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

absolutely! be aware that these patches have been working for years in downstream distributions. This PR is about contributing them back, so apparently, it's ZK the long-term plan is to improve abstractions and make it more pluggable, and replace ZK with Kubernetes etcd, for example, but the default (yarn-based) behavior doesn't utilize an AM registry at all
can you please elaborate on how Trino's lack of fault tolerance comes to this picture? I mean, this ZK-based registry is more about AM service discovery, not fault tolerance

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi folks, sorry, I'd like to chime in with a question here. :)

From the description of TEZ-3991, this feature seems to allow the AM to manage its own lifecycle, while clients such as HiveServer2 only need to discover available AMs via ZooKeeper (ZK) and submit tasks.

Based on my current limited understanding, the benefits of this feature should include reducing the burden on HS2 and potentially making task submission more efficient.

However, I have a few questions:

  • Is this feature primarily beneficial for LLAP mode? Since LLAP requires long-running Tez AMs, and IMO this feature seems more useful for long-running tasks.

  • Could this functionality serve as preliminary groundwork for decoupling the Tez framework from YARN? For example, could it pave the way for Tez to run directly on Kubernetes without relying on YARN for resource management?

Thanks.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

be aware that these patches have been working for years in downstream distributions

Sounds excellent.

can you please elaborate on how Trino's lack of fault tolerance comes to this picture?

Trino must have SPOF, but still attracts users. Hive on Tez (with LLAP) without fault tolerance is easier to set up than Hive on Tez with fault tolerance. I expect the easy quick start should attract users.

@abstractdogabstractdog changed the title TEZ-4007: Zookeeper based FrameworkServices and AmExtensions (3/3) - initial patch[DRAFT] TEZ-4007: Zookeeper based FrameworkServices and AmExtensions (3/3) - initial patchSep 11, 2025
@tez-yetus

This comment was marked as outdated.

@tez-yetus

This comment was marked as outdated.

@tez-yetus

This comment was marked as outdated.

@abstractdog
abstractdogforce-pushed the TEZ-4007 branch 2 times, most recently from d3c969a to b3ae071CompareOctober 14, 2025 08:21
@tez-yetus

This comment was marked as outdated.

@tez-yetus

This comment was marked as outdated.

@abstractdogabstractdog changed the title [DRAFT] TEZ-4007: Zookeeper based FrameworkServices and AmExtensions (3/3) - initial patch[DRAFT] TEZ-4007: Zookeeper based FrameworkServices and AmExtensions (3/3) + refactorOct 15, 2025
@tez-yetus

This comment was marked as outdated.

@abstractdog
abstractdogforce-pushed the TEZ-4007 branch 5 times, most recently from ec30327 to db11fb6CompareOctober 17, 2025 12:49
@tez-yetus

This comment was marked as outdated.

@tez-yetus

This comment was marked as outdated.

@tez-yetus

This comment was marked as outdated.

@tez-yetus

This comment was marked as outdated.

@abstractdog
abstractdogforce-pushed the TEZ-4007 branch 2 times, most recently from 2e44662 to eec88abCompareOctober 22, 2025 13:51
@tez-yetus

This comment was marked as outdated.

@tez-yetus

This comment was marked as outdated.

@tez-yetus

Copy link
Copy Markdown

🎊 +1 overall

VoteSubsystemRuntimeLogfileComment
+0 🆗reexec0m 30sDocker mode activated.
_ Prechecks _
+1 💚dupname0m 0sNo case conflicting files found.
+0 🆗detsecrets0m 1sdetect-secrets was not available.
+0 🆗xmllint0m 1sxmllint was not available.
+1 💚@author0m 0sThe patch does not contain any @author tags.
+1 💚test4tests0m 0sThe patch appears to include 14 new or modified test files.
_ master Compile Tests _
+0 🆗mvndep2m 38sMaven dependency ordering for branch
+1 💚mvninstall9m 51smaster passed
+1 💚compile5m 23smaster passed
+1 💚checkstyle3m 14smaster passed
+1 💚javadoc4m 3smaster passed
+0 🆗spotbugs2m 9stez-api in master has 610 extant spotbugs warnings.
+0 🆗spotbugs0m 47stez-common in master has 13 extant spotbugs warnings.
+0 🆗spotbugs1m 10stez-runtime-library in master has 241 extant spotbugs warnings.
+0 🆗spotbugs0m 45stez-examples in master has 2 extant spotbugs warnings.
+0 🆗spotbugs1m 44stez-dag in master has 785 extant spotbugs warnings.
+0 🆗spotbugs6m 51sroot in master has 2066 extant spotbugs warnings.
-0 ⚠️patch7m 34sUsed diff version of patch file. Binary files and potentially other changes not applied. Please rebase and squash commits if necessary.
_ Patch Compile Tests _
+0 🆗mvndep0m 17sMaven dependency ordering for patch
+1 💚mvninstall6m 21sthe patch passed
+1 💚codespell0m 50sNo new issues.
+1 💚compile5m 19sthe patch passed
+1 💚javac5m 19sthe patch passed
+1 💚blanks0m 0sThe patch has no blanks issues.
+1 💚checkstyle0m 26stez-api: The patch generated 0 new + 118 unchanged - 3 fixed = 118 total (was 121)
+1 💚checkstyle0m 23sThe patch passed checkstyle in tez-common
+1 💚checkstyle0m 27sThe patch passed checkstyle in tez-runtime-library
+1 💚checkstyle0m 23stez-examples: The patch generated 0 new + 10 unchanged - 1 fixed = 10 total (was 11)
-0 ⚠️checkstyle0m 33s/results-checkstyle-tez-dag.txttez-dag: The patch generated 2 new + 610 unchanged - 2 fixed = 612 total (was 612)
-0 ⚠️checkstyle0m 45s/results-checkstyle-root.txtroot: The patch generated 2 new + 740 unchanged - 6 fixed = 742 total (was 746)
+1 💚javadoc3m 59sthe patch passed
+1 💚spotbugs14m 13sthe patch passed
_ Other Tests _
+1 💚unit2m 36stez-api in the patch passed.
+1 💚unit0m 42stez-common in the patch passed.
+1 💚unit6m 9stez-runtime-library in the patch passed.
+1 💚unit0m 32stez-examples in the patch passed.
+1 💚unit6m 7stez-dag in the patch passed.
+1 💚unit73m 45sroot in the patch passed.
+1 💚asflicense2m 46sThe patch does not generate ASF License warnings.
170m 36s
SubsystemReport/Notes
DockerClientAPI=1.52 ServerAPI=1.52 base: https://ci-hadoop.apache.org/job/tez-multibranch/job/PR-427/36/artifact/out/Dockerfile
GITHUB PR#427
Optional Testsdupname asflicense javac javadoc unit codespell detsecrets xmllint compile spotbugs checkstyle
unameLinux e3f0c21725bf 5.15.0-161-generic #171-Ubuntu SMP Sat Oct 11 08:17:01 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Build toolmaven
Personality/home/jenkins/jenkins-home/workspace/tez-multibranch_PR-427/src/.yetus/personality.sh
git revisionmaster / 3938781
Default JavaUbuntu-21.0.8+9-Ubuntu-0ubuntu124.04.1
Test Resultshttps://ci-hadoop.apache.org/job/tez-multibranch/job/PR-427/36/testReport/
Max. process+thread count1379 (vs. ulimit of 5500)
modulesC: tez-api tez-common tez-runtime-library tez-examples tez-dag . U: .
Console outputhttps://ci-hadoop.apache.org/job/tez-multibranch/job/PR-427/36/console
versionsgit=2.43.0 maven=3.8.7 spotbugs=4.9.3 codespell=2.0.0
Powered byApache Yetus 0.15.1 https://yetus.apache.org

This message was automatically generated.

@ayushtknayushtkn left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Minor comments. Rest LGTM

if (other instanceof AMRecord otherRecord) {
return appId.equals(otherRecord.appId)
&& host.equals(otherRecord.host)
&& hostName.equals(otherRecord.hostName)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can this lead to NPE, we don't have any default here

this.hostName = serviceRecord.get(HOST_NAME_RECORD_KEY);

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is initialized from DAGAppMaster:
https://github.com/apache/tez/pull/427/files#diff-54ba4a2af15261379079ed5a9c1f9eea52da7bdd3f1109fe7b96d4abf07f6173R677-R678

 AMRecord amRecord = amRegistry.createAmRecord(appId, rpcServerAddress.getHostName(),
rpcServerAddress.getAddress().getHostAddress(), rpcServerAddress.getPort(), computeName);

hostName is not supposed to be null, so if it's null, it's already a fatal issue, which is revealed by NPE, I don't think we make this better


@Override
public String toString() {
return toServiceRecord().attributes().toString();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

toString calls toServiceRecord, So, it can lead to initializing the serviceRecord = new ServiceRecord();, are we ok with it. This could lead to issues later, like someone logged it or so, before setting the values and then we have the service record cached as well

@abstractdogabstractdogJan 7, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there is no "before setting the values" scenario given only final fields, I'm assuming the the logging must happen with the AMRecord instance when the constructor is definitely finished

AMRecord createAmRecord(ApplicationId appId, String hostName, String hostIp, int port,
String computeName);

void close();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AutoCloseable already defines close, do we need to define again here?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ack

Comment on lines +42 to +44
void add(AMRecord server) throws Exception;

void remove(AMRecord server) throws Exception;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should it be server or record

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

record is better, fixing this

* <p>Listeners may be registered to receive notifications when AM records
* appear or are removed.</p>
*/
public abstract class AMRegistryClient implements Closeable {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we do implements AutoCloseable?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can, but it doesn't make the code better: this class is usually used as field, not local variable in try-catch, this applies to production as well as testing code, so I think Closeable might be better here

@Override
public void start() {
try {
amRegistryClient.start();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should return if isRunning is true here


public class ZkFrameworkClient extends FrameworkClient {

private AMRecord amRecord;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this be volatile

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it should, also, tracking amHost and amPort separately doesn't make sense, let's just rely on a single volatile record field

} else if (modeInEnv != null) {
return getByMode(interfaze, modeInEnv);
} else if (defaultClazz != null) {
return (T) defaultClazz.newInstance();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is deprecated, does this work

defaultClazz.getDeclaredConstructor().newInstance();

String modeInConf = conf != null ? conf.get(TezConfiguration.TEZ_FRAMEWORK_MODE) : null;
String modeInEnv = System.getenv(TezConstants.TEZ_FRAMEWORK_MODE);
try {
if (modeInConf != null) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should it be StringUtils.isNotEmpty()?

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ack, much cleaner and takes care of empty string too

.thenReturn(YarnApplicationState.RUNNING);

//Client 1 start
client.start();

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

missing close?

@tez-yetus

This comment was marked as outdated.

@abstractdog

Copy link
Copy Markdown
ContributorAuthor

@ayushtkn : address your comments, good catches, thanks!

@tez-yetus

This comment was marked as outdated.

@tez-yetus

This comment was marked as outdated.

@okuminokumin left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for porting the nice feature 👍


if (sessionToken == null) {
throw new RuntimeException("Could not find session token in AM Credentials");
sessionToken = TokenCache.getSessionToken(amCredentials);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When does this double-check help?

  • YARN -> When sessionToken is null, TokenCache.getSessionToken(amCredentials) is probably always null
  • ZK -> sessionToken is not always null

@abstractdogabstractdogJan 12, 2026

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

right, so the extra attempt to fetch it from session token doesn't make sense, let me change this to:

 if (sessionToken == null) {
throw new RuntimeException("Could not find session token in AM Credentials");
}

import org.apache.tez.frameworkplugins.ClientFrameworkService;

public class ZkStandaloneClientFrameworkService implements ClientFrameworkService {
@Override public FrameworkClient newFrameworkClient() {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
@OverridepublicFrameworkClientnewFrameworkClient() {
@Override
publicFrameworkClientnewFrameworkClient() {

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good catch, thanks!

@tez-yetus

Copy link
Copy Markdown

(!) A patch to the testing environment has been detected.
Re-executing against the patched versions to perform further tests.
The console is at https://ci-hadoop.apache.org/job/tez-multibranch/job/PR-427/40/console in case of problems.

@tez-yetus

Copy link
Copy Markdown

💔 -1 overall

VoteSubsystemRuntimeLogfileComment
+0 🆗reexec20m 46sDocker mode activated.
_ Prechecks _
+1 💚dupname0m 0sNo case conflicting files found.
+0 🆗detsecrets0m 0sdetect-secrets was not available.
+0 🆗shelldocs0m 1sShelldocs was not available.
+0 🆗xmllint0m 0sxmllint was not available.
+1 💚@author0m 0sThe patch does not contain any @author tags.
+1 💚test4tests0m 0sThe patch appears to include 14 new or modified test files.
_ master Compile Tests _
+0 🆗mvndep2m 15sMaven dependency ordering for branch
+1 💚mvninstall9m 32smaster passed
+1 💚compile5m 24smaster passed
+1 💚checkstyle3m 17smaster passed
+1 💚javadoc4m 5smaster passed
-1 ❌spotbugs1m 15s/branch-spotbugs-tez-api.txttez-api in master failed.
-1 ❌spotbugs0m 29s/branch-spotbugs-tez-common.txttez-common in master failed.
-1 ❌spotbugs0m 38s/branch-spotbugs-tez-runtime-library.txttez-runtime-library in master failed.
-1 ❌spotbugs0m 31s/branch-spotbugs-tez-examples.txttez-examples in master failed.
-1 ❌spotbugs0m 43s/branch-spotbugs-tez-dag.txttez-dag in master failed.
-1 ❌spotbugs0m 24s/branch-spotbugs-root.txtroot in master failed.
-0 ⚠️patch8m 59sUsed diff version of patch file. Binary files and potentially other changes not applied. Please rebase and squash commits if necessary.
_ Patch Compile Tests _
+0 🆗mvndep0m 19sMaven dependency ordering for patch
+1 💚mvninstall6m 20sthe patch passed
+1 💚codespell0m 51sNo new issues.
+1 💚compile5m 25sthe patch passed
+1 💚javac5m 25sthe patch passed
+1 💚blanks0m 0sThe patch has no blanks issues.
+1 💚checkstyle0m 27stez-api: The patch generated 0 new + 118 unchanged - 3 fixed = 118 total (was 121)
+1 💚checkstyle0m 23sThe patch passed checkstyle in tez-common
+1 💚checkstyle0m 27sThe patch passed checkstyle in tez-runtime-library
+1 💚checkstyle0m 24stez-examples: The patch generated 0 new + 10 unchanged - 1 fixed = 10 total (was 11)
-0 ⚠️checkstyle0m 34s/results-checkstyle-tez-dag.txttez-dag: The patch generated 2 new + 610 unchanged - 2 fixed = 612 total (was 612)
-0 ⚠️checkstyle0m 46s/results-checkstyle-root.txtroot: The patch generated 2 new + 740 unchanged - 6 fixed = 742 total (was 746)
+1 💚hadolint0m 1sNo new issues.
+1 💚shellcheck0m 0sNo new issues.
+1 💚javadoc3m 57sthe patch passed
+1 💚spotbugs13m 41sthe patch passed
_ Other Tests _
+1 💚unit2m 35stez-api in the patch passed.
+1 💚unit0m 43stez-common in the patch passed.
+1 💚unit6m 12stez-runtime-library in the patch passed.
+1 💚unit0m 31stez-examples in the patch passed.
+1 💚unit5m 54stez-dag in the patch passed.
+1 💚unit72m 52sroot in the patch passed.
+1 💚asflicense2m 47sThe patch does not generate ASF License warnings.
178m 42s
SubsystemReport/Notes
DockerClientAPI=1.52 ServerAPI=1.52 base: https://ci-hadoop.apache.org/job/tez-multibranch/job/PR-427/40/artifact/out/Dockerfile
GITHUB PR#427
Optional Testsdupname asflicense codespell detsecrets hadolint shellcheck shelldocs javac javadoc unit xmllint compile spotbugs checkstyle
unameLinux be3143d28af1 5.15.0-161-generic #171-Ubuntu SMP Sat Oct 11 08:17:01 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Build toolmaven
Personality/home/jenkins/jenkins-home/workspace/tez-multibranch_PR-427/src/.yetus/personality.sh
git revisionmaster / 0f9a678
Default JavaUbuntu-21.0.9+10-Ubuntu-124.04
Test Resultshttps://ci-hadoop.apache.org/job/tez-multibranch/job/PR-427/40/testReport/
Max. process+thread count1306 (vs. ulimit of 5500)
modulesC: tez-api tez-common tez-runtime-library tez-examples tez-dag . U: .
Console outputhttps://ci-hadoop.apache.org/job/tez-multibranch/job/PR-427/40/console
versionsgit=2.43.0 maven=3.8.7 hadolint=1.18.0-0-g76eee5c codespell=2.0.0 shellcheck=0.7.1
Powered byApache Yetus 0.15.1 https://yetus.apache.org

This message was automatically generated.

@abstractdog

Copy link
Copy Markdown
ContributorAuthor

hm, something happened to spotbugs, even the latest version didn't help:
0f9a678

@abstractdog

abstractdog commented Jan 14, 2026

Copy link
Copy Markdown
ContributorAuthor

hm, something happened to spotbugs, even the latest version didn't help: 0f9a678

created TEZ-4669 about this, assuming spotbugs to be clean with this patch according to earlier runs (like this)

@ayushtknayushtkn left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Thanx @abstractdog for the nice work & bearing with my slow reviews :-)

@abstractdog

Copy link
Copy Markdown
ContributorAuthor

Thanks, @ayushtkn, for the approval!
I'm about to merge this soon, let me wait another few hours to maybe let @okumin, @zhangbutao chime in if I addressed all their comments regarding the code

@zhangbutao

Copy link
Copy Markdown
Contributor

Thank you! @abstractdog I can't wait to experience the features of Tez on Cloud. Let's move on to the next step!

@tez-yetus

Copy link
Copy Markdown

💔 -1 overall

VoteSubsystemRuntimeLogfileComment
+0 🆗reexec0m 45sDocker mode activated.
_ Prechecks _
+1 💚dupname0m 0sNo case conflicting files found.
+0 🆗detsecrets0m 1sdetect-secrets was not available.
+0 🆗xmllint0m 1sxmllint was not available.
+1 💚@author0m 0sThe patch does not contain any @author tags.
+1 💚test4tests0m 0sThe patch appears to include 14 new or modified test files.
_ master Compile Tests _
+0 🆗mvndep2m 26sMaven dependency ordering for branch
+1 💚mvninstall9m 37smaster passed
+1 💚compile5m 24smaster passed
+1 💚checkstyle3m 18smaster passed
+1 💚javadoc3m 58smaster passed
-1 ❌spotbugs1m 19s/branch-spotbugs-tez-api.txttez-api in master failed.
-1 ❌spotbugs0m 30s/branch-spotbugs-tez-common.txttez-common in master failed.
-1 ❌spotbugs0m 37s/branch-spotbugs-tez-runtime-library.txttez-runtime-library in master failed.
-1 ❌spotbugs0m 30s/branch-spotbugs-tez-examples.txttez-examples in master failed.
-1 ❌spotbugs0m 44s/branch-spotbugs-tez-dag.txttez-dag in master failed.
-1 ❌spotbugs0m 24s/branch-spotbugs-root.txtroot in master failed.
-0 ⚠️patch12m 41sUsed diff version of patch file. Binary files and potentially other changes not applied. Please rebase and squash commits if necessary.
_ Patch Compile Tests _
+0 🆗mvndep0m 16sMaven dependency ordering for patch
+1 💚mvninstall6m 22sthe patch passed
+1 💚codespell0m 51sNo new issues.
+1 💚compile5m 28sthe patch passed
+1 💚javac5m 28sthe patch passed
+1 💚blanks0m 0sThe patch has no blanks issues.
+1 💚checkstyle0m 26stez-api: The patch generated 0 new + 118 unchanged - 3 fixed = 118 total (was 121)
+1 💚checkstyle0m 23sThe patch passed checkstyle in tez-common
+1 💚checkstyle0m 28sThe patch passed checkstyle in tez-runtime-library
+1 💚checkstyle0m 23stez-examples: The patch generated 0 new + 10 unchanged - 1 fixed = 10 total (was 11)
-0 ⚠️checkstyle0m 33s/results-checkstyle-tez-dag.txttez-dag: The patch generated 2 new + 610 unchanged - 2 fixed = 612 total (was 612)
-0 ⚠️checkstyle0m 46s/results-checkstyle-root.txtroot: The patch generated 2 new + 740 unchanged - 6 fixed = 742 total (was 746)
+1 💚javadoc3m 58sthe patch passed
-1 ❌spotbugs0m 38s/patch-spotbugs-tez-api.txttez-api in the patch failed.
-1 ❌spotbugs0m 31s/patch-spotbugs-tez-common.txttez-common in the patch failed.
-1 ❌spotbugs0m 38s/patch-spotbugs-tez-runtime-library.txttez-runtime-library in the patch failed.
-1 ❌spotbugs0m 28s/patch-spotbugs-tez-examples.txttez-examples in the patch failed.
-1 ❌spotbugs0m 42s/patch-spotbugs-tez-dag.txttez-dag in the patch failed.
-1 ❌spotbugs0m 24s/patch-spotbugs-root.txtroot in the patch failed.
_ Other Tests _
+1 💚unit2m 35stez-api in the patch passed.
+1 💚unit0m 42stez-common in the patch passed.
+1 💚unit6m 9stez-runtime-library in the patch passed.
+1 💚unit0m 30stez-examples in the patch passed.
+1 💚unit6m 28stez-dag in the patch passed.
+1 💚unit72m 8sroot in the patch passed.
+1 💚asflicense2m 36sThe patch does not generate ASF License warnings.
147m 21s
SubsystemReport/Notes
DockerClientAPI=1.52 ServerAPI=1.52 base: https://ci-hadoop.apache.org/job/tez-multibranch/job/PR-427/41/artifact/out/Dockerfile
GITHUB PR#427
Optional Testsdupname asflicense javac javadoc unit codespell detsecrets xmllint compile spotbugs checkstyle
unameLinux 08e0e7068641 5.15.0-161-generic #171-Ubuntu SMP Sat Oct 11 08:17:01 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Build toolmaven
Personality/home/jenkins/jenkins-home/workspace/tez-multibranch_PR-427/src/.yetus/personality.sh
git revisionmaster / ff289be
Default JavaUbuntu-21.0.9+10-Ubuntu-124.04
Test Resultshttps://ci-hadoop.apache.org/job/tez-multibranch/job/PR-427/41/testReport/
Max. process+thread count1389 (vs. ulimit of 5500)
modulesC: tez-api tez-common tez-runtime-library tez-examples tez-dag . U: .
Console outputhttps://ci-hadoop.apache.org/job/tez-multibranch/job/PR-427/41/console
versionsgit=2.43.0 maven=3.8.7 codespell=2.0.0
Powered byApache Yetus 0.15.1 https://yetus.apache.org

This message was automatically generated.

@abstractdog
abstractdog merged commit 4632058 into apache:masterJan 16, 2026
4 checks passed
Sign up for freeto 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.

5 participants

@abstractdog@tez-yetus@zhangbutao@okumin@ayushtkn