diff options
author | Tor Brede Vekterli <vekterli@vespa.ai> | 2024-02-22 16:45:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-22 16:45:12 +0100 |
commit | 60cfb23d326c2aac7e443094fc5d49d46e2370e7 (patch) | |
tree | efdad01e1ca694d7784434668fedff5e8688f1b6 /documentapi | |
parent | 70c3280d9423f0ead4592814aa6a6f93911d97a8 (diff) | |
parent | fabb09b9e5ed9a26a81af6742470563147011064 (diff) |
Merge pull request #30381 from vespa-engine/vekterli/less-clever-buffer-management
Use temporary byte array when serializing Protobuf in Java
Diffstat (limited to 'documentapi')
-rw-r--r-- | documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java index a4dcd660ab8..2d29697717b 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutableFactories80.java @@ -59,13 +59,10 @@ abstract class RoutableFactories80 { public boolean encode(Routable obj, DocumentSerializer out) { try { var protoMsg = encoderFn.apply(apiClass.cast(obj)); - var protoStream = CodedOutputStream.newInstance(out.getBuf().getByteBuffer()); // Not AutoCloseable... - try { - protoMsg.writeTo(protoStream); - } finally { - protoStream.flush(); - } - } catch (IOException | UnsupportedOperationException e) { + // TODO avoid this buffer indirection by directly exposing an OutputStream to write into...! + // ... or at the very least have a way to preallocate buffer output of protoMsg.getSerializedSize() bytes! + out.getBuf().put(protoMsg.toByteArray()); + } catch (RuntimeException e) { logCodecError("encoding", e); return false; } |