Description
Describe the issue
I have GraalVM CE 22.3.3 installed on an Amazon Linux 1 box:
$ uname -a
Linux t5a1 4.14.252-131.483.amzn1.x86_64 #1 SMP Mon Nov 1 20:48:11 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ java -version
openjdk version "11.0.20" 2023-07-18
OpenJDK Runtime Environment GraalVM CE 22.3.3 (build 11.0.20+8-jvmci-22.3-b22)
OpenJDK 64-Bit Server VM GraalVM CE 22.3.3 (build 11.0.20+8-jvmci-22.3-b22, mixed mode, sharing)
When I try to install Graal.js via gu, it fails with:
Installation of Graal.js failed: Component metadata storage is corrupted.
org.graalvm.component.installer.FailedOperationException: Component metadata storage is corrupted.
at org.graalvm.component.installer.Environment.failure(Environment.java:214)
Steps to reproduce the issue
Please include both build steps as well as run steps
- install GraalVM CE 22.3.3
sudo /usr/lib/jvm/java/bin/gu -e install js
Fails as follows:
$ sudo /usr/lib/jvm/java/bin/gu -e install js
Downloading: Component catalog from www.graalvm.org
Processing Component: Graal.js
Downloading: Component js: Graal.js from github.com
Installing new component: Graal.js (org.graalvm.js, version 22.3.3)
Installation of Graal.js failed: Component metadata storage is corrupted.
org.graalvm.component.installer.FailedOperationException: Component metadata storage is corrupted.
at org.graalvm.component.installer.Environment.failure(Environment.java:214)
at org.graalvm.component.installer.persist.DirectoryStorage.getRequiredProperty(DirectoryStorage.java:487)
at org.graalvm.component.installer.persist.DirectoryStorage.loadMetadataFrom(DirectoryStorage.java:304)
at org.graalvm.component.installer.persist.DirectoryStorage.doLoadComponentMetadata(DirectoryStorage.java:447)
at org.graalvm.component.installer.persist.DirectoryStorage.loadComponentMetadata(DirectoryStorage.java:442)
at org.graalvm.component.installer.model.ComponentRegistry.loadSingleComponent(ComponentRegistry.java:374)
at org.graalvm.component.installer.model.ComponentRegistry.loadSingleComponent(ComponentRegistry.java:350)
at org.graalvm.component.installer.model.ComponentRegistry.loadAllComponents(ComponentRegistry.java:341)
at org.graalvm.component.installer.model.ComponentRegistry.buildFileIndex(ComponentRegistry.java:403)
at org.graalvm.component.installer.model.ComponentRegistry.getComponentDirectories(ComponentRegistry.java:434)
at org.graalvm.component.installer.commands.InstallCommand.doInstallation(InstallCommand.java:675)
at org.graalvm.component.installer.commands.InstallCommand.executeStep(InstallCommand.java:565)
at org.graalvm.component.installer.commands.InstallCommand.execute(InstallCommand.java:206)
at org.graalvm.component.installer.ComponentInstaller.doProcessCommand(ComponentInstaller.java:447)
at org.graalvm.component.installer.ComponentInstaller.processCommand(ComponentInstaller.java:461)
at org.graalvm.component.installer.ComponentInstaller.run(ComponentInstaller.java:580)
at org.graalvm.component.installer.ComponentInstaller.main(ComponentInstaller.java:633)
Error: Component metadata storage is corrupted.
org.graalvm.component.installer.FailedOperationException: Component metadata storage is corrupted.
at org.graalvm.component.installer.Environment.failure(Environment.java:214)
at org.graalvm.component.installer.persist.DirectoryStorage.getRequiredProperty(DirectoryStorage.java:487)
at org.graalvm.component.installer.persist.DirectoryStorage.loadMetadataFrom(DirectoryStorage.java:304)
at org.graalvm.component.installer.persist.DirectoryStorage.doLoadComponentMetadata(DirectoryStorage.java:447)
at org.graalvm.component.installer.persist.DirectoryStorage.loadComponentMetadata(DirectoryStorage.java:442)
at org.graalvm.component.installer.model.ComponentRegistry.loadSingleComponent(ComponentRegistry.java:374)
at org.graalvm.component.installer.model.ComponentRegistry.loadSingleComponent(ComponentRegistry.java:350)
at org.graalvm.component.installer.model.ComponentRegistry.loadAllComponents(ComponentRegistry.java:341)
at org.graalvm.component.installer.model.ComponentRegistry.buildFileIndex(ComponentRegistry.java:403)
at org.graalvm.component.installer.model.ComponentRegistry.getComponentDirectories(ComponentRegistry.java:434)
at org.graalvm.component.installer.commands.InstallCommand.doInstallation(InstallCommand.java:675)
at org.graalvm.component.installer.commands.InstallCommand.executeStep(InstallCommand.java:565)
at org.graalvm.component.installer.commands.InstallCommand.execute(InstallCommand.java:206)
at org.graalvm.component.installer.ComponentInstaller.doProcessCommand(ComponentInstaller.java:447)
at org.graalvm.component.installer.ComponentInstaller.processCommand(ComponentInstaller.java:461)
at org.graalvm.component.installer.ComponentInstaller.run(ComponentInstaller.java:580)
at org.graalvm.component.installer.ComponentInstaller.main(ComponentInstaller.java:633)
Describe GraalVM and your environment:
- GraalVM version: CE 22.3.3
- JDK major version: 11
- OS: Amazon Linux 1
- Architecture: AMD64
More details
Looking at the source code for the DirectoryStorage class, it looks like this is the line that fails:
It's trying to read the "Bundle-Symbolic-Name" prop from the component metadata for the graaljs bundle and not finding it.
But i cracked open the jar and that prop does appear to be set...
$ more lib/installer/components/org.graalvm.js.component
Bundle-Name=Graal.js
Bundle-Symbolic-Name=org.graalvm.js
Bundle-Version=22.3.3
Bundle-RequireCapability=org.graalvm; filter\:\="(&(graalvm_version\=22.3.3)(os_name\=linux)(os_arch\=amd64)(java_version\=11))"
x-GraalVM-Stability-Level=supported
x-GraalVM-Stability=supported
x-GraalVM-Working-Directories=languages/js
x-GraalVM-Component-Distribution=bundled
$ more lib/installer/components/org.graalvm.component
Bundle-Name=GraalVM Core
Bundle-Symbolic-Name=org.graalvm
Bundle-Version=22.3.3
x-GraalVM-Stability-Level=supported