Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Integer overflow exception #6

Open
royaldark opened this issue Nov 6, 2017 · 1 comment
Open

Integer overflow exception #6

royaldark opened this issue Nov 6, 2017 · 1 comment

Comments

@royaldark
Copy link

Upon starting the hface server, it successfully connects to our Hazelcast cluster using the provided configuration, but the following exception is continually thrown:

java.lang.ArithmeticException: integer overflow
	at clojure.lang.Numbers.throwIntOverflow(Numbers.java:1501)
	at clojure.lang.Numbers.add(Numbers.java:1800)
	at clojure.lang.Numbers$LongOps.add(Numbers.java:455)
	at clojure.lang.Numbers.add(Numbers.java:128)
	at clojure.core$_PLUS_.invokeStatic(core.clj:973)
	at clojure.core$_PLUS_.invoke(core.clj:965)
	at clojure.core$merge_with$merge_entry__4881.invoke(core.clj:2954)
	at clojure.core$reduce1.invokeStatic(core.clj:925)
	at clojure.core$merge_with$merge2__4883.invoke(core.clj:2957)
	at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58)
	at clojure.core$reduce1.invokeStatic(core.clj:923)
	at clojure.core$reduce1.invokeStatic(core.clj:915)
	at clojure.core$merge_with.invokeStatic(core.clj:2950)
	at clojure.core$merge_with.doInvoke(core.clj:2942)
	at clojure.lang.RestFn.applyTo(RestFn.java:139)
	at clojure.core$apply.invokeStatic(core.clj:648)
	at clojure.core$apply.invoke(core.clj:641)
	at hface.stats$merge_stats$fn__1638.invoke(stats.clj:47)
	at hface.util$do_with_values$iter__362__366$fn__367.invoke(util.clj:47)
	at clojure.lang.LazySeq.sval(LazySeq.java:40)
	at clojure.lang.LazySeq.seq(LazySeq.java:49)
	at clojure.lang.RT.seq(RT.java:521)
	at clojure.core$seq__4357.invokeStatic(core.clj:137)
	at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:24)
	at clojure.core.protocols$fn__6738.invokeStatic(protocols.clj:75)
	at clojure.core.protocols$fn__6738.invoke(protocols.clj:75)
	at clojure.core.protocols$fn__6684$G__6679__6697.invoke(protocols.clj:13)
	at clojure.core$reduce.invokeStatic(core.clj:6545)
	at clojure.core$into.invokeStatic(core.clj:6610)
	at clojure.core$into.invoke(core.clj:6604)
	at hface.util$do_with_values.invokeStatic(util.clj:45)
	at hface.util$do_with_values.invoke(util.clj:44)
	at hface.stats$merge_stats.invokeStatic(stats.clj:47)
	at hface.stats$merge_stats.invoke(stats.clj:41)
	at hface.stats$aggregate_across_cluster$fn__1642.invoke(stats.clj:51)
	at clojure.core$map$fn__4785.invoke(core.clj:2644)
	at clojure.lang.LazySeq.sval(LazySeq.java:40)
	at clojure.lang.LazySeq.seq(LazySeq.java:49)
	at clojure.lang.RT.seq(RT.java:521)
	at clojure.core$seq__4357.invokeStatic(core.clj:137)
	at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:24)
	at clojure.core.protocols$fn__6738.invokeStatic(protocols.clj:75)
	at clojure.core.protocols$fn__6738.invoke(protocols.clj:75)
	at clojure.core.protocols$fn__6684$G__6679__6697.invoke(protocols.clj:13)
	at clojure.core$reduce.invokeStatic(core.clj:6545)
	at clojure.core$into.invokeStatic(core.clj:6610)
	at clojure.core$into.invoke(core.clj:6604)
	at hface.stats$aggregate_across_cluster.invokeStatic(stats.clj:50)
	at hface.stats$aggregate_across_cluster.invoke(stats.clj:49)
	at hface.stats$cluster_stats.invokeStatic(stats.clj:96)
	at hface.stats$cluster_stats.invoke(stats.clj:94)
	at hface.refresh$refresh_stats.invokeStatic(refresh.clj:50)
	at hface.refresh$refresh_stats.invoke(refresh.clj:47)
	at hface.refresh$collect_stats$fn__1714.invoke(refresh.clj:59)
	at hface.util$every$f__339.invoke(util.clj:13)
	at clojure.lang.AFn.run(AFn.java:22)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
	at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:748)

It seems there are many keys in the grouped stats map (stats.clj:47) which are frequently very large (or very small) longs - such as :last-updated-time, :last-accessed-time, :created-time, :min-age, :max-age, etc.

I fixed this temporarily by replacing merge-with + with merge-with +' in stats.clj:47, but that seems like a pretty hacky solution - what does it even mean to sum the last updated times? Or sum the min ages?

Using latest hface and Hazelcast 3.8.6.

@tolitius
Copy link
Owner

tolitius commented Nov 6, 2017

interesting, I have not seen that, and you're right there is no real value in looking at aggregates for things like:

  • :last-updated-time
  • :last-accessed-time
  • :created-time
  • :min-age
  • :max-age
  • ..

a cleaner solution would of course be to ignore/filter out these unrelated fields from the aggregates.

But for now +' does the trick, and does not "harm" the aggregate view.

Let me know if you'd like to submit a PR, or I can do +' for now


while looking at this I upgraded hface and chazel to Hazelcast 3.9, in case you need the "latest stable".

Pragadesh pushed a commit to Pragadesh/hface that referenced this issue Feb 1, 2018
tolitius added a commit that referenced this issue Feb 2, 2018
Integer overflow exception #6
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants