RFR: 8244010: Simplify usages of ProcessTools.createJavaProcessBuilder in our tests
Stefan Karlsson
stefan.karlsson at oracle.com
Tue Apr 28 20:37:40 UTC 2020
On 2020-04-28 18:37, Leonid Mesnik wrote:
> Hi
>
> The changes look good.
Thanks, Leonid.
>
> The only small nit. Why don't restrict arguments to "List<String>"
> instead of "Collection<String>"? The unordered collections like
> Set<String> shouldn't be used here. It is a just proposal, no need for
> new review if you going to fix it.
Sure, I'll change it to List<String>.
Thanks,
StefanK
>
> Leonid
>
> On 4/28/20 6:54 AM, Stefan Karlsson wrote:
>> Hi again,
>>
>> I realized that we probably want to give ProcessTools.executeTestJvm
>> the same treatment.
>>
>> Side-note: It's very awkard that createJavaProcessBuilder defaults to
>> not adding user-specifed flags, but executeTestJvm does. I think it
>> would be good to unify this as a separate RFE. I think *a lot* of
>> callers to createJavaProcessBuilder could be simplified by either
>> using executeTestJvm directly, or a simplified version of that.
>>
>> I'm running testing through mach5 and found a few things to fix, I
>> might find more when the testing has proceeded further.
>>
>> This is the current patch:
>> https://cr.openjdk.java.net/~stefank/8244010/webrev.02.delta
>> https://cr.openjdk.java.net/~stefank/8244010/webrev.02
>>
>> Thanks,
>> StefanK
>>
>> On 2020-04-28 13:58, Stefan Karlsson wrote:
>>> Hi all,
>>>
>>> Please review this patch to simplify usages of
>>> ProcessTools.createJavaProcessBuilder in our tests.
>>>
>>> https://cr.openjdk.java.net/~stefank/8244010/webrev.01/
>>> https://bugs.openjdk.java.net/browse/JDK-8244010
>>>
>>> I saw all this code when reviewing changes to how we pass flags in
>>> our tests. There are a many places where arguments are converted and
>>> passed back and forth in String[] and Collections.
>>>
>>> For example:
>>> ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
>>> argsList.toArray(new String[argsList.size()]));
>>>
>>> If we add an overload the createJavaProcessBuilder, that takes a
>>> Collection<String> as an argument, then we can write the code above as:
>>> ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(argsList);
>>>
>>> Other places temporarily put the flags in a String[], where most
>>> calls simply lists the arguments in the call:
>>> String[] opts = {Xmx, "-XX:NativeMemoryTracking=detail",
>>> "-XX:+UseParallelGC", "-version"};
>>> ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(opts);
>>>
>>> And some places put the args in a temporary Collection:
>>> LinkedList<String> vmOptions = new LinkedList<>();
>>> vmOptions.add(gc);
>>> vmOptions.add("-Xmx" + minMaxHeap);
>>> vmOptions.add("-XX:+PrintFlagsFinal");
>>> vmOptions.add(VerifyHeapSize.class.getName());
>>>
>>> ProcessBuilder pb =
>>> ProcessTools.createJavaProcessBuilder(vmOptions.toArray(new
>>> String[0]));
>>>
>>> I'd like to cleanup, simplify, and unify many of these usages.
>>>
>>> I've tested this by running all the changed tests locally.
>>>
>>> Thanks,
>>> StefanK
>>
More information about the hotspot-dev
mailing list