[14] RFR(M): 8211723: AppCDS: referring to a jar file in any way other than exactly how it was done during dumping doesn't work
Calvin Cheung
calvin.cheung at oracle.com
Tue Jun 25 00:31:26 UTC 2019
Hi Ioi,
Thanks for your review!
I've made all your suggested changes.
I also excluded the runtime/appcds/RelativePath.java from the
hotspot_appcds_dynamic test group because:
1. it fails in TestCommon.patchJarForDynamicDump():
if (!firstJar.startsWith(expected1) &&
!firstJar.startsWith(expected2)) {
throw new RuntimeException("FIXME: jar file not at a
supported location ('"
+ expected1 + "', or '" +
expected2 + "'): " + firstJar);
}
2. similar test exists in runtime/appcds/dynamicArchive/RelativePath.java.
Updated webrevs:
incremental: http://cr.openjdk.java.net/~ccheung/8211723/delta_00_01/
full: http://cr.openjdk.java.net/~ccheung/8211723/webrev.01/
thanks,
Calvin
On 6/24/19, 11:25 AM, Ioi Lam wrote:
> Hi Calvin,
>
> The changes look good to me (I've already reviewed a preliminary of
> this patch internally). Just a few small comments:
>
>
> filemap.cpp:
>
> 573 while (end_ptr != NULL) {
> 574 if ((end_ptr - begin_ptr) > 1 || *end_ptr == '\0') {
> 575 struct stat st;
> 576 char* temp_name = NEW_RESOURCE_ARRAY(char, (size_t)(end_ptr
> - begin_ptr + 1));
> 577 strncpy(temp_name, begin_ptr, end_ptr - begin_ptr);
> 578 temp_name[end_ptr - begin_ptr] = '\0';
> 579 if (os::stat(temp_name, &st) == 0) {
> 580 path_array->append(temp_name);
> 581 }
>
> I think the (*end_ptr == '\0') is not needed. Otherwise if you
> have -cp "foo.jar:", you will end up having temp_name == "".
>
> ----
>
> bool FileMapInfo::validate_shared_path_table(bool is_static);
> bool FileMapInfo::validate_boot_class_paths(bool is_static);
>
> Instead of passing is_static, how about making these two functions a
> member function?
> Then, in dynamicArchive.cpp, you can do this:
>
> if (!dynamic_info->validate_shared_path_table()) {
>
> and in here:
>
> bool FileMapInfo::validate_boot_class_paths() {
> ....
> bool relaxed_check = header()->has_platform_or_app_classes() :
>
>
> ----
>
> I'd suggest adding the following comment:
>
> bool FileMapInfo::check_paths(int shared_path_start_idx, int
> num_paths, GrowableArray<char*>* rp_array) {
> int i = 0;
> int j = shared_path_start_idx;
> bool mismatch = false;
> while (i < num_paths && !mismatch) {
> while (shared_path(j)->from_class_path_attr()) {
> // shared_path(j) was expanded from the JAR file attribute
> "Class-Path:"
> // during dump time. It's not included in the -classpath VM
> argument.
> j++;
> }
>
>
> ----
> os_windows.cpp:
>
> static HANDLE open_file(const char* file) {
>
> I think this should be renamed to something like
> "create_read_only_file_handle". That way it
> will be clear that this function is not a generic function for
> "opening a file" so it's less
> likely to be mis-used in the future.
>
> Thanks
> - Ioi
>
>
>
>
> On 6/20/19 3:32 PM, Calvin Cheung wrote:
>> RFE: https://bugs.openjdk.java.net/browse/JDK-8211723
>>
>> webrev: http://cr.openjdk.java.net/~ccheung/8211723/webrev.00/
>>
>> Currently, the class paths comparison between AppCDS dump time and
>> runtime is done via the os::file_name_strncmp() function. It works
>> well only for absolute paths. This RFE enhances it by allowing
>> relative path and sym link.
>>
>> Highlight of changes:
>> - the os::file_name_strncmp() and its usages have been removed;
>>
>> - a _from_class_path_attr field of type bool has been added to the
>> ClassPathZipEntry to indicate if the entry is from the “Class-path”
>> attribute of a jar file;
>>
>> - FileMapInfo::same_files() has been separated into posix
>> (os_posix.cpp) and windows (os_windows.cpp) versions.
>>
>> - checking of the boot and the app class paths have been moved from
>> SharedPathsMiscInfo::check() to
>> FileMapInfo::validate_shared_path_table();
>>
>> - for checking the runtime app class paths against the dump time,
>> Arguments::get_appclasspath() is used for getting the runtime app
>> class paths and are stored into an array. The array of runtime app
>> class paths will be checked against the shared_path from the shared
>> archive one by one. If a shared_path is from the “Class-path”
>> attribute of a jar file, it will be skipped. The same is being done
>> currently; i.e. we don’t expand the class paths obtained from
>> Arguments::get_appclasspath() if any of the jar refers to other jars
>> by means of the “Class-path” attribute. Some sanity checks including
>> file size and modification time is being done currently for all the
>> jars in the shared_path. This remains the same with this change.
>>
>> - boot class paths are being checked in a similar way to app class
>> paths. Some specifics such as the notion of “relaxed_check” remains
>> unchanged;
>>
>> - test utilities and new tests.
>>
>> Testing: tier1 through tier3 on linux, windows, macosx, solaris.
>>
>> thanks,
>> Calvin
>
More information about the hotspot-runtime-dev
mailing list