RFR: 8265465: jcmd VM.cds should keep already dumped archive when exceptions happens [v2]

Yumin Qi minqi at openjdk.java.net
Wed May 5 18:47:54 UTC 2021


On Wed, 5 May 2021 18:20:43 GMT, Ioi Lam <iklam at openjdk.org> wrote:

>> Yumin Qi has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   JCmdTestFileSecurity.java should be excluded from dynamic test group
>
> src/java.base/share/classes/jdk/internal/misc/CDS.java line 284:
> 
>> 282: 
>> 283:         String tempFileName = getArchiveFileName(archiveFileName);
>> 284:         File tempArchiveFile = new File(tempFileName);
> 
> I think the logic is too complicated. We can always write the archive to a temp file, and then rename it to the actual file. Also, to be consistent with the other variables, it should be `tempArchiveFileName`
> 
> 
> String tempArchiveFileName = archiveFileName + ".tmp";

getArchiveFileName also operates on create/delete temp file, so if that fails, throw exception back to caller. Do you think the logic should be kept?

> src/java.base/share/classes/jdk/internal/misc/CDS.java line 288:
> 
>> 286:         if (isStatic) {
>> 287:             String listFileName = tempFileName + ".classlist";
>> 288:             File listFile = new File(listFileName);
> 
> There's no need to use tempFileName for the classlist. The list file is always deleted after the dump has finished.

Yes, will revert it back.

> test/hotspot/jtreg/runtime/cds/appcds/jcmd/JCmdTestFileSecurity.java line 37:
> 
>> 35:  * @run driver jdk.test.lib.helpers.ClassFileInstaller sun.hotspot.WhiteBox
>> 36:  * @run main/othervm/timeout=480 -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI JCmdTestFileSecurity
>> 37:  */
> 
> "Security" is usually used for Java language security. I think it's better to call this test JCmdTestFileSafety.

Sure.

> test/hotspot/jtreg/runtime/cds/appcds/jcmd/JCmdTestFileSecurity.java line 63:
> 
>> 61:         test(localFileName, pid, noBoot,  EXPECT_PASS);
>> 62:         File targetFile = CDSTestUtils.getOutputDirAsFile();
>> 63:         targetFile.setWritable(false);
> 
> getOutputDirAsFile returns the current directory. Other test code may write to this directory. I think it's better to specify:
> 
> 
> localFileName = "subdir" + File.separator() + "MyStaticDump.jsa";
> 
> 
> and set `subdir` to be non-writeable.
> 
> Also, the local variable should be `targetDir` instead of `targetFile`.

Will try this, not sure if the subdir and the file can be created with current code. May be some extra code needed. 
Thanks for the review!

> test/hotspot/jtreg/runtime/cds/appcds/jcmd/JCmdTestFileSecurity.java line 92:
> 
>> 90:     public static void main(String... args) throws Exception {
>> 91:         if (Platform.isWindows()) {
>> 92:             // ON windows, File operation resulted difference from other OS.
> 
> Could you explain what the differences are?

Will add detail explanation.

-------------

PR: https://git.openjdk.java.net/jdk/pull/3886


More information about the core-libs-dev mailing list