more message building size hints

This commit is contained in:
Vaci Koblizek 2020-10-21 23:03:28 +01:00
parent 83a4d4dc9e
commit f28b7de494
2 changed files with 21 additions and 7 deletions

View file

@ -403,7 +403,9 @@ final class RpcState {
ClientHook restore() { ClientHook restore() {
var question = questions.next(); var question = questions.next();
question.setAwaitingReturn(true); question.setAwaitingReturn(true);
var message = connection.newOutgoingMessage(64); int sizeHint = messageSizeHint()
+ RpcProtocol.Bootstrap.factory.structSize().total();
var message = connection.newOutgoingMessage(sizeHint);
var builder = message.getBody().initAs(RpcProtocol.Message.factory).initBootstrap(); var builder = message.getBody().initAs(RpcProtocol.Message.factory).initBootstrap();
builder.setQuestionId(question.getId()); builder.setQuestionId(question.getId());
message.send(); message.send();
@ -465,7 +467,7 @@ final class RpcState {
default: default:
if (!isDisconnected()) { if (!isDisconnected()) {
// boomin' back atcha // boomin' back atcha
var msg = connection.newOutgoingMessage(1024); var msg = connection.newOutgoingMessage(BuilderArena.SUGGESTED_FIRST_SEGMENT_WORDS);
msg.getBody().initAs(RpcProtocol.Message.factory).setUnimplemented(reader); msg.getBody().initAs(RpcProtocol.Message.factory).setUnimplemented(reader);
msg.send(); msg.send();
} }
@ -524,7 +526,10 @@ final class RpcState {
answer.active = true; answer.active = true;
var capTable = new BuilderCapabilityTable(); var capTable = new BuilderCapabilityTable();
var response = connection.newOutgoingMessage(1024); int sizeHint = messageSizeHint()
+ RpcProtocol.Return.factory.structSize().total()
+ RpcProtocol.Payload.factory.structSize().total();
var response = connection.newOutgoingMessage(sizeHint);
var ret = response.getBody().getAs(RpcProtocol.Message.factory).initReturn(); var ret = response.getBody().getAs(RpcProtocol.Message.factory).initReturn();
ret.setAnswerId(answerId); ret.setAnswerId(answerId);
@ -799,7 +804,10 @@ final class RpcState {
return null; return null;
} }
var message = connection.newOutgoingMessage(1024); int sizeHint = messageSizeHint()
+ RpcProtocol.Disembargo.factory.structSize().total()
+ MESSAGE_TARGET_SIZE_HINT;
var message = connection.newOutgoingMessage(sizeHint);
var builder = message.getBody().initAs(RpcProtocol.Message.factory).initDisembargo(); var builder = message.getBody().initAs(RpcProtocol.Message.factory).initDisembargo();
var redirect = rpcTarget.writeTarget(builder.initTarget()); var redirect = rpcTarget.writeTarget(builder.initTarget());
// Disembargoes should only be sent to capabilities that were previously the subject of // Disembargoes should only be sent to capabilities that were previously the subject of
@ -937,7 +945,10 @@ final class RpcState {
} }
// send a Resolve message // send a Resolve message
var message = connection.newOutgoingMessage(1024); int sizeHint = messageSizeHint()
+ RpcProtocol.Resolve.factory.structSize().total()
+ CAP_DESCRIPTOR_SIZE_HINT;
var message = connection.newOutgoingMessage(sizeHint);
var resolve = message.getBody().initAs(RpcProtocol.Message.factory).initResolve(); var resolve = message.getBody().initAs(RpcProtocol.Message.factory).initResolve();
resolve.setPromiseId(exportId); resolve.setPromiseId(exportId);
var fds = List.<Integer>of(); var fds = List.<Integer>of();
@ -1788,7 +1799,9 @@ final class RpcState {
// TODO Flow control // TODO Flow control
if (resolutionType == ResolutionType.REFLECTED && receivedCall && !isDisconnected()) { if (resolutionType == ResolutionType.REFLECTED && receivedCall && !isDisconnected()) {
var message = connection.newOutgoingMessage(1024); int sizeHint = messageSizeHint()
+ RpcProtocol.Disembargo.factory.structSize().total();
var message = connection.newOutgoingMessage(sizeHint);
var disembargo = message.getBody().initAs(RpcProtocol.Message.factory).initDisembargo(); var disembargo = message.getBody().initAs(RpcProtocol.Message.factory).initDisembargo();
var redirect = RpcState.this.writeTarget(cap, disembargo.initTarget()); var redirect = RpcState.this.writeTarget(cap, disembargo.initTarget());
assert redirect == null; assert redirect == null;

View file

@ -12,6 +12,7 @@ public class TwoPartyVatNetwork
void incoming(IncomingRpcMessage message, RpcTwoPartyProtocol.Side side); void incoming(IncomingRpcMessage message, RpcTwoPartyProtocol.Side side);
} }
private static BuilderArena.AllocationStrategy allocationStrategy = BuilderArena.SUGGESTED_ALLOCATION_STRATEGY;
private CompletableFuture<java.lang.Void> previousWrite = CompletableFuture.completedFuture(null); private CompletableFuture<java.lang.Void> previousWrite = CompletableFuture.completedFuture(null);
private final CompletableFuture<java.lang.Void> peerDisconnected = new CompletableFuture<>(); private final CompletableFuture<java.lang.Void> peerDisconnected = new CompletableFuture<>();
private final AsynchronousSocketChannel channel; private final AsynchronousSocketChannel channel;
@ -117,7 +118,7 @@ public class TwoPartyVatNetwork
List<Integer> fds = List.of(); List<Integer> fds = List.of();
OutgoingMessage(int firstSegmentWordSize) { OutgoingMessage(int firstSegmentWordSize) {
this.message = new MessageBuilder(firstSegmentWordSize); this.message = new MessageBuilder(firstSegmentWordSize, allocationStrategy);
} }
@Override @Override