Filed HBASE-26793 for making a new hbase-thirdparty release.

Then will put the PR for HBASE-25465.

Thanks.

张铎(Duo Zhang) <[email protected]> 于2022年3月2日周三 11:19写道:

> 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) <[email protected]> 于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 <[email protected]> 于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, 张铎 <[email protected]> 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 <[email protected]> 于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) <[email protected]
>>> >
>>> >>> 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 <[email protected]> 于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) <
>>> [email protected]>
>>> >>>> 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 <[email protected]> 于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) <
>>> >> [email protected]
>>> >>>>
>>> >>>>>> 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 <[email protected]>于2022年2月22日 周二00:56写道:
>>> >>>>>>>
>>> >>>>>>>> As Nick discovered ‘—release’ doesn’t work for version 8
>>> >> anyway.
>>> >>>>>>>>
>>> >>>>>>>>
>>> >>>>>>>>> On Feb 20, 2022, at 3:47 PM, 张铎 <[email protected]>
>>> >> 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 <[email protected]>于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) <
>>> >>>>>> [email protected]
>>> >>>>>>>>
>>> >>>>>>>>>>> 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) <[email protected]> 于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 <[email protected]> 于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) <
>>> >>>>>>> [email protected]
>>> >>>>>>>>>
>>> >>>>>>>>>>>>> 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 <[email protected]> 于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 <
>>> >>> [email protected]>
>>> >>>>>>> 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