<i18n dev> [15] RFR: 8187987: Add a mechanism to configure custom variants in HijrahChronology

naoto.sato at oracle.com naoto.sato at oracle.com
Thu Jan 16 21:08:53 UTC 2020


Hi Roger,

Thanks. My comments are embedded below.

On 1/16/20 12:06 PM, Roger Riggs wrote:
> Hi Naoto,
> 
> A couple of comments in the tests.
> 
> HijrahConfigTest:
> 
> 72:  Since onExit() starts a task in some executor and in some context,
>     its not clear that an exception thrown in that task will be reported.
>    Use the normal p.waitFor() and check the exit code.

Hmm, I was using the example in onExit() method, which reads:

---
API Note:
Using onExit is an alternative to waitFor that enables both additional 
concurrency and convenient access to the result of the Process.
---

So "alternative" is not "interchangeable" in this context?

> 
> 73: include the failed exit value in the exception; It may have some use 
> in debugging.

Anyway, I changed the above code to p.waitFor() for this reason.

> 
> HijrahConfigCheck:
> 
> 41: The data structure is a set; no entry can appear twice; there's no 
> point to the text
>    or the value of count should be included in the exception

At first I thought the same, but realized there could be a error case 
where "calendar type" in returned objects are the same, but objects 
themselves are different (thus the Set could accommodate both), so the test.

> 
> 44: typo: Instatiation
> 
> 48: if they are different, print the two chronologies
> 
> hijrah-config-Hijrah-test_islamic-test.properties:
>   I would include a comment to say the data does not represent an actual 
> calendar.

Corrected.

> 
> Roger
> 
> p.s.
> !! tests.Helper is a very uninformative class name (but that's not your 
> doing).

"Helper" is not helping in that regard :-)

Updated webrev: http://cr.openjdk.java.net/~naoto/8187987/webrev.03/

Naoto
> 
> 
> 
> 
> 
> 
> On 1/15/20 7:49 PM, naoto.sato at oracle.com wrote:
>> Updated:
>>
>> https://cr.openjdk.java.net/~naoto/8187987/webrev.02/
>>
>> The change includes the new naming convention, reduction of properties 
>> files reading to once, and utilization of logging.
>>
>> Naoto
>>
>> On 1/15/20 12:37 PM, Roger Riggs wrote:
>>> Hi,
>>>
>>> On 1/15/20 3:06 PM, naoto.sato at oracle.com wrote:
>>>> Hi Roger,
>>>>
>>>> Thank you for the review. Please find my comments below:
>>>>
>>>> On 1/15/20 10:30 AM, Roger Riggs wrote:
>>>>> Hi Naoto,
>>>>>
>>>>> Is it correct to say that there is no impact on startup until there 
>>>>> is an explicit reference to HijrahChronology?
>>>>> It would seem that the registering HijrahChronology would trigger 
>>>>> all the work and that happens when Chronology is initialized. (see 
>>>>> below)
>>>>
>>>> What I meant in the reply to Joe's email was that the data validity 
>>>> check done in loadCalendarData(), e.g., year value check, etc. which 
>>>> are not done at class init. But you are correct that the properties 
>>>> files are read twice (below). I thought it was fine as this is not a 
>>>> common case (not happened before, to be precise).
>>> Until it get used, there will still be a probe of the filesystem to 
>>> see if a config directory/file exists
>>> that would impact every startup. I don't see a way to mitigate that 
>>> without making the config  more complex.
>>>>
>>>>>
>>>>> HijrahChronology.java:
>>>>>
>>>>> 291-295: Since registerCustomChrono is the only place where 
>>>>> CONF_PATH is used,
>>>>>     do all the work, including the property lookup in that method.
>>>>> 836:  If other chronologies are built-in this code will need to be 
>>>>> changed.
>>>>>     Can it do the getResourceAsStream first in all cases and fall 
>>>>> back to /conf/chronology?
>>>>
>>>> Yes, it would have to be changed if we support built-in type other 
>>>> than umalqura. But I would think other code would have to anyways. I 
>>>> think we can take advantage of the fact that umalqura is the only 
>>>> built-in, and others come from /conf/chronology so that extra 
>>>> fallback is avoided.
>>> Possibly, but could/would be more localized and consist of only the 
>>> registerChronology call.
>>>>
>>>>>
>>>>> 855: Since all the loading is triggered from a static initializer, 
>>>>> is there really any point in throwing an exception.
>>>>>    More useful would be a logging message (assuming logging is 
>>>>> allowed early in startup when Chronology is initialized)
>>>>
>>>> Good point. I will replace UncheckedIOException with logging.
>>>>
>>>>>
>>>>> 1054: readConfigProperties: The case for the other 
>>>>> HijrahChronologies delays loading the data until it is needed.
>>>>> This is doing the work to read the file and create the properties 
>>>>> instance but then discards it to be read a second time later.
>>>>>
>>>>> Perhaps we need to specify that the config file name includes both 
>>>>> the id and type so it can be registered without reading the file.
>>>>
>>>> Should the file name like "Hijrah-config-<id>_<type>.properties" work?
>>> yes, its worth checking the valid characters in id and type.
>>>
>>> Thanks, Roger
>>>
>>> BTW, the test drive can be implemented using testng, only the test 
>>> itself is easier as main().
>>>
>>>>
>>>> Naoto
>>>>
>>>>>
>>>>> Regards, Roger
>>>>>
>>>>>
>>>>> On 1/14/20 9:37 PM, Joe Wang wrote:
>>>>>>
>>>>>>
>>>>>> On 1/14/20 6:04 PM, naoto.sato at oracle.com wrote:
>>>>>>> Hi Joe,
>>>>>>>
>>>>>>> Thank you for the review. Please find my comments below:
>>>>>>>
>>>>>>> On 1/14/20 3:35 PM, Joe Wang wrote:
>>>>>>>> Hi Naoto,
>>>>>>>>
>>>>>>>> Since it's dealing with non-standard properties files, is there 
>>>>>>>> a need to verify the files? The constructor (HijrahChronology) 
>>>>>>>> does check whether the id or type is empty. If there is no 
>>>>>>>> existing process to validate, it's probably not worth it to 
>>>>>>>> spend time as it's rare and it's config time.
>>>>>>>
>>>>>>> IIUC, the idea is to create the instance at class loading time 
>>>>>>> (thus the faster the better) and cache it, then check the 
>>>>>>> validity later at actual method invocation (cf. 
>>>>>>> checkCalendarInit() method).
>>>>>>
>>>>>> Make sense.
>>>>>>>
>>>>>>>>
>>>>>>>> The test summary states "Test image creation", it may be better 
>>>>>>>> to say sth. like verifies custom configuration?
>>>>>>>
>>>>>>> Good catch! I was simply copying some portion from other test 
>>>>>>> case. Corrected:
>>>>>>>
>>>>>>> https://cr.openjdk.java.net/~naoto/8187987/webrev.01/
>>>>>>
>>>>>> Looks good to me.
>>>>>>
>>>>>> Best regards,
>>>>>> Joe
>>>>>>
>>>>>>>
>>>>>>> Naoto
>>>>>>>
>>>>>>>>
>>>>>>>> Best,
>>>>>>>> Joe
>>>>>>>>
>>>>>>>> On 1/14/20 8:35 AM, naoto.sato at oracle.com wrote:
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> Please review the fix to the following issue:
>>>>>>>>>
>>>>>>>>> https://bugs.openjdk.java.net/browse/JDK-8187987
>>>>>>>>>
>>>>>>>>> The proposed CSR and changeset are located at:
>>>>>>>>>
>>>>>>>>> CSR: https://bugs.openjdk.java.net/browse/JDK-8236810
>>>>>>>>> Webrev: https://cr.openjdk.java.net/~naoto/8187987/webrev.00/
>>>>>>>>>
>>>>>>>>> The spec of java.time.chrono.HijrahChronology suggests that it 
>>>>>>>>> could load custom variants of Hijirah calendar type using 
>>>>>>>>> properties files. However it does not work as designed. This 
>>>>>>>>> change intends to make it work.
>>>>>>>>>
>>>>>>>>> Naoto
>>>>>>>>
>>>>>>
>>>>>
>>>
> 


More information about the i18n-dev mailing list