>From Michael Blow <[email protected]>:
Michael Blow has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20443?usp=email )
Change subject: [NO ISSUE][*DB][EXT] Make IDataParser extend Closeable, misc
......................................................................
[NO ISSUE][*DB][EXT] Make IDataParser extend Closeable, misc
Ext-ref: MB-68827
Change-Id: Id8d97f948d048e5c204bb0b78c089420b76dddc9
---
M
asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IDataParser.java
M
asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordConverter.java
M
asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java
M
hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/ByteArrayAccessibleOutputStream.java
4 files changed, 36 insertions(+), 6 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/43/20443/1
diff --git
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IDataParser.java
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IDataParser.java
index 5dbc383..d3a7448 100644
---
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IDataParser.java
+++
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IDataParser.java
@@ -18,6 +18,7 @@
*/
package org.apache.asterix.external.api;
+import java.io.Closeable;
import java.io.DataOutput;
import org.apache.asterix.builders.IARecordBuilder;
@@ -37,14 +38,18 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
-public interface IDataParser {
+public interface IDataParser extends Closeable {
+ @Override
+ default void close() {
+ // Default no-op
+ }
/*
* The following two static methods are expensive. right now, they are
used by RSSFeeds and
* Twitter feed
* TODO: Get rid of them
*/
- public static void writeRecord(AMutableRecord record, DataOutput
dataOutput, IARecordBuilder recordBuilder)
+ static void writeRecord(AMutableRecord record, DataOutput dataOutput,
IARecordBuilder recordBuilder)
throws HyracksDataException {
ArrayBackedValueStorage fieldValue = new ArrayBackedValueStorage();
int numFields = record.getType().getFieldNames().length;
@@ -58,7 +63,7 @@
}
@SuppressWarnings("unchecked")
- public static void writeObject(IAObject obj, DataOutput dataOutput) throws
HyracksDataException {
+ static void writeObject(IAObject obj, DataOutput dataOutput) throws
HyracksDataException {
switch (obj.getType().getTypeTag()) {
case OBJECT: {
IARecordBuilder recordBuilder = new RecordBuilder();
@@ -105,7 +110,7 @@
}
}
- public static <T> void toBytes(T serializable, ArrayBackedValueStorage
buffer, ISerializerDeserializer<T> serde)
+ static <T> void toBytes(T serializable, ArrayBackedValueStorage buffer,
ISerializerDeserializer<T> serde)
throws HyracksDataException {
buffer.reset();
DataOutput out = buffer.getDataOutput();
diff --git
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordConverter.java
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordConverter.java
index f544ca0..abb41f2 100644
---
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordConverter.java
+++
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/api/IRecordConverter.java
@@ -18,13 +18,14 @@
*/
package org.apache.asterix.external.api;
+import java.io.Closeable;
import java.io.IOException;
import java.util.function.LongSupplier;
@FunctionalInterface
-public interface IRecordConverter<I, O> {
+public interface IRecordConverter<I, O> extends Closeable {
- public O convert(IRawRecord<? extends I> input) throws IOException;
+ O convert(IRawRecord<? extends I> input) throws IOException;
/**
* Configures the converter with information suppliers from the {@link
IRecordReader} data source.
@@ -33,4 +34,8 @@
*/
default void configure(LongSupplier lineNumber) {
}
+
+ default void close() {
+ // default no-op
+ }
}
diff --git
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java
index 4279ebd..6ef5497 100644
---
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java
+++
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java
@@ -252,6 +252,8 @@
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw HyracksDataException.create(e);
+ } finally {
+ dataParser.close();
}
return true;
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/ByteArrayAccessibleOutputStream.java
b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/ByteArrayAccessibleOutputStream.java
index 1a806cd..17f9a2e 100644
---
a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/ByteArrayAccessibleOutputStream.java
+++
b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/ByteArrayAccessibleOutputStream.java
@@ -125,4 +125,22 @@
ensureCapacity(bytesRequired);
count = bytesRequired;
}
+
+ /**
+ * Reset the stream and shrink the internal buffer if its size is larger
than newSize.
+ * @param newSize
+ * @return true if the internal buffer was reallocated, false otherwise.
+ */
+ public boolean resetAndShrink(int newSize) {
+ reset();
+ if (buf.length > newSize) {
+ buf = new byte[newSize];
+ return true;
+ }
+ return false;
+ }
+
+ public int capacity() {
+ return buf.length;
+ }
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20443?usp=email
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: neo
Gerrit-Change-Id: Id8d97f948d048e5c204bb0b78c089420b76dddc9
Gerrit-Change-Number: 20443
Gerrit-PatchSet: 1
Gerrit-Owner: Michael Blow <[email protected]>