Good news, with HBASE-26781 in place[1], I successfully built hbase with
java 11 --release 8. Of course I need to modify the hbase main code a bit,
and also make use of netty's PlatformDependent for processing
DirectByteBuffer.

1. https://github.com/apache/hbase-thirdparty/pull/79

张铎(Duo Zhang) <palomino...@gmail.com> 于2022年3月1日周二 22:07写道:

> So after HBASE-26773, we still have another problem that we can not
> use sun.nio.ch.DirectBuffer. The main usage is to get the address.
>
> Let me provide a new util method in the hbase-unsafe module.
>
> Andrew Purtell <andrew.purt...@gmail.com> 于2022年2月26日周六 13:58写道:
>
>> That sounds good, looking forward to it. Please let me know if you want
>> help.
>>
>> > On Feb 25, 2022, at 9:56 PM, 张铎 <palomino...@gmail.com> wrote:
>> >
>> > Filed HBASE-26773 and tried, the result is not very good. Netty's
>> > PlatformDependent can not meet all the requirements.
>> >
>> > So now I prefer we have a new hbase-thirdparty-unsafe module to provide
>> the
>> > Unsafe ability without exposing sun.misc.Unsafe directly.
>> >
>> > Will give it a try.
>> >
>> > Thanks.
>> >
>> > Andrew Purtell <apurt...@apache.org> 于2022年2月24日周四 10:46写道:
>> >
>> >> Ok, a bridge in one place would minimize the risk.
>> >>
>> >>> On Wed, Feb 23, 2022 at 6:07 PM 张铎(Duo Zhang) <palomino...@gmail.com>
>> >>> wrote:
>> >>>
>> >>> I think this is a reasonable concern, we could do this on our own.
>> >>>
>> >>> But checking the commit history of PlatformDependent[1], the API is
>> >> pretty
>> >>> stable, so I think the risk of hitting a security issue but we can not
>> >>> upgrade due to API conflicts is very low. And if a security issue
>> >> requires
>> >>> big changes on PlatformDependent, then I assume we have to fix our own
>> >>> version as well...
>> >>>
>> >>> And we will not spread PlatformDependent references everywhere in our
>> >> code,
>> >>> we will still have a bridge, like the current UnsafeAccess. So if
>> later
>> >> we
>> >>> decide to implement our own version, it will not introduce a big
>> impact
>> >> to
>> >>> our code base.
>> >>>
>> >>> Thanks.
>> >>>
>> >>>
>> >>> [1]
>> >>>
>> >>>
>> >>
>> https://github.com/netty/netty/commits/4.1/common/src/main/java/io/netty/util/internal/PlatformDependent.java
>> >>>
>> >>> Andrew Purtell <apurt...@apache.org> 于2022年2月24日周四 01:12写道:
>> >>>
>> >>>> We often upgrade netty after there is a CVE announcement. This
>> >> produces a
>> >>>> pressure to upgrade in production. Use of an internal API is not a
>> good
>> >>>> practice because it can cause friction because of breaking changes
>> when
>> >>>> there is a need to upgrade all of a sudden. This is painful and
>> >> hopefully
>> >>>> we can exclude it as a possibility now when coming up with the plan.
>> We
>> >>> can
>> >>>> do the same thing they do in our own hbase-thirdparty without taking
>> >> the
>> >>>> dependency and achieve the same goal, right?
>> >>>>
>> >>>> On Mon, Feb 21, 2022 at 7:35 PM 张铎(Duo Zhang) <palomino...@gmail.com
>> >
>> >>>> wrote:
>> >>>>
>> >>>>> For me, since we shade netty, there will be no conflict with other
>> >>> netty
>> >>>>> dependencies, so we can make sure the netty version we used is
>> >> exactly
>> >>>> the
>> >>>>> one we shaded in hbase-thirdparty.
>> >>>>>
>> >>>>> If later we want to upgrade netty version in hbase-thirdparty, and
>> it
>> >>>>> breaks the api, then we can release a new hbase-thirdparty, and
>> >> upgrade
>> >>>> the
>> >>>>> main hbase repo to depend on the new hbase-thirdparty version, and
>> >> also
>> >>>>> modify the code in hbase accordingly. There will be no user visible
>> >>>>> affects.
>> >>>>>
>> >>>>> Anyway, let me have a try first. Even with netty's PaltformDependent
>> >>>> class,
>> >>>>> since it still references sun.misc.Unsafe, maybe we will still get
>> an
>> >>>>> compile error...
>> >>>>>
>> >>>>> Thanks.
>> >>>>>
>> >>>>> Andrew Purtell <apurt...@apache.org> 于2022年2月22日周二 08:08写道:
>> >>>>>
>> >>>>>> Thanks for that. I understand better what you are proposing now. It
>> >>> is
>> >>>>>> clear that you have thought it through.
>> >>>>>>
>> >>>>>> So then the only question I have is this: Do you think it is a
>> >>> concern
>> >>>>> that
>> >>>>>> Netty's PlatformDependent class is in their
>> >> "io.netty.util.internal"
>> >>>>>> package? The 'internal' designation suggests to me they won't apply
>> >>> the
>> >>>>>> same care to not breaking users of it as they would for their
>> >> public
>> >>>>>> (non-"internal") API. I noticed this earlier but had other
>> >> questions
>> >>> at
>> >>>>>> that time.
>> >>>>>>
>> >>>>>> If it is a concern, we have the option of doing the same thing that
>> >>>> Netty
>> >>>>>> has done with their PlatformDependent class as a new utility class
>> >> of
>> >>>> our
>> >>>>>> own in hbase-thirdparty. This may impose special requirements on
>> >>>> building
>> >>>>>> hbase-thirdparty, or, at least, the module containing this wrapper,
>> >>> but
>> >>>>> it
>> >>>>>> is an option that would help us avoid external breaking changes.
>> >> For
>> >>>> your
>> >>>>>> consideration.
>> >>>>>>
>> >>>>>> On Mon, Feb 21, 2022 at 3:48 PM 张铎(Duo Zhang) <
>> >> palomino...@gmail.com
>> >>>>
>> >>>>>> wrote:
>> >>>>>>
>> >>>>>>> What I proposed here is for solving the problem…
>> >>>>>>>
>> >>>>>>> The problem is that when using —release 8, javac will not export
>> >>> the
>> >>>>>>> jdk.unsupported symbols, so using sun.misc.Unsafe will trigger a
>> >>>>> compile
>> >>>>>>> error. But at runtime if you export jdk.unsupported you can still
>> >>> use
>> >>>>>>> sun.misc.Unsafe. The related jdk issue said —release is only for
>> >>>> public
>> >>>>>> API
>> >>>>>>> so not exporting jdk.unsupported is the expected behavior.
>> >>>>>>>
>> >>>>>>> So what I proposed here is to remove direct dependency on
>> >>>>> sun.misc.Unsafe
>> >>>>>>> in HBase code, so at compile time there will be no problem. Betty
>> >>>> has a
>> >>>>>>> wrapper of Unsafe so I think we could have a try. At runtime if
>> >> we
>> >>>> have
>> >>>>>>> jdk.unsupported exported we could still actually make use of
>> >>>>>>> sun.misc.Unsafe.
>> >>>>>>>
>> >>>>>>> Feel free to correct me if I missed something or there are still
>> >>>>>> uncleared
>> >>>>>>> things.
>> >>>>>>>
>> >>>>>>> Thanks.
>> >>>>>>>
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> Andrew Purtell <andrew.purt...@gmail.com>于2022年2月22日 周二00:56写道:
>> >>>>>>>
>> >>>>>>>> As Nick discovered ‘—release’ doesn’t work for version 8
>> >> anyway.
>> >>>>>>>>
>> >>>>>>>>
>> >>>>>>>>> On Feb 20, 2022, at 3:47 PM, 张铎 <palomino...@gmail.com>
>> >> wrote:
>> >>>>>>>>>
>> >>>>>>>>> I know, with —release 8 ByteBuffer will not be an problem
>> >> but
>> >>>> then
>> >>>>>>>>> sun.misc.Unsafe can not be used any more right? So the
>> >> problem
>> >>>> here
>> >>>>>> is
>> >>>>>>>> how
>> >>>>>>>>> to make use of Unsafe with —release 8. What I proposed here
>> >> is
>> >>>> that
>> >>>>>> we
>> >>>>>>>> just
>> >>>>>>>>> do not use it, then we can make use of —release 8 to address
>> >>> the
>> >>>>>>>> ByteBuffer
>> >>>>>>>>> problem.
>> >>>>>>>>>
>> >>>>>>>>> Thanks.
>> >>>>>>>>>
>> >>>>>>>>> Andrew Purtell <apurt...@apache.org>于2022年2月21日 周一03:32写道:
>> >>>>>>>>>
>> >>>>>>>>>> The problem that leads us to consider '--release 8', or what
>> >>> it
>> >>>>>> would
>> >>>>>>>>>> promise if it worked, isn't Unsafe, it is ByteBuffer.
>> >>>>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>
>> >>>>>
>> >>>>
>> >>>
>> >>
>> https://www.morling.dev/blog/bytebuffer-and-the-dreaded-nosuchmethoderror/
>> >>>>>>>>>> . Although to your point Netty has ByteBuf...
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>> On Sun, Feb 20, 2022 at 5:23 AM 张铎(Duo Zhang) <
>> >>>>>> palomino...@gmail.com
>> >>>>>>>>
>> >>>>>>>>>>> wrote:
>> >>>>>>>>>>>
>> >>>>>>>>>>> Since we have shaded netty, I think we could make use of
>> >>>>>>>>>>> netty's PlatformDependent[1] class to avoid referencing
>> >>> Unsafe
>> >>>>>>>> directly,
>> >>>>>>>>>>> then there will be no problem for us to use the '--release
>> >> 8'
>> >>>>>> option.
>> >>>>>>>>>>>
>> >>>>>>>>>>> If no big concerns, I will file an issue to remove all the
>> >>>>>>>>>> sun.misc.Unsafe
>> >>>>>>>>>>> references in our code base and make use of
>> >> PlatformDependent
>> >>>>> from
>> >>>>>>> the
>> >>>>>>>>>>> shaded netty.
>> >>>>>>>>>>>
>> >>>>>>>>>>> Thanks.
>> >>>>>>>>>>>
>> >>>>>>>>>>> 1.
>> >>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>
>> >>>>>
>> >>>>
>> >>>
>> >>
>> https://github.com/netty/netty/blob/4.1/common/src/main/java/io/netty/util/internal/PlatformDependent.java
>> >>>>>>>>>>>
>> >>>>>>>>>>> 张铎(Duo Zhang) <palomino...@gmail.com> 于2022年2月16日周三
>> >> 14:12写道:
>> >>>>>>>>>>>
>> >>>>>>>>>>>> I think this could be done by some module tricks, where we
>> >>>>> build a
>> >>>>>>>>>>> special
>> >>>>>>>>>>>> module with -source 8 and -target 8.We have done similar
>> >>>> things
>> >>>>> in
>> >>>>>>> the
>> >>>>>>>>>>> past
>> >>>>>>>>>>>> to have hadoop1-compat and hadoop2-compact.
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> Let me have a try.
>> >>>>>>>>>>>>
>> >>>>>>>>>>>> Sean Busbey <bus...@apache.org> 于2022年2月16日周三 13:31写道:
>> >>>>>>>>>>>>
>> >>>>>>>>>>>>> Unfortunately if we want to keep jdk8 working we can't
>> >> rely
>> >>>> on
>> >>>>>>>>>> building
>> >>>>>>>>>>>>> with the jdk release target option on newer jdks.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> We ran into this recently in HBASE-25465 where a JDK bug
>> >>> came
>> >>>>> up.
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>> On Tue, Feb 15, 2022 at 8:12 PM 张铎(Duo Zhang) <
>> >>>>>>> palomino...@gmail.com
>> >>>>>>>>>
>> >>>>>>>>>>>>> wrote:
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>>> +1 on moving the minimum required java version for
>> >>> compiling
>> >>>>>> HBase
>> >>>>>>>>>> to
>> >>>>>>>>>>>>> Java
>> >>>>>>>>>>>>>> 11. But we could still use --release=8 to still support
>> >>> jdk8
>> >>>>> at
>> >>>>>>>>>>> runtime.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Java 8 is still widely used, and I believe this will
>> >> last
>> >>>> for
>> >>>>>> even
>> >>>>>>>>>>> more
>> >>>>>>>>>>>>>> years, as lots of big companies such as RedHat,
>> >> Microsoft
>> >>>> and
>> >>>>>>> Amazon
>> >>>>>>>>>>> are
>> >>>>>>>>>>>>>> still shipping new jdk8 releases, I do not think it is
>> >>> time
>> >>>> to
>> >>>>>>> fully
>> >>>>>>>>>>>>> drop
>> >>>>>>>>>>>>>> the support of jdk8.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Thanks.
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>> Sean Busbey <bus...@apache.org> 于2022年2月16日周三 09:57写道:
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> If we set the minJDK to 11 I believe that will
>> >>> effectively
>> >>>>>> remove
>> >>>>>>>>>>> jdk8
>> >>>>>>>>>>>>>>> support, rather than "just" deprecate it.
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> As we build out more robust testing I would be in favor
>> >>> of
>> >>>>>>> running
>> >>>>>>>>>>>>> less
>> >>>>>>>>>>>>>> of
>> >>>>>>>>>>>>>>> it on deprecated JDKs.
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>> On Tue, Feb 15, 2022, 16:10 Josh Elser <
>> >>> els...@apache.org>
>> >>>>>>> wrote:
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> Deprecating jdk8 for HBase 3 and requiring minJdk=11
>> >>> seems
>> >>>>>>>>>>>>> reasonable
>> >>>>>>>>>>>>>> to
>> >>>>>>>>>>>>>>>> me.
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> Gotta start pushing the issue somehow.
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>> On 2/15/22 1:47 PM, Sean Busbey wrote:
>> >>>>>>>>>>>>>>>>> Hi folks!
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> It's been some time since we decided to stick to LTS
>> >>> JDK
>> >>>>>>>>>>> releases
>> >>>>>>>>>>>>> as
>> >>>>>>>>>>>>>> a
>> >>>>>>>>>>>>>>>> way
>> >>>>>>>>>>>>>>>>> of getting a handle on the JDK treadmill.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> What do folks think about deprecating JDK8? The
>> >>> openjdk8u
>> >>>>>>>>>>> project
>> >>>>>>>>>>>>> is
>> >>>>>>>>>>>>>>>> still
>> >>>>>>>>>>>>>>>>> going and there are commercial support options at
>> >> least
>> >>>>>>>>>> through
>> >>>>>>>>>>>>> 2030.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Deprecating it in HBase 3 would mean we could remove
>> >> it
>> >>>> in
>> >>>>>>>>>> HBase
>> >>>>>>>>>>>>> 4,
>> >>>>>>>>>>>>>> not
>> >>>>>>>>>>>>>>>>> that we would _have_ to remove it. The way I think
>> >>> about
>> >>>>>>>>>> likely
>> >>>>>>>>>>>>>> timing
>> >>>>>>>>>>>>>>> of
>> >>>>>>>>>>>>>>>>> these events goes like this:
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> * HBase 2 started alphas in June 2017, betas in
>> >> January
>> >>>>> 2018,
>> >>>>>>>>>>> and
>> >>>>>>>>>>>>>> came
>> >>>>>>>>>>>>>>>> out
>> >>>>>>>>>>>>>>>>> in April 2018
>> >>>>>>>>>>>>>>>>> * HBase 3 started alphas in July 2021, and as of Feb
>> >>> 2022
>> >>>>> we
>> >>>>>>>>>>>>> haven't
>> >>>>>>>>>>>>>>>>> discussed how close we are to our stated beta goals
>> >>>>> (upgrades
>> >>>>>>>>>>> from
>> >>>>>>>>>>>>>>> active
>> >>>>>>>>>>>>>>>>> 2.x releases and removal of not-ready features).
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Given the above, in the absence of us specifically
>> >>>> pushing
>> >>>>> to
>> >>>>>>>>>>> roll
>> >>>>>>>>>>>>>>>> through
>> >>>>>>>>>>>>>>>>> major version numbers for some reason, I think a
>> >>>> reasonably
>> >>>>>>>>>>>>>>> conservative
>> >>>>>>>>>>>>>>>>> estimate is for HBase 3 to arrive in late 2022 or
>> >> early
>> >>>>> 2023
>> >>>>>>>>>> and
>> >>>>>>>>>>>>> then
>> >>>>>>>>>>>>>>>> HBase
>> >>>>>>>>>>>>>>>>> 4 to start alphas in ~2025. An HBase 5 prior to 2030
>> >>>> seems
>> >>>>>>>>>>>>> unlikely.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> That all said, our current reference guide section on
>> >>>> java
>> >>>>>>>>>>>>> versions
>> >>>>>>>>>>>>>>> does
>> >>>>>>>>>>>>>>>>> not sound very confident about JDK11 support.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>> A Note on JDK11 *
>> >>>>>>>>>>>>>>>>>> Preliminary support for JDK11 is introduced with
>> >> HBase
>> >>>>>> 2.3.0.
>> >>>>>>>>>>>>> This
>> >>>>>>>>>>>>>>>>> support is limited to
>> >>>>>>>>>>>>>>>>>> compilation and running the full test suite. There
>> >> are
>> >>>>> open
>> >>>>>>>>>>>>>> questions
>> >>>>>>>>>>>>>>>>> regarding the runtime
>> >>>>>>>>>>>>>>>>>> compatibility of JDK11 with Apache ZooKeeper and
>> >>> Apache
>> >>>>>>>>>> Hadoop
>> >>>>>>>>>>>>>>>>> (HADOOP-15338).
>> >>>>>>>>>>>>>>>>>> Significantly, neither project has yet released a
>> >>>> version
>> >>>>>>>>>> with
>> >>>>>>>>>>>>>>> explicit
>> >>>>>>>>>>>>>>>>> runtime support for
>> >>>>>>>>>>>>>>>>>> JDK11. The remaining known issues in HBase are
>> >>>> catalogued
>> >>>>> in
>> >>>>>>>>>>>>>>>> HBASE-22972.
>> >>>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> Since that blurb was written, Hadoop has added JDK11
>> >>>>> support
>> >>>>>>>>>> [1]
>> >>>>>>>>>>>>> as
>> >>>>>>>>>>>>>> has
>> >>>>>>>>>>>>>>>>> ZooKeeper[2]. As a part of buttoning up our JDK11
>> >>> support
>> >>>>> we
>> >>>>>>>>>>> could
>> >>>>>>>>>>>>>>> update
>> >>>>>>>>>>>>>>>>> our minimum supported versions of these projects to
>> >>> match
>> >>>>>> that
>> >>>>>>>>>>>>>> support.
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> What do folks think?
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>> [1]:
>> >> https://hadoop.apache.org/docs/r3.3.0/index.html
>> >>>>>>>>>>>>>>>>> [2]:
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>
>> >>>>>>
>> >>>>
>> >>
>> https://zookeeper.apache.org/doc/r3.6.0/zookeeperAdmin.html#sc_systemReq
>> >>>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>>
>> >>>>>>>>>>>>>>
>> >>>>>>>>>>>>>
>> >>>>>>>>>>>>
>> >>>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>>
>> >>>>>>>>>> --
>> >>>>>>>>>> Best regards,
>> >>>>>>>>>> Andrew
>> >>>>>>>>>>
>> >>>>>>>>>> Unrest, ignorance distilled, nihilistic imbeciles -
>> >>>>>>>>>>   It's what we’ve earned
>> >>>>>>>>>> Welcome, apocalypse, what’s taken you so long?
>> >>>>>>>>>> Bring us the fitting end that we’ve been counting on
>> >>>>>>>>>>  - A23, Welcome, Apocalypse
>> >>>>>>>>>>
>> >>>>>>>>
>> >>>>>>>
>> >>>>>>
>> >>>>>>
>> >>>>>> --
>> >>>>>> Best regards,
>> >>>>>> Andrew
>> >>>>>>
>> >>>>>> Unrest, ignorance distilled, nihilistic imbeciles -
>> >>>>>>    It's what we’ve earned
>> >>>>>> Welcome, apocalypse, what’s taken you so long?
>> >>>>>> Bring us the fitting end that we’ve been counting on
>> >>>>>>   - A23, Welcome, Apocalypse
>> >>>>>>
>> >>>>>
>> >>>>
>> >>>>
>> >>>> --
>> >>>> Best regards,
>> >>>> Andrew
>> >>>>
>> >>>> Unrest, ignorance distilled, nihilistic imbeciles -
>> >>>>    It's what we’ve earned
>> >>>> Welcome, apocalypse, what’s taken you so long?
>> >>>> Bring us the fitting end that we’ve been counting on
>> >>>>   - A23, Welcome, Apocalypse
>> >>>>
>> >>>
>> >>
>> >>
>> >> --
>> >> Best regards,
>> >> Andrew
>> >>
>> >> Unrest, ignorance distilled, nihilistic imbeciles -
>> >>    It's what we’ve earned
>> >> Welcome, apocalypse, what’s taken you so long?
>> >> Bring us the fitting end that we’ve been counting on
>> >>   - A23, Welcome, Apocalypse
>> >>
>>
>

Reply via email to