RFR(S): 8209598: Use log_error for error message in CDS code
Calvin Cheung
calvin.cheung at oracle.com
Thu Oct 25 22:51:07 UTC 2018
Hi Ioi,
I've updated classLoader.cpp based on your suggestions:
http://cr.openjdk.java.net/~ccheung/8209598/webrev.03/src/hotspot/share/classfile/classLoader.cpp.sdiff.html
thanks,
Calvin
On 10/25/18, 2:03 PM, Ioi Lam wrote:
> Hi Calvin,
>
> 1474 bool path_stat = get_canonical_path(path,
> canonical_class_src_path, JVM_MAXPATHLEN);
> 1475 assert(path_stat, "Bad src path");
>
> 1478 path_stat = get_canonical_path(ent->name(),
> canonical_path_table_entry, JVM_MAXPATHLEN);
> 1479 assert(path_stat, "Bad shared path");
>
> I think the variable "path_stat" is not clear -- it seems to suggest
> some sort of statistics. How about just use 'bool success'?
>
> Also, I think we need a comment to say why this assert is here.
> Something like
>
> // At this point all the paths have already been checked in
> ....where?..... and
> // must be valid.
> assert(success, "must be valid path");
>
> The rest of the changes look good.
>
> Thanks
>
> - Ioi
>
>
>
>
> On 10/25/18 10:09 AM, Calvin Cheung wrote:
>> Hi Jiangli,
>>
>> Thanks for your review.
>>
>> On 10/24/18, 4:39 PM, Jiangli Zhou wrote:
>>> Hi Calvin,
>>>
>>> - src/hotspot/share/classfile/classLoader.cpp
>>>
>>> 1474 if (!get_canonical_path(path, canonical_class_src_path,
>>> JVM_MAXPATHLEN)) {
>>> 1475 log_error(cds)("Bad pathname %s. CDS dump aborted.", path);
>>> 1476 vm_exit(1);
>>> 1477 }
>>>
>>> 1480 if (!get_canonical_path(ent->name(),
>>> canonical_path_table_entry, JVM_MAXPATHLEN)) {
>>> 1481 log_error(cds)("Bad pathname %s. CDS dump aborted.",
>>> ent->name());
>>> 1482 vm_exit(1);
>>> 1483 }
>>>
>>> By the time ClassLoader::record_result() is called, it should be
>>> guaranteed that the paths from the class stream source and the
>>> recorded path table are valid. Both of the above log_error & vm_exit
>>> should be replaced by asserting the return value of
>>> get_canonical_path() is true.
>> I've made the above change.
>>>
>>> - src/hotspot/share/memory/metaspaceShared.cpp
>>>
>>> 1648 if (IgnoreUnverifiableClassesDuringDump) {
>>> 1649 // This is useful when running JCK or SQE tests. You
>>> should not
>>> 1650 // enable this when running real apps.
>>> 1651 SystemDictionary::remove_classes_in_error_state();
>>> 1652 } else {
>>> 1653 log_error(cds)("Please remove the unverifiable classes
>>> from your class list and try again");
>>> 1654 exit(1);
>>> 1655 }
>>>
>>> IgnoreUnverifiableClassesDuringDump is enabled by default and we
>>> don't include unverifiable classes in the archive. The above comment
>>> is outdated. We probably can remove the diagnostic option,
>>> IgnoreUnverifiableClassesDuringDump altogether now. We used to quit
>>> dumping process when encountering unverifiable classes (we didn't
>>> have the class removal part), then
>>> IgnoreUnverifiableClassesDuringDump was added but set to false
>>> initially (to keep the old behavior).
>>> IgnoreUnverifiableClassesDuringDump was turned on by default later.
>>> The current behavior is the proper behavior and we can clean up the
>>> code.
>>
>> I've updated the comment. I think we should handle the removal of the
>> flag in a separate bug.
>>
>> I've also added a vm_exit_during_cds_dumping() function as suggested
>> by David so that we don't need to do explicit exit(1) at various places.
>>
>> Here's an updated webrev:
>> http://cr.openjdk.java.net/~ccheung/8209598/webrev.02/
>>
>> thanks,
>> Calvin
>>>
>>> Thanks,
>>>
>>> Jiangli
>>>
>>>
>>> On 10/23/18 9:36 PM, Calvin Cheung wrote:
>>>> Ioi, David,
>>>>
>>>> Here's an updated webrev:
>>>> http://cr.openjdk.java.net/~ccheung/8209598/webrev.01/
>>>>
>>>> I've run those 2 tests locally on linux-x64.
>>>>
>>>> thanks,
>>>> Calvin
>>>>
>>>> On 10/23/18, 8:50 PM, Ioi Lam wrote:
>>>>>
>>>>>
>>>>> On 10/23/18 7:27 PM, Calvin Cheung wrote:
>>>>>>
>>>>>>
>>>>>> On 10/23/18, 5:18 PM, Ioi Lam wrote:
>>>>>>> Hi Calvin,
>>>>>>>
>>>>>>> if (PrintSharedArchiveAndExit) {
>>>>>>> if (PrintSharedDictionary) {
>>>>>>> - tty->print_cr("\nShared classes:\n");
>>>>>>> + log_info(cds)("\nShared classes:\n");
>>>>>>> SystemDictionary::print_shared(tty);
>>>>>>> }
>>>>>>> if (_archive_loading_failed) {
>>>>>>> - tty->print_cr("archive is invalid");
>>>>>>> + log_error(cds)("archive is invalid");
>>>>>>> vm_exit(1);
>>>>>>> } else {
>>>>>>> - tty->print_cr("archive is valid");
>>>>>>> + log_info(cds)("archive is valid");
>>>>>>> vm_exit(0);
>>>>>>> }
>>>>>>> }
>>>>>>>
>>>>>>> I think this part should use print_cr, because the option says
>>>>>>> "Print ...". It shouldn't be necessary to explicitly set
>>>>>>> -Xlog:cds in order to get the printed message.
>>>>>> Should I just revert log_info changes and leave the log_error there?
>>>>>
>>>>> I think the log_error should be reverted as well, because it would
>>>>> look out of place with the rest of the output.
>>>>>
>>>>> Thanks
>>>>> - Ioi
>>>>>>>
>>>>>>> If you revert this, I think the two test cases also can be
>>>>>>> reverted.
>>>>>> Yes, the changes to the two tests were due to the log_info changes.
>>>>>>>
>>>>>>> The rest of the changes look OK.
>>>>>> Thanks for your review.
>>>>>>
>>>>>> Calvin
>>>>>>>
>>>>>>> Thanks
>>>>>>>
>>>>>>> - Ioi
>>>>>>>
>>>>>>>
>>>>>>> On 10/23/18 2:45 PM, Calvin Cheung wrote:
>>>>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8209598
>>>>>>>>
>>>>>>>> webrev: http://cr.openjdk.java.net/~ccheung/8209598/webrev.00/
>>>>>>>>
>>>>>>>> Use log_error(cds) instead of tty->print_cr for CDS error
>>>>>>>> messages. Also converted 2 CDS info messages to log_info(cds).
>>>>>>>>
>>>>>>>> Testing: mach5 hs-tier{1,2,3}
>>>>>>>>
>>>>>>>> thanks,
>>>>>>>> Calvin
>>>>>>>
>>>>>
>>>
>
More information about the hotspot-runtime-dev
mailing list