>From Wail Alkowaileet <[email protected]>:
Wail Alkowaileet has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18287 )
Change subject: [NO ISSUE][STO] Include more info. on erroneous write
......................................................................
[NO ISSUE][STO] Include more info. on erroneous write
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
Include more information on erroneous write of columnar
temp buffers
Change-Id: I8f56c67c394d8486412573f9975d71172b26bb0b
---
M
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/writer/AbstractColumnValuesWriter.java
M
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/bytes/stream/out/MultiTemporaryBufferBytesOutputStream.java
2 files changed, 44 insertions(+), 4 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/87/18287/1
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/bytes/stream/out/MultiTemporaryBufferBytesOutputStream.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/bytes/stream/out/MultiTemporaryBufferBytesOutputStream.java
index 38f7321..045ea9e 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/bytes/stream/out/MultiTemporaryBufferBytesOutputStream.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/bytes/stream/out/MultiTemporaryBufferBytesOutputStream.java
@@ -26,8 +26,11 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import
org.apache.hyracks.storage.am.lsm.btree.column.api.IColumnWriteMultiPageOp;
import org.apache.hyracks.util.StorageUtil;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
public final class MultiTemporaryBufferBytesOutputStream extends
AbstractMultiBufferBytesOutputStream {
+ private static final Logger LOGGER = LogManager.getLogger();
private static final int INITIAL_BUFFER_SIZE =
StorageUtil.getIntSizeInBytes(32, StorageUtil.StorageUnit.KILOBYTE);
public
MultiTemporaryBufferBytesOutputStream(Mutable<IColumnWriteMultiPageOp>
multiPageOpRef) {
@@ -55,14 +58,30 @@
@Override
public void writeTo(OutputStream outputStream) throws IOException {
int writtenSize = 0;
- for (int i = 0; i < currentBufferIndex + 1; i++) {
+ int numberOfUsedBuffers = currentBufferIndex + 1;
+ for (int i = 0; i < numberOfUsedBuffers; i++) {
ByteBuffer buffer = buffers.get(i);
outputStream.write(buffer.array(), 0, buffer.position());
writtenSize += buffer.position();
}
+
if (writtenSize != position) {
- //Sanity check
- throw new IllegalStateException("Size is different");
+ // Sanity check
+ StringBuilder builder = new StringBuilder();
+ builder.append('[');
+ for (int i = 0; i < numberOfUsedBuffers; i++) {
+ ByteBuffer buffer = buffers.get(i);
+ builder.append("{Buffer index: ").append(i);
+ builder.append(" Position: ").append(buffer.position());
+ builder.append(" Limit: ").append(buffer.limit());
+ builder.append(" Capacity: ").append(buffer.capacity());
+ builder.append("}, ");
+ }
+ builder.setLength(builder.length() - 2);
+ builder.append(']');
+ throw new IllegalStateException("Size is different (written: " +
writtenSize + ", position: " + position
+ + ", allocatedBytes: " + allocatedBytes + ",
currentBufferIndex: " + currentBufferIndex
+ + ", buffers: " + builder + ")");
}
}
}
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/writer/AbstractColumnValuesWriter.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/writer/AbstractColumnValuesWriter.java
index 5e5d6e4..accf4a0 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/writer/AbstractColumnValuesWriter.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/writer/AbstractColumnValuesWriter.java
@@ -34,10 +34,13 @@
import org.apache.asterix.om.types.ATypeTag;
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.data.std.api.IValueReference;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.apache.parquet.bytes.BytesInput;
import org.apache.parquet.bytes.BytesUtils;
public abstract class AbstractColumnValuesWriter implements
IColumnValuesWriter {
+ private static final Logger LOGGER = LogManager.getLogger();
// For 3 integers (count, defSize, and valueSize)
private static final int COUNT_DEF_SIZE_VALUE_SIZE = Integer.BYTES * 3;
protected final AbstractColumnFilterWriter filterWriter;
@@ -188,7 +191,8 @@
*/
BytesUtils.writeZigZagVarInt(0, out);
}
- } catch (IOException e) {
+ } catch (Exception e) {
+ LOGGER.error("Error while flushing columnIndex {}", columnIndex);
throw HyracksDataException.create(e);
}
reset();
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18287
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I8f56c67c394d8486412573f9975d71172b26bb0b
Gerrit-Change-Number: 18287
Gerrit-PatchSet: 1
Gerrit-Owner: Wail Alkowaileet <[email protected]>
Gerrit-MessageType: newchange