Ian Maxon has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/1489
Change subject: Fix ASTERIXDB-1776
......................................................................
Fix ASTERIXDB-1776
The source of the issue was a deprecated method that failed when two
IODevices share a common prefix in their absolute path
Change-Id: Iba7837b433ce57f99e2c547e8bd1fb0bfc5a31df
---
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
A
hyracks-fullstack/hyracks/hyracks-storage-am-common/src/test/java/org/apache/hyracks/storage/am/common/IOManagerPathTest.java
2 files changed, 41 insertions(+), 1 deletion(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/89/1489/1
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
index 05c9f07..93790c2 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java
@@ -23,6 +23,8 @@
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -62,6 +64,20 @@
public IOManager(List<IODeviceHandle> devices) throws HyracksDataException
{
this.ioDevices = Collections.unmodifiableList(devices);
+ for (IODeviceHandle d : ioDevices) {
+ Path p = Paths.get(d.getMount().toURI());
+ for (IODeviceHandle e : ioDevices) {
+ if (e.equals(d)) {
+ continue;
+ } else {
+ Path q = Paths.get(e.getMount().toURI());
+ if (p.startsWith(q)) {
+ throw new HyracksDataException("IODevices shouldn't be
on a union mount.");
+ }
+ }
+ }
+
+ }
workspaces = new ArrayList<>();
for (IODeviceHandle d : ioDevices) {
if (d.getWorkspace() != null) {
@@ -350,8 +366,9 @@
}
public IODeviceHandle getDevice(String fullPath) {
+ Path full = Paths.get(fullPath);
for (IODeviceHandle d : ioDevices) {
- if (fullPath.startsWith(d.getMount().getAbsolutePath())) {
+ if (full.startsWith(Paths.get(d.getMount().getAbsolutePath()))) {
return d;
}
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/test/java/org/apache/hyracks/storage/am/common/IOManagerPathTest.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/test/java/org/apache/hyracks/storage/am/common/IOManagerPathTest.java
new file mode 100644
index 0000000..59cb8c1
--- /dev/null
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/test/java/org/apache/hyracks/storage/am/common/IOManagerPathTest.java
@@ -0,0 +1,23 @@
+package org.apache.hyracks.storage.am.common;
+
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.io.FileReference;
+import org.apache.hyracks.api.io.IODeviceHandle;
+import org.apache.hyracks.control.nc.io.IOManager;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+public class IOManagerPathTest {
+ @Test
+ public void test() throws HyracksDataException {
+ IODeviceHandle shorter = new IODeviceHandle(new File("/tmp/1"),
"storage");
+ IODeviceHandle longer = new IODeviceHandle(new File("/tmp/11"),
"storage");
+ IOManager ioManager = new IOManager(Arrays.asList(new IODeviceHandle[]
{ shorter, longer }));
+ FileReference f =
ioManager.resolveAbsolutePath("/tmp/11/storage/Foo_idx_foo/my_btree");
+ Assert.assertEquals("/tmp/11/storage/Foo_idx_foo/my_btree",
f.getAbsolutePath());
+ }
+}
--
To view, visit https://asterix-gerrit.ics.uci.edu/1489
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Iba7837b433ce57f99e2c547e8bd1fb0bfc5a31df
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Ian Maxon <[email protected]>