Hi,

On 12/2/19 6:13 PM, Bob Vandette wrote:
2)
How should we deal with "not supported" for booleans/arrays, etc.?
Would it make sense to return record objects from the Metrics API so
that this could be dealt with? E.g.

Metrics m = ...
MetricResult<int[]> result = m.getCpuSetCpus();
switch(result.getType()) {
   case NOT_SUPPORTED: /* do something */; break;
   case SUPPORTED: int[] val = result.get(); break;
   ...
}

I'm bringing this up, because the proposed patch doesn't deal with the
above open questions as of yet. With that being said, it's mostly
identical to the proposed hotspot changes in [1].
For issue 2 …

I wonder if we should change the API to throw UnsupportedOperationException for 
those methods
that are not available.  This exception is used quite a lot in the java/nio and 
java/net packages
for dealing with functionality not available on a host platform.

OTOH, The ProcessHandle API took a different approach, returning Optional<XXX> when in some situations, the requested information about a process is not known. Being either inaccessible or not supported. There's a javadoc of Processhandle.Info type:

    /**
     * Information snapshot about the process.
     * The attributes of a process vary by operating system and are not available
     * in all implementations.  Information about processes is limited
     * by the operating system privileges of the process making the request.
     * The return types are {@code Optional<T>} allowing explicit tests
     * and actions if the value is available.
     * @since 9
     */

But if you already have the API cast in stone, changing it to return Optional(s) might not be backwards compatible. But so is changing the behavior to throw UnsupportedOperationException from methods that didn't already throw it.

Regards, Peter

Reply via email to