Skip to content

Commit dcaec1b

Browse files
Added getClusterCacheMaxSize, getClusterCacheCurrentSize, and setClusterCacheMaxSize methods in Archive to manage the cluster cache size in libzim.
1 parent e449f8c commit dcaec1b

File tree

4 files changed

+31
-0
lines changed

4 files changed

+31
-0
lines changed

lib/src/main/cpp/libzim/archive.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,3 +410,15 @@ METHOD(jobject, findByTitle, jstring title) {
410410
setPtr(env, obj, std::move(end_ptr), "nativeHandleEnd");
411411
return obj;
412412
} CATCH_EXCEPTION(nullptr)
413+
414+
METHOD0(jlong, getClusterCacheMaxSize) {
415+
return static_cast<jlong>(zim::getClusterCacheMaxSize());
416+
} CATCH_EXCEPTION(0)
417+
418+
METHOD0(jlong, getClusterCacheCurrentSize) {
419+
return static_cast<jlong>(zim::getClusterCacheCurrentSize());
420+
} CATCH_EXCEPTION(0)
421+
422+
METHOD(void, setClusterCacheMaxSize, jlong sizeInBytes) {
423+
zim::setClusterCacheMaxSize(static_cast<size_t>(sizeInBytes));
424+
} CATCH_EXCEPTION()

lib/src/main/java/org/kiwix/libzim/Archive.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ public Archive(FdInput[] fds, OpenConfig openConfig)
135135
public native long getDirentCacheMaxSize();
136136
public native long getDirentCacheCurrentSize();
137137
public native void setDirentCacheMaxSize(long nbDirents);
138+
public native long getClusterCacheMaxSize();
139+
public native long getClusterCacheCurrentSize();
140+
public native void setClusterCacheMaxSize(long sizeInBytes);
138141

139142

140143
private native void setNativeArchive(String filename);

lib/src/test/org/kiwix/test/libzim/TestArchive.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,5 +140,9 @@ public TestArchive(FdInput[] fds, OpenConfig openConfig)
140140
public long getDirentCacheCurrentSize() { return inner.getDirentCacheCurrentSize(); }
141141
public void setDirentCacheMaxSize(long nbDirents) { inner.setDirentCacheMaxSize(nbDirents); }
142142

143+
public long getClusterCacheMaxSize() { return inner.getClusterCacheMaxSize(); }
144+
public long getClusterCacheCurrentSize() { return inner.getClusterCacheCurrentSize(); }
145+
public void setClusterCacheMaxSize(long sizeInBytes) { inner.setClusterCacheMaxSize(sizeInBytes); }
146+
143147
public void dispose() { inner.dispose(); }
144148
}

lib/src/test/test.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,18 @@ private void testArchive(TestArchive archive)
226226
long currentCacheSize = archive.getDirentCacheCurrentSize();
227227
assertEquals(19, currentCacheSize);
228228
archive.setDirentCacheMaxSize(19);
229+
// Cluster size
230+
long clusterCacheMaxSize = archive.getClusterCacheMaxSize();
231+
assertEquals(536870912, clusterCacheMaxSize);
232+
long clusterCacheCurrentSize = archive.getClusterCacheCurrentSize();
233+
assertTrue(clusterCacheCurrentSize > 0);
234+
// Set the new cluster size
235+
archive.setClusterCacheMaxSize(clusterCacheMaxSize / 2);
236+
// Test new cluster size set or not.
237+
long clusterCacheMaxSize1 = archive.getClusterCacheMaxSize();
238+
assertEquals(clusterCacheMaxSize / 2, clusterCacheMaxSize1);
239+
// Set the cluster max size
240+
archive.setClusterCacheMaxSize(536870912);
229241
System.gc();
230242
System.runFinalization();
231243
}

0 commit comments

Comments
 (0)