You are essentially arguing, "if you turn off -ea your screwed" which is a
symptom of a larger problem that I am pointing out.

Forget the "5%" thing. I am having a discussion about use of assert.

You have:
1) checked exceptions
2) unchecked exceptions
3) Error (like ioError which we sometime have to track)

The common case for assert is to only be used in testing. This is why -ea
is off by default.

My point is that using assert as a Apache Cassandra specific "psuedo
exception" seems problematic. I can point at tickets in the Cassandra Jira
where the this is not trapped properly. It appears to me that having deal
with a 4th "pseudo exception" is code smell.

Sometimes you see assert in place of a bounds check or a null check that
you would never want to turn off. Other times it is uses as a quasi
IllegalStateException. Other times an class named "estimator" asserts when
the "estimate" "overflows". This seem far away from the defined purpose of
assert.

The glaring issue is that it bubbles through try catch so it hardly makes
me feel "safe" either on or off.










On Wed, Sep 21, 2016 at 1:34 PM, Michael Kjellman <
mkjell...@internalcircle.com> wrote:

> Asserts have their place as sanity checks. Just like exceptions have their
> place.
>
> They can both live in harmony and they both serve a purpose.
>
> What doesn't serve a purpose is that comment encouraging n00b users to get
> a mythical 5% performance increase and then get silent corruption when
> their disk/io goes sideways and the asserts might have caught things before
> it went really wrong.
>
> Sent from my iPhone
>
> On Sep 21, 2016, at 10:31 AM, Edward Capriolo <edlinuxg...@gmail.com
> <mailto:edlinuxg...@gmail.com>> wrote:
>
> " potential 5% performance win when you've corrupted all their data."
> This is somewhat of my point. Why do assertions that sometimes are trapped
> "protect my data" better then a checked exception?
>
> On Wed, Sep 21, 2016 at 1:24 PM, Michael Kjellman <
> mkjell...@internalcircle.com<mailto:mkjell...@internalcircle.com>> wrote:
>
> I hate that comment with a passion. Please please please please do
> yourself a favor and *always* run with asserts on. `-ea` for life. In
> practice I'd be surprised if you actually got a reliable 5% performance win
> and I doubt your customers will care about a potential 5% performance win
> when you've corrupted all their data.
>
> best,
> kjellman
>
> On Sep 21, 2016, at 10:21 AM, Edward Capriolo <edlinuxg...@gmail.com
> <mailto:edlinuxg...@gmail.com>>
> wrote:
>
> There are a variety of assert usages in the Cassandra. You can find
> several
> tickets like mine.
>
> https://issues.apache.org/jira/browse/CASSANDRA-12643
>
> https://issues.apache.org/jira/browse/CASSANDRA-11537
>
> Just to prove that I am not the only one who runs into these:
>
> https://issues.apache.org/jira/browse/CASSANDRA-12484
>
> To paraphrase another ticket that I read today and can not find,
> "The problem is X throws Assertion which is not caught by the Exception
> handler and it bubbles over and creates a thread death."
>
> The jvm.properties file claims this:
>
> # enable assertions.  disabling this in production will give a modest
> # performance benefit (around 5%).
> -ea
>
> If assertions incur a "5% penalty" but are not always trapped what value
> do
> they add?
>
> These are common sentiments about how assert should be used: (not trying
> to
> make this a this is what the internet says type debate)
>
> http://stackoverflow.com/questions/2758224/what-does-
> the-java-assert-keyword-do-and-when-should-it-be-used
>
> "Assertions
> <http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.10>
> (by
> way of the *assert* keyword) were added in Java 1.4. They are used to
> verify the correctness of an invariant in the code. They should never be
> triggered in production code, and are indicative of a bug or misuse of a
> code path. They can be activated at run-time by way of the -eaoption on
> the
> java command, but are not turned on by default."
>
> http://stackoverflow.com/questions/1957645/when-to-use-
> an-assertion-and-when-to-use-an-exception
>
> "An assertion would stop the program from running, but an exception would
> let the program continue running."
>
> I look at how Cassandra uses assert and how it manifests in how the code
> operates in production. Assert is something like semi-unchecked
> exception.
> All types of internal Util classes might throw it, downstream code is
> essentially unaware and rarely specifically handles it. They do not
> always
> result in the hard death one would expect from an assert.
>
> I know this is a ballpark type figure, but would "5% performance penalty"
> be in the ballpark of a checked exception? Being that they tend to bubble
> through things uncaught do they do more danger than good?
>
>
>

Reply via email to