You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uniffle.apache.org by ck...@apache.org on 2022/11/12 07:07:31 UTC
[incubator-uniffle] 04/04: Fix AbstractStorage#containsWriteHandler (#281)
This is an automated email from the ASF dual-hosted git repository.
ckj pushed a commit to branch branch-0.6
in repository https://gitbox.apache.org/repos/asf/incubator-uniffle.git
commit f40d76c0bbc221782eda3d0ce4cd5fa98c22a682
Author: xianjingfeng <58...@qq.com>
AuthorDate: Fri Nov 4 15:00:37 2022 +0800
Fix AbstractStorage#containsWriteHandler (#281)
### What changes were proposed in this pull request?
Fix AbstractStorage#containsWriteHandler
### Why are the changes needed?
It is a bug, and it is obvious.
### Does this PR introduce _any_ user-facing change?
No
### How was this patch tested?
Feel unnecessary
---
.../uniffle/server/storage/LocalStorageManager.java | 2 +-
.../apache/uniffle/storage/common/AbstractStorage.java | 6 +++++-
.../apache/uniffle/storage/common/LocalStorageTest.java | 15 +++++++++++++++
3 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/server/src/main/java/org/apache/uniffle/server/storage/LocalStorageManager.java b/server/src/main/java/org/apache/uniffle/server/storage/LocalStorageManager.java
index 1bbc6298..f3b48032 100644
--- a/server/src/main/java/org/apache/uniffle/server/storage/LocalStorageManager.java
+++ b/server/src/main/java/org/apache/uniffle/server/storage/LocalStorageManager.java
@@ -137,7 +137,7 @@ public class LocalStorageManager extends SingleStorageManager {
event.getStartPartition()));
if (storage.containsWriteHandler(event.getAppId(), event.getShuffleId(), event.getStartPartition())
&& storage.isCorrupted()) {
- throw new RuntimeException("storage " + storage.getBasePath() + " is corrupted");
+ LOG.error("storage " + storage.getBasePath() + " is corrupted");
}
if (storage.isCorrupted()) {
storage = getRepairedStorage(event.getAppId(), event.getShuffleId(), event.getStartPartition());
diff --git a/storage/src/main/java/org/apache/uniffle/storage/common/AbstractStorage.java b/storage/src/main/java/org/apache/uniffle/storage/common/AbstractStorage.java
index ddddae9c..80125a63 100644
--- a/storage/src/main/java/org/apache/uniffle/storage/common/AbstractStorage.java
+++ b/storage/src/main/java/org/apache/uniffle/storage/common/AbstractStorage.java
@@ -73,8 +73,12 @@ public abstract class AbstractStorage implements Storage {
protected abstract ServerReadHandler newReadHandler(CreateShuffleReadHandlerRequest request);
public boolean containsWriteHandler(String appId, int shuffleId, int partition) {
+ Map<String, ShuffleWriteHandler> map = writerHandlers.get(appId);
+ if (map == null || map.isEmpty()) {
+ return false;
+ }
String partitionKey = RssUtils.generatePartitionKey(appId, shuffleId, partition);
- return writerHandlers.containsKey(partitionKey);
+ return map.containsKey(partitionKey);
}
@Override
diff --git a/storage/src/test/java/org/apache/uniffle/storage/common/LocalStorageTest.java b/storage/src/test/java/org/apache/uniffle/storage/common/LocalStorageTest.java
index 5240e59a..835d5e9d 100644
--- a/storage/src/test/java/org/apache/uniffle/storage/common/LocalStorageTest.java
+++ b/storage/src/test/java/org/apache/uniffle/storage/common/LocalStorageTest.java
@@ -29,6 +29,8 @@ import org.junit.jupiter.api.io.TempDir;
import org.roaringbitmap.RoaringBitmap;
import org.apache.uniffle.common.util.RssUtils;
+import org.apache.uniffle.storage.request.CreateShuffleWriteHandlerRequest;
+import org.apache.uniffle.storage.util.StorageType;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -161,4 +163,17 @@ public class LocalStorageTest {
assertEquals(2, item.getSortedShuffleKeys(false, 2).size());
assertEquals(2, item.getSortedShuffleKeys(false, 3).size());
}
+
+ @Test
+ public void writeHandlerTest() {
+ LocalStorage item = LocalStorage.newBuilder().basePath(testBaseDir.getAbsolutePath()).build();
+ String appId = "writeHandlerTest";
+ assertFalse(item.containsWriteHandler(appId, 0, 1));
+ String[] storageBasePaths = {testBaseDir.getAbsolutePath()};
+ CreateShuffleWriteHandlerRequest request = new CreateShuffleWriteHandlerRequest(
+ StorageType.LOCALFILE.name(), appId, 0, 1, 1, storageBasePaths,
+ "ss1", null, 1, null);
+ item.getOrCreateWriteHandler(request);
+ assertTrue(item.containsWriteHandler(appId, 0, 1));
+ }
}