Fork me on GitHub
#onyx
<
2018-04-25
>
dbernal14:04:51

Is there a limit on the number of downstream segments that can be generated by a task? Say there's one segment coming in and from that segment the task generates 30K segments that need to be passed downstream, would Onyx be able to handle this use case?

michaeldrogalis15:04:07

@dbernal There's not a conceptual limit, but you're going to want to be cognizant of the memory limits on the peer doing that kind of expansion - especially since segments are batched.

dbernal15:04:35

@michaeldrogalis Do you know what kind of error might be thrown when that's the case? I'm seeing and ArrayOutOfBounds error on a task that does this and haven't been able to figure out what's causing it. It happens during a prepare-batch lifecycle and the index in question is 20,000 so I thought that it might be some sort of limit

michaeldrogalis15:04:13

@dbernal Can I get the full stacktrace?

michaeldrogalis15:04:31

You might be running into the default configured limit of the maximum size of an Aeron message.

lucasbradstreet15:04:50

Ah I know what this is. This is a hardcoded limit in onyx.

michaeldrogalis15:04:20

I didn't know that, hah.

lucasbradstreet15:04:03

Indeed. We can either add a parameter or we can expand it. You should be a little worried about generating that many messages from very few messages, as all of the messages generated will be inbetween two barriers.

lucasbradstreet15:04:46

If it’s an occasional thing then it will probably drain correctly through the barriers. I’d be worried if it was, say, 20000 messages creating 30000 messages for example

dbernal16:04:15

@lucasbradstreet @michaeldrogalis ah ok good to know! In my case it's 1 segment generating something close to 100,000 in some cases. It might make more sense to read in the 100,000 segments from SQL instead of generating them so it's possible for me to change the workflow to do so

michaeldrogalis16:04:52

Yeah, would highly recommend having a more proportional set of messages flowing throughout. It'll be much easier to manage.

👍 4
dbernal16:04:55

sounds good. I'll go ahead and do that instead. Thanks for all the help once again!

kenny16:04:02

Have you guys seen this exception?

Exception in thread "Thread-30" java.lang.NoClassDefFoundError: org/agrona/LangUtil
        at org.agrona.IoUtil.delete(IoUtil.java:141)
        at io.aeron.CommonContext.deleteAeronDirectory(CommonContext.java:359)
        at onyx.messaging.aeron.embedded_media_driver$delete_aeron_directory_safe.invokeStatic(embedded_media_driver.clj:8)
        at onyx.messaging.aeron.embedded_media_driver$delete_aeron_directory_safe.invoke(embedded_media_driver.clj:7)
        at onyx.messaging.aeron.embedded_media_driver.EmbeddedMediaDriver$fn__33945.invoke(embedded_media_driver.clj:36)
        at clojure.lang.AFn.run(AFn.java:22)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.agrona.LangUtil
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
It consistently occurs at the end of my tests.

lucasbradstreet16:04:18

@kenny that’s pretty odd. That class should exist.

lucasbradstreet16:04:22

Which onyx version?

kenny16:04:37

It occurs after all the tests have ran.

Ran 2 tests containing 9 assertions.
0 failures, 0 errors.
Exception in thread "Thread-32" java.lang.NoClassDefFoundError: org/agrona/LangUtil
        at org.agrona.IoUtil.delete(IoUtil.java:141)
        at io.aeron.CommonContext.deleteAeronDirectory(CommonContext.java:359)
        at onyx.messaging.aeron.embedded_media_driver$delete_aeron_directory_safe.invokeStatic(embedded_media_driver.clj:8)
        at onyx.messaging.aeron.embedded_media_driver$delete_aeron_directory_safe.invoke(embedded_media_driver.clj:7)
        at onyx.messaging.aeron.embedded_media_driver.EmbeddedMediaDriver$fn__38268.invoke(embedded_media_driver.clj:36)
        at clojure.lang.AFn.run(AFn.java:22)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.agrona.LangUtil
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 7 more

lucasbradstreet16:04:01

Thanks, I’ll give it a look

kenny16:04:52

It's from this call https://github.com/onyx-platform/onyx/blob/0.12.x/src/onyx/messaging/aeron/embedded_media_driver.clj#L36. I am running the tests with boot test. If I run them with lein test I do not get the error. Boot must cause some issues with shutdown hooks?

lucasbradstreet17:04:50

Interesting. Yeah, might be a problem where boot pod isolation is preventing access to the agrona jar?

lucasbradstreet17:04:13

The weird thing is that it’s a missing class error

kenny17:04:02

Right, it is strange. Boot run tests in a pod and pods have a special API for shutdown hooks: https://github.com/boot-clj/boot/blob/master/doc/boot.pod.md#shutdown-hooks.

lucasbradstreet18:04:10

Ah. Sorry, we won’t be able to spend any time on that as we’re not boot users, but if you manage to track it down let us know.

4
campeterson21:04:18

Hey all. Anyone want to remind me where I saw the web page where you could build an Onyx Workflow in the browser?

campeterson21:04:16

yep, that’s it. Thanks

joelsanchez21:04:26

is it impossible to run onyx with 1.9?

lucasbradstreet21:04:40

It should work fine. We use it with 1.9 internally.

joelsanchez22:04:39

it's working now, idk why but I was getting something about com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor

lucasbradstreet22:04:26

K. That wouldn’t be our code anyway