Skip to content

Commit 4ce8f8a

Browse files
authored
Merge pull request #38 from tidesdb/083
extend stats and error codes
2 parents 2beb4d2 + 2aa875c commit 4ce8f8a

4 files changed

Lines changed: 41 additions & 3 deletions

File tree

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.tidesdb</groupId>
88
<artifactId>tidesdb-java</artifactId>
9-
<version>0.8.2</version>
9+
<version>0.8.3</version>
1010
<packaging>jar</packaging>
1111

1212
<name>TidesDB Java</name>

src/main/c/com_tidesdb_TidesDB.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1423,10 +1423,12 @@ JNIEXPORT jobject JNICALL Java_com_tidesdb_TidesDB_nativeGetDbStats(JNIEnv *env,
14231423
/* Constructor signature:
14241424
int, long, long, long, int, int, long, int, int, long, int, long, long, long, long,
14251425
boolean, long, int, boolean, int, long,
1426-
boolean, String, long, long, int, long, long, long, long, boolean */
1426+
boolean, String, long, long, int, long, long, long, long, boolean,
1427+
long (primaryEpoch), long (seenEpoch),
1428+
long, long, long, long, long, long, long, long */
14271429
jmethodID constructor = (*env)->GetMethodID(
14281430
env, dbStatsClass, "<init>",
1429-
"(IJJJIIJIIJIJJJJZJIZIJZLjava/lang/String;JJIJJJJZJJJJJJJJ)V");
1431+
"(IJJJIIJIIJIJJJJZJIZIJZLjava/lang/String;JJIJJJJZJJJJJJJJJJ)V");
14301432

14311433
jstring connectorStr = NULL;
14321434
if (db_stats.object_store_connector != NULL)
@@ -1466,6 +1468,8 @@ JNIEXPORT jobject JNICALL Java_com_tidesdb_TidesDB_nativeGetDbStats(JNIEnv *env,
14661468
(jlong)db_stats.total_uploads,
14671469
(jlong)db_stats.total_upload_failures,
14681470
db_stats.replica_mode != 0,
1471+
(jlong)db_stats.primary_epoch,
1472+
(jlong)db_stats.seen_epoch,
14691473
(jlong)db_stats.uwal_bytes_written,
14701474
(jlong)db_stats.wal_bytes_written,
14711475
(jlong)db_stats.flush_bytes_written,

src/main/java/com/tidesdb/DbStats.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ public class DbStats {
5454
private final long totalUploads;
5555
private final long totalUploadFailures;
5656
private final boolean replicaMode;
57+
private final long primaryEpoch;
58+
private final long seenEpoch;
5759
private final long uwalBytesWritten;
5860
private final long walBytesWritten;
5961
private final long flushBytesWritten;
@@ -75,6 +77,7 @@ public DbStats(int numColumnFamilies, long totalMemory, long availableMemory,
7577
long localCacheBytesUsed, long localCacheBytesMax, int localCacheNumFiles,
7678
long lastUploadedGeneration, long uploadQueueDepth,
7779
long totalUploads, long totalUploadFailures, boolean replicaMode,
80+
long primaryEpoch, long seenEpoch,
7881
long uwalBytesWritten, long walBytesWritten, long flushBytesWritten,
7982
long compactionBytesWritten, long compactionBytesRead, long userBytesWritten,
8083
long flushCount, long compactionCount) {
@@ -109,6 +112,8 @@ public DbStats(int numColumnFamilies, long totalMemory, long availableMemory,
109112
this.totalUploads = totalUploads;
110113
this.totalUploadFailures = totalUploadFailures;
111114
this.replicaMode = replicaMode;
115+
this.primaryEpoch = primaryEpoch;
116+
this.seenEpoch = seenEpoch;
112117
this.uwalBytesWritten = uwalBytesWritten;
113118
this.walBytesWritten = walBytesWritten;
114119
this.flushBytesWritten = flushBytesWritten;
@@ -243,6 +248,27 @@ public boolean isReplicaMode() {
243248
return replicaMode;
244249
}
245250

251+
/**
252+
* Gets the lease epoch this primary currently holds (object-store single-writer fencing).
253+
* Returns 0 when this node is not a primary or holds no lease. A promotion that takes
254+
* effect bumps this value.
255+
*
256+
* @return the current primary lease epoch, or 0 if not a primary
257+
*/
258+
public long getPrimaryEpoch() {
259+
return primaryEpoch;
260+
}
261+
262+
/**
263+
* Gets the highest lease epoch this node has observed (object-store single-writer fencing).
264+
* A fenced primary sees {@link #isReplicaMode()} flip back to true once a newer epoch is seen.
265+
*
266+
* @return the highest observed lease epoch
267+
*/
268+
public long getSeenEpoch() {
269+
return seenEpoch;
270+
}
271+
246272
/**
247273
* Gets the framed bytes appended to the shared unified WAL (lifetime since open).
248274
* Returns 0 when unified memtable mode is off.
@@ -355,6 +381,8 @@ public String toString() {
355381
", totalUploads=" + totalUploads +
356382
", totalUploadFailures=" + totalUploadFailures +
357383
", replicaMode=" + replicaMode +
384+
", primaryEpoch=" + primaryEpoch +
385+
", seenEpoch=" + seenEpoch +
358386
", uwalBytesWritten=" + uwalBytesWritten +
359387
", walBytesWritten=" + walBytesWritten +
360388
", flushBytesWritten=" + flushBytesWritten +

src/test/java/com/tidesdb/TidesDBTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1480,11 +1480,17 @@ void testDbStatsUnifiedFields() throws TidesDBException {
14801480
assertTrue(dbStats.getTotalUploads() >= 0);
14811481
assertTrue(dbStats.getTotalUploadFailures() >= 0);
14821482

1483+
// Single-writer fencing epochs default to 0 outside object-store primary mode
1484+
assertEquals(0, dbStats.getPrimaryEpoch());
1485+
assertTrue(dbStats.getSeenEpoch() >= 0);
1486+
14831487
// Verify toString includes new fields
14841488
String str = dbStats.toString();
14851489
assertTrue(str.contains("unifiedMemtableEnabled="));
14861490
assertTrue(str.contains("objectStoreEnabled="));
14871491
assertTrue(str.contains("replicaMode="));
1492+
assertTrue(str.contains("primaryEpoch="));
1493+
assertTrue(str.contains("seenEpoch="));
14881494
}
14891495
}
14901496

0 commit comments

Comments
 (0)