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鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Capnp message size caps limits one submit size #8

Open
gavento opened this issue Mar 17, 2018 · 3 comments
Open

Capnp message size caps limits one submit size #8

gavento opened this issue Mar 17, 2018 · 3 comments
Assignees
Labels

Comments

@gavento
Copy link
Contributor

gavento commented Mar 17, 2018

Capnp limits builders to 8M words (64 MB) which bounds the size of submitted nodes to cca 200 000. This limit is fixed in message.h since Builder does not accept any options and uses the default limit.

馃導  INFO 2018-03-17T14:53:11Z Starting local server (0.0.0.0:7210)
馃導  INFO 2018-03-17T14:53:11Z Dashboard: http://lomikamen:8080/
馃導  INFO 2018-03-17T14:53:11Z Server pid = 95230
馃導 ERROR 2018-03-17T14:53:11Z Process 'server' terminated with exit code exit code: 101; process outputs can be found in server.{out/err}
馃導  INFO 2018-03-17T14:53:11Z Error occurs; clean up started processes ...
Expect 16384 objects of size 32768, total 512.000 MB
Traceback (most recent call last):
  File "scalebench.py", line 61, in <module>
    session.submit()
  File "/aux/gavento/rtest/rain/python/rain/client/session.py", line 164, in submit
    self.client._submit(self._tasks, self._dataobjs)
  File "/aux/gavento/rtest/rain/python/rain/client/client.py", line 82, in _submit
    req.send().wait()
  File "capnp/lib/capnp.pyx", line 1932, in capnp.lib.capnp._RemotePromise.wait (capnp/lib/capnp.cpp:41109)
capnp.lib.capnp.KjException: src/capnp/rpc.c++:1527: context: sending RPC call; callBuilder.getInterfaceId() = 14056942509132787212; callBuilder.getMethodId() = 3
capnp/rpc-twoparty.c++:92: failed: expected size < ReaderOptions().traversalLimitInWords; size = 12047798; Trying to send Cap'n Proto message larger than the single-message size limit. The other side probably won't accept it and would abort the connection, so I won't send it.
stack: 0x7ffff66aacd6 0x7ffff66a88c0 0x7ffff66a7580 0x7ffff663d0e9 0x7ffff661e9f3 0x7ffff661eb1d 0x7ffff661ef4b 0x5555556d4411 0x5555556d493f 0x5555556d493f 0x5555556d9286 0x5555556d9f9f 0x5555557a78f2 0x5555557a9e1d 0x5555557aa5be 0x5555557d84d7 0x555555668c01 0x7ffff6cee2b1 0x5555557721ba
@gavento
Copy link
Contributor Author

gavento commented Mar 17, 2018

A partial solution is to call submit() with smaller chunks, but that also requires involved object ordering and keeping the boundary objects.

@spirali
Copy link
Collaborator

spirali commented Mar 17, 2018

We can introduce an internal fragmentation of submits to multiple calls that is composed in the server and pushed to scheduler at once. This way allows us to avoid "keeping" boundary objects.

Btw: This has another implication, it limits the maximal allowed size of a response from the datastore. We should limit it in the datastore server implementation. The same problem also in worker <-> subworker in memory exchanges.

@gavento gavento self-assigned this Apr 12, 2018
@gavento gavento added bug Something isn't working client and removed bug Something isn't working labels Apr 12, 2018
@gavento
Copy link
Contributor Author

gavento commented Apr 12, 2018

Will be most likely resolved when #11 is resolved for the client API.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants