Hardcoded default providers for asynchronous channel and file system
Jonathan Lu
luchsh at linux.vnet.ibm.com
Fri Nov 11 00:48:13 PST 2011
Hi Alan,
Thank you for reviewing.
Indeed my patch will bring some complexity to the build time, but I
think we'd better treat the three providers separately since they are
not of the exactly same type.
For DefaultAsynchronousChannelProvider, the logic for all the platforms
are the same except for provider's name. If use your approach, following
three template files will be created for each platform:
DefaultAsynchronousChannelProvider.java.windows
DefaultAsynchronousChannelProvider.java.linux
DefaultAsynchronousChannelProvider.java.solaris
But the only difference for them is one line containing the provider
class name, so will it be much clearer if we dynamically generate these
these files from one script or one template?
For DefaultFileSystemProvider, the logic for Linux and Solaris platforms
are a bit different from Windows platform.
Class.forName() and Class.newInstance() are used to create
DefaultFileSystemProvider on Linux and Solaris, but only one simple new
statement found for Windows platform. Is there any particular reason to
place such a different logic here?
I do not see any and think the same approach for
DefaultAsynchronousChannelProvider can also be applied here, please fix
me if incorrect.
On 11/10/2011 10:33 PM, Alan Bateman wrote:
> On 08/11/2011 09:11, Jonathan Lu wrote:
>>
>> Hello Alan,
>>
>> Thanks for reminding! I've updated my patch to include
>> DefaultSelectorProvider, see the attachment.
>> And I also tried to build the patched OpenJDK8 on Linux, Windows and
>> Solaris, the result seems OK.
>> Could you please take a look at it?
> I finally got a chance to look at this.
>
> My only concern with is that adds quite a bit of complexity to the
> build. From a portability point of view (the original objective) then
> it means editing three additional scripts for each platform too.
>
> What would you think about making it a lot simpler with something like:
>
> ifneq ($(PLATFORM),windows)
>
> $(GENSRCDIR)/sun/nio/fs/DefaultFileSystemProvider.java: \
>
> $(PLATFORM_SRC)/classes/sun/nio/fs/DefaultFileSystemProvider.java.$(PLATFORM)
> $(install-file)
>
> clean::
> $(RM) $(GENSRCDIR)/sun/nio/fs/DefaultFileSystemProvider.java
>
> endif
>
> One benefit of this is that it would be trivial to change in the event
> that there were separate src/linux and src/solaris directories (BTW:
> don't read anything into this comment but at some point I think we
> should re-visit the current layout).
>
Okay :)
But for current layout if adopt this approach, there'll be total 9
additional template files instead of 3 additional scripts. And the
templates of the same provider for different platforms are almost the same.
> One other comment is that you've retained the code to choose the
> SelectorProvider implementation based on the Linux kernel. I think we
> should just drop this check as it's unlikely that anyone is porting
> and target ancient 2.4 kernels now.
Yes, 2.6 or newer linux kernel should be the default assumption here
just like what the LinuxFileSystem did. So EPollSelectorProvider will be
the only result returned on Linux platform, PollSelectorProvider will
not be used any more.
But I do find a testcase jdk/test/sun/nio/ch/SelProvider.java which
will test old Linux, I think it should be changed accordingly, right?
Moreover beside this test case, I do not see any other place where
PollSelectorProvider is used, so shall the PollSelectorProvider and
PollSelectorProviderImpl classes be completely removed from JDK8 repository?
After this kernel version change the logic of DefaultSelectorProvider
will be the same as DefaultAsynchronousChannelProvider.
With above analysis, if DefaultSelectorProvider and
DefaultFileSystemProvider are all changed to the same logic as
DefaultAsynchronousChannelProvider, the condition here will be much simpler:
All the default provider classes for all three platforms are of
the same logic except for some naming differences!
In order to split the complexity out of scripts, what would you think
about composing a common template file for all providers and all the
platforms?
all we need to do is to replace the place-holder names with actual
values for each provider and each platform. This approach will introduce
one template file or one script file :).
Regards!
-Jonathan Lu
> -Alan.
More information about the nio-dev
mailing list