Skip to content

Commit fad2165

Browse files
jikunshangwesm
authored andcommitted
ARROW-8082: [Plasma] Add JNI list() interface
Currently Plasma list() method is not implemented in Java code. Implement PlasmaClientJNI.list() interface and add some UT. Closes apache#6588 from jikunshang/add_jni_list Lead-authored-by: Ji Kunshang <kunshang.ji@intel.com> Co-authored-by: kunshang <kunshang.ji@intel.com> Signed-off-by: Wes McKinney <wesm+git@apache.org>
1 parent 9ad2cc4 commit fad2165

6 files changed

Lines changed: 55 additions & 0 deletions

File tree

‎cpp/src/plasma/lib/java/org_apache_arrow_plasma_PlasmaClientJNI.cc‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,3 +241,23 @@ JNIEXPORT jlong JNICALL Java_org_apache_arrow_plasma_PlasmaClientJNI_evict(
241241

242242
return static_cast<jlong>(evicted_bytes);
243243
}
244+
245+
JNIEXPORT jobjectArray JNICALL
246+
Java_org_apache_arrow_plasma_PlasmaClientJNI_list(JNIEnv* env, jclass cls, jlong conn) {
247+
plasma::PlasmaClient* client = reinterpret_cast<plasma::PlasmaClient*>(conn);
248+
plasma::ObjectTable objectTable;
249+
throw_exception_if_not_OK(env, client->List(&objectTable));
250+
jobjectArray ret =
251+
env->NewObjectArray(objectTable.size(), env->FindClass("[B"), env->NewByteArray(1));
252+
int i = 0;
253+
for (const auto& id_entry_pair : objectTable) {
254+
const plasma::ObjectID& id = id_entry_pair.first;
255+
jbyteArray idByteArray = env->NewByteArray(OBJECT_ID_SIZE);
256+
env->SetByteArrayRegion(idByteArray, 0, OBJECT_ID_SIZE,
257+
reinterpret_cast<jbyte*>(const_cast<uint8_t*>(id.data())));
258+
env->SetObjectArrayElement(ret, i, idByteArray);
259+
i++;
260+
}
261+
262+
return ret;
263+
}

‎cpp/src/plasma/lib/java/org_apache_arrow_plasma_PlasmaClientJNI.h‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,15 @@ JNIEXPORT jlong JNICALL Java_org_apache_arrow_plasma_PlasmaClientJNI_evict(JNIEn
126126
jclass, jlong,
127127
jlong);
128128

129+
/*
130+
* Class: org_apache_arrow_plasma_PlasmaClientJNI
131+
* Method: list
132+
* Signature: (J)[[B
133+
*/
134+
JNIEXPORT jobjectArray JNICALL Java_org_apache_arrow_plasma_PlasmaClientJNI_list(JNIEnv*,
135+
jclass,
136+
jlong);
137+
129138
#ifdef __cplusplus
130139
}
131140
#endif

‎java/plasma/src/main/java/org/apache/arrow/plasma/ObjectStoreLink.java‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,4 +123,9 @@ default byte[] get(byte[] objectId, int timeoutMs, boolean isMetadata) {
123123
* @param objectId used to identify an object.
124124
*/
125125
boolean contains(byte[] objectId);
126+
127+
/**
128+
* List all objects in the PlasmaStore.
129+
*/
130+
List<byte[]> list();
126131
}

‎java/plasma/src/main/java/org/apache/arrow/plasma/PlasmaClient.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
import java.nio.ByteBuffer;
2121
import java.util.ArrayList;
22+
import java.util.Arrays;
2223
import java.util.List;
2324

2425
import org.apache.arrow.plasma.exceptions.DuplicateObjectException;
@@ -118,6 +119,11 @@ public ByteBuffer getObjAsByteBuffer(byte[] objectId, int timeoutMs, boolean isM
118119
return bufs[0][isMetadata ? 1 : 0];
119120
}
120121

122+
@Override
123+
public List<byte[]> list() {
124+
return Arrays.asList(PlasmaClientJNI.list(conn));
125+
}
126+
121127
@Override
122128
public long evict(long numBytes) {
123129
return PlasmaClientJNI.evict(conn, numBytes);

‎java/plasma/src/main/java/org/apache/arrow/plasma/PlasmaClientJNI.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,5 @@ public static native byte[][] wait(long conn, byte[][] objectIds, int timeoutMs,
5353

5454
public static native long evict(long conn, long numBytes);
5555

56+
public static native byte[][] list(long conn);
5657
}

‎java/plasma/src/test/java/org/apache/arrow/plasma/PlasmaClientTest.java‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,20 @@ public void doTest() {
172172
Arrays.fill(value4, (byte)14);
173173
pLink.put(id4, value4, meta4);
174174

175+
List<byte[]> existIds = Arrays.asList(id1, id2, id3, id4);
176+
List<byte[]> listIds = pLink.list();
177+
assert listIds.size() == 4;
178+
for (byte[] existId : existIds) {
179+
boolean found = false;
180+
for (byte[] listId : listIds) {
181+
if (Arrays.equals(listId, existId)) {
182+
found = true;
183+
}
184+
}
185+
assert found;
186+
}
187+
System.out.println("Plasma java client list test success.");
188+
175189
byte[] id5 = new byte[20];
176190
Arrays.fill(id5, (byte)5);
177191
byte[] value5 = new byte[20];

0 commit comments

Comments
 (0)