This is an automated email from the ASF dual-hosted git repository.
alsuliman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
The following commit(s) were added to refs/heads/master by this push:
new 4f18020796 [ASTERIXDB-3172][RT] Do not reset byte array holding
serialized tuple
4f18020796 is described below
commit 4f18020796c78bb4455bd7bec2946f83650da427
Author: Ali Alsuliman <[email protected]>
AuthorDate: Mon May 1 23:38:19 2023 -0700
[ASTERIXDB-3172][RT] Do not reset byte array holding serialized tuple
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
In the ResultWriterOperatorDescriptor, the frameOutputStream
should not reset the byte array that holds the serialized
tuple when adding the tuple to the frame (appendTuple()).
This leads to having to re-serialized the tuple again into
the byte array when the frame couldn't appendTuple() due to
being full of tuples.
Change-Id: Ibaaac339065a30f58e2bc7f39800a506f959549d
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17501
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Reviewed-by: Murtadha Hubail <[email protected]>
---
.../hyracks/dataflow/common/comm/io/FrameOutputStream.java | 4 +---
.../dataflow/std/result/ResultWriterOperatorDescriptor.java | 13 +++++++------
2 files changed, 8 insertions(+), 9 deletions(-)
diff --git
a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/FrameOutputStream.java
b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/FrameOutputStream.java
index d3af00d651..241e3e2ecf 100644
---
a/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/FrameOutputStream.java
+++
b/hyracks-fullstack/hyracks/hyracks-dataflow-common/src/main/java/org/apache/hyracks/dataflow/common/comm/io/FrameOutputStream.java
@@ -51,9 +51,7 @@ public class FrameOutputStream extends
ByteArrayAccessibleOutputStream {
if (LOGGER.isTraceEnabled()) {
LOGGER.trace("appendTuple(): tuple size: " + count);
}
- boolean appended = frameTupleAppender.append(buf, 0, count);
- count = 0;
- return appended;
+ return frameTupleAppender.append(buf, 0, count);
}
public void flush(IFrameWriter writer) throws HyracksDataException {
diff --git
a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/result/ResultWriterOperatorDescriptor.java
b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/result/ResultWriterOperatorDescriptor.java
index a4cfa13dbe..426121caba 100644
---
a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/result/ResultWriterOperatorDescriptor.java
+++
b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/result/ResultWriterOperatorDescriptor.java
@@ -31,6 +31,7 @@ import
org.apache.hyracks.api.dataflow.value.IRecordDescriptorProvider;
import org.apache.hyracks.api.dataflow.value.IResultSerializer;
import org.apache.hyracks.api.dataflow.value.IResultSerializerFactory;
import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
+import org.apache.hyracks.api.exceptions.ErrorCode;
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.api.exceptions.HyracksException;
import org.apache.hyracks.api.job.IOperatorDescriptorRegistry;
@@ -43,14 +44,12 @@ import
org.apache.hyracks.dataflow.std.base.AbstractSingleActivityOperatorDescri
import
org.apache.hyracks.dataflow.std.base.AbstractUnaryInputSinkOperatorNodePushable;
public class ResultWriterOperatorDescriptor extends
AbstractSingleActivityOperatorDescriptor {
+
private static final long serialVersionUID = 1L;
private final ResultSetId rsId;
-
private final IResultMetadata metadata;
-
private final boolean asyncMode;
-
private final IResultSerializerFactory resultSerializerFactory;
private final long maxReads;
@@ -105,10 +104,12 @@ public class ResultWriterOperatorDescriptor extends
AbstractSingleActivityOperat
resultSerializer.appendTuple(frameTupleAccessor, tIndex);
if (!frameOutputStream.appendTuple()) {
frameOutputStream.flush(resultPartitionWriter);
-
- resultSerializer.appendTuple(frameTupleAccessor,
tIndex);
- frameOutputStream.appendTuple();
+ if (!frameOutputStream.appendTuple()) {
+ throw
HyracksDataException.create(ErrorCode.TUPLE_CANNOT_FIT_INTO_EMPTY_FRAME,
+ frameOutputStream.getLength());
+ }
}
+ frameOutputStream.reset();
}
}