[
https://issues.apache.org/jira/browse/IGNITE-28863?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18094182#comment-18094182
]
Ignite TC Bot commented on IGNITE-28863:
----------------------------------------
{panel:title=Branch: [pull/13330/head] Base: [master] : No blockers
found!|borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}{panel}
{panel:title=Branch: [pull/13330/head] Base: [master] : No new tests
found!|borderStyle=dashed|borderColor=#ccc|titleBGColor=#F7D6C1}{panel}
[TeamCity *--> Run :: All*
Results|https://ci2.ignite.apache.org/viewLog.html?buildId=9183784&buildTypeId=IgniteTests24Java8_RunAll]
{color:#ffffff}tcbot-analysis-comment chainBuildId=9183784
rerunBuildIds=none{color}
> Fix flaky GridFileDeploymentSelfTest
> ------------------------------------
>
> Key: IGNITE-28863
> URL: https://issues.apache.org/jira/browse/IGNITE-28863
> Project: Ignite
> Issue Type: Test
> Reporter: Dmitry Werner
> Assignee: Dmitry Werner
> Priority: Minor
> Labels: MakeTeamcityGreenAgain, ise
> Attachments: _Apache_Ignite_2.x_Tests_SPI_URI_Deploy_40213.log
>
> Time Spent: 1h
> Remaining Estimate: 0h
>
> *Root Cause*
> The pom.xml build script intentionally creates a corrupted JAR for testing
> bad signature verification:
> 1. Copies `GridUriDeploymentTestTask11.class` under the name
> `GridUriDeploymentTestWithNameTask11.class` (bytecode contains `this_class =
> GridUriDeploymentTestTask11` → mismatch with filename)
> 2. Packs this corrupted class into JAR, signs it, then updates the JAR with
> the correct class:
> {code:java}
> <zip destfile="...${bad-signed.jar}" basedir=".../target/classes/"
> includes=".../GridUriDeploymentTestWithNameTask11.class" update="yes"
> />{code}
> The problem: in Ant 1.10.x, {{zip update="yes"}} sometimes silently skips the
> replacement. The “file is newer than the archive entry” check operates at the
> 2‑second granularity boundary of DOS timestamps in ZIP archives, and the
> sequence {{sleep 2 + touch}} sets the file’s mtime exactly on this boundary.
> When the check determines that the file is “not newer,” the archive retains
> only the original, corrupted entry.
> This crashes the `grid-uri-scanner` thread, stopping all subsequent
> deployments.
> All `checkTask()` assertions fail with `findResource() == null`.
> {code:java}
>
> [ERROR][grid-uri-scanner-#35%file.GridFileDeploymentSelfTest%-#269%file.GridFileDeploymentSelfTest%][UriDeploymentScannerManager]
> Runtime error caught during grid runnable execution:
> IgniteSpiThread
> [name=grid-uri-scanner-#35%file.GridFileDeploymentSelfTest%-#269%file.GridFileDeploymentSelfTest%]
> java.lang.NoClassDefFoundError:
> org/apache/ignite/spi/deployment/uri/tasks/GridUriDeploymentTestWithNameTask11
> (wrong name: org/apache/ignite/spi/deployment/uri/tasks/
> GridUriDeploymentTestTask11)
> at java.base/java.lang.ClassLoader.defineClass1(Native Method)
> at
> java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
> at
> java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
> at
> java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:524)
> at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:427)
> at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:421)
> at
> java.base/java.security.AccessController.doPrivileged(JavaAccessController.java:77)
> at
> java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:420)
> at
> org.apache.ignite.spi.deployment.uri.GridUriDeploymentClassLoader.loadClass(GridUriDeploymentClassLoader.java:56)
> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
> at
> org.apache.ignite.spi.deployment.uri.GridUriDeploymentFileResourceLoader.createResource(GridUriDeploymentFileResourceLoader.java:72)
> at
> org.apache.ignite.spi.deployment.uri.GridUriDeploymentDiscovery.findResourcesInDirectory(GridUriDeploymentDiscovery.java:109)
> ... (recursive directory traversal) ...
> at
> org.apache.ignite.spi.deployment.uri.GridUriDeploymentDiscovery.getClasses(GridUriDeploymentDiscovery.java:71)
> at
> org.apache.ignite.spi.deployment.uri.GridUriDeploymentFileProcessor.processNoDescriptorFile(GridUriDeploymentFileProcessor.java:388)
> at
> org.apache.ignite.spi.deployment.uri.GridUriDeploymentFileProcessor.processFile(GridUriDeploymentFileProcessor.java:108)
> at
> org.apache.ignite.spi.deployment.uri.UriDeploymentSpi$2.onNewOrUpdatedFile(UriDeploymentSpi.java:590)
> at
> org.apache.ignite.spi.deployment.uri.scanners.file.UriDeploymentFileScanner$URIContext.handleFile(UriDeploymentFileScanner.java:268)
> at
> org.apache.ignite.spi.deployment.uri.scanners.file.UriDeploymentFileScanner$URIContext$1.handle(UriDeploymentFileScanner.java:178)
> at
> org.apache.ignite.spi.deployment.uri.scanners.GridDeploymentFolderScannerHelper.scanFolder(GridDeploymentFolderScannerHelper.java:49)
> at
> org.apache.ignite.spi.deployment.uri.scanners.GridDeploymentFolderScannerHelper.scanFolder(GridDeploymentFolderScannerHelper.java:52)
> at
> org.apache.ignite.spi.deployment.uri.scanners.file.UriDeploymentFileScanner$URIContext.scan(UriDeploymentFileScanner.java:183)
> at
> org.apache.ignite.spi.deployment.uri.scanners.file.UriDeploymentFileScanner.scan(UriDeploymentFileScanner.java:73){code}
> The same issue exists for `bad-signed-deployfile.gar` with
> `GridUriDeploymentTestWithNameTask6`.
> *Fix*
> Replace `ant zip update="yes"` with the standard unzip → copy → zip pattern
> and remove the logic that depends on timestamps:
> {code:java}
> <unzip src=".../${bad-signed.jar}" dest="${basedir}/target/file_tmp/zipfix"
> />
> <copy
> file="${basedir}/target/classes/.../GridUriDeploymentTestWithNameTask11.class"
> todir="${basedir}/target/file_tmp/zipfix/..." overwrite="yes" />
> <delete file=".../${bad-signed.jar}" />
> <zip destfile=".../${bad-signed.jar}"
> basedir="${basedir}/target/file_tmp/zipfix" />{code}
> Applied to both `deployfile-bad-signed.jar` and `bad-signed-deployfile.gar`.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)