abdullah alamoudi has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/2115
Change subject: [NO ISSUE][STO] Ensure no duplicate keys in component's metadata
......................................................................
[NO ISSUE][STO] Ensure no duplicate keys in component's metadata
- user model changes: no
- storage format changes: no
- interface changes: no
details:
- Previously, when adding a kv pair to the metadata of a memory
component, we add a new Pair item to the ArrayList. After
this change, we only update it if it exists.
Change-Id: I4ae9736c9b5fdba5795245bdf835c023e3f73b15
---
M
hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/api/AbstractPointable.java
A
hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/DataUtils.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMDiskComponent.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/DiskComponentMetadata.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/EmptyDiskComponentMetadata.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MemoryComponentMetadata.java
7 files changed, 55 insertions(+), 17 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/15/2115/1
diff --git
a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/api/AbstractPointable.java
b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/api/AbstractPointable.java
index 77f18ea..05417a8 100644
---
a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/api/AbstractPointable.java
+++
b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/api/AbstractPointable.java
@@ -25,19 +25,6 @@
protected int length;
- /**
- * copies the content of this pointable to the passed byte array.
- * the array is expected to be at least of length = length of this
pointable
- *
- * @param copy
- * the array to write into
- * @throws ArrayIndexOutOfBoundsException
- * if the passed array size is smaller than length
- */
- public void copyInto(byte[] copy) {
- System.arraycopy(bytes, start, copy, 0, length);
- }
-
@Override
public void set(byte[] bytes, int start, int length) {
this.bytes = bytes;
diff --git
a/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/DataUtils.java
b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/DataUtils.java
new file mode 100644
index 0000000..9a0ac13
--- /dev/null
+++
b/hyracks-fullstack/hyracks/hyracks-data/hyracks-data-std/src/main/java/org/apache/hyracks/data/std/util/DataUtils.java
@@ -0,0 +1,33 @@
+package org.apache.hyracks.data.std.util;
+
+import org.apache.hyracks.data.std.api.IValueReference;
+
+public class DataUtils {
+
+ private DataUtils() {
+ }
+
+ /**
+ * copies the content of this pointable to the passed byte array.
+ * the array is expected to be at least of length = length of this
pointable
+ *
+ * @param copy
+ * the array to write into
+ * @throws ArrayIndexOutOfBoundsException
+ * if the passed array size is smaller than length
+ */
+ public static void copyInto(IValueReference value, byte[] copy) {
+ System.arraycopy(value.getByteArray(), value.getStartOffset(), copy,
0, value.getLength());
+ }
+
+ /**
+ * copies the content of this pointable to the passed byte array.
+ * the array is expected to be at least of length = offset + length of
this pointable
+ *
+ * @param copy
+ * @param offset
+ */
+ public static void copyInto(IValueReference value, byte[] copy, int
offset) {
+ System.arraycopy(value.getByteArray(), value.getStartOffset(), copy,
offset, value.getLength());
+ }
+}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
index ae66402..f03a358 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/impls/AbstractTreeIndex.java
@@ -342,4 +342,9 @@
public boolean hasMemoryComponents() {
return true;
}
+
+ @Override
+ public String toString() {
+ return "{\"class\":\"" + getClass().getSimpleName() + "\",\"file\":\""
+ file.getRelativePath() + "\"}";
+ }
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMDiskComponent.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMDiskComponent.java
index 280cc52..0b59e91 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMDiskComponent.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/AbstractLSMDiskComponent.java
@@ -197,4 +197,9 @@
.addBulkLoader(createIndexBulkLoader(fillFactor, verifyInput,
numElementsHint, checkIfEmptyIndex));
return chainedBulkLoader;
}
+
+ @Override
+ public String toString() {
+ return "{\"class\":" + getClass().getSimpleName() + "\", \"index\":" +
getIndex().toString() + "}";
+ }
}
\ No newline at end of file
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/DiskComponentMetadata.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/DiskComponentMetadata.java
index b7d2ea3..9d1233a 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/DiskComponentMetadata.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/DiskComponentMetadata.java
@@ -44,8 +44,8 @@
}
@Override
- public IValueReference get(IValueReference key) throws
HyracksDataException {
- IPointable value = VoidPointable.FACTORY.createPointable();
+ public VoidPointable get(IValueReference key) throws HyracksDataException {
+ VoidPointable value = VoidPointable.FACTORY.createPointable();
get(key, value);
return value;
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/EmptyDiskComponentMetadata.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/EmptyDiskComponentMetadata.java
index 7d1925b..5b447f6 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/EmptyDiskComponentMetadata.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/EmptyDiskComponentMetadata.java
@@ -21,6 +21,7 @@
import org.apache.hyracks.api.exceptions.HyracksDataException;
import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.api.IValueReference;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
public class EmptyDiskComponentMetadata extends DiskComponentMetadata {
public static final EmptyDiskComponentMetadata INSTANCE = new
EmptyDiskComponentMetadata();
@@ -40,7 +41,7 @@
}
@Override
- public IValueReference get(IValueReference key) throws
HyracksDataException {
+ public VoidPointable get(IValueReference key) throws HyracksDataException {
throw new IllegalStateException("Attempt to read metadata of empty
component");
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MemoryComponentMetadata.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MemoryComponentMetadata.java
index dcc9355..1b827b7 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MemoryComponentMetadata.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MemoryComponentMetadata.java
@@ -20,6 +20,8 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -31,6 +33,7 @@
import org.apache.hyracks.storage.am.lsm.common.api.IComponentMetadata;
public class MemoryComponentMetadata implements IComponentMetadata {
+ private static final Logger LOGGER =
Logger.getLogger(MemoryComponentMetadata.class.getName());
private static final byte[] empty = new byte[0];
private final List<org.apache.commons.lang3.tuple.Pair<IValueReference,
ArrayBackedValueStorage>> store =
new ArrayList<>();
@@ -43,9 +46,9 @@
ArrayBackedValueStorage stored = get(key);
if (stored == null) {
stored = new ArrayBackedValueStorage();
+ store.add(Pair.of(key, stored));
}
stored.assign(value);
- store.add(Pair.of(key, stored));
}
/**
@@ -71,8 +74,12 @@
}
public void copy(IMetadataPageManager mdpManager) throws
HyracksDataException {
+ LOGGER.log(Level.INFO, "Copying Metadata into a different component");
ITreeIndexMetadataFrame frame = mdpManager.createMetadataFrame();
for (Pair<IValueReference, ArrayBackedValueStorage> pair : store) {
+ if (LOGGER.isLoggable(Level.INFO)) {
+ LOGGER.log(Level.INFO, "Copying " + pair.getKey() + " : " +
pair.getValue().getLength() + " bytes");
+ }
mdpManager.put(frame, pair.getKey(), pair.getValue());
}
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/2115
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I4ae9736c9b5fdba5795245bdf835c023e3f73b15
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: abdullah alamoudi <[email protected]>