From be378d847467b25c97baf1633df49f59605880d5 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Fri, 10 Jul 2026 12:43:12 +0200 Subject: [PATCH 1/2] Regenerate the MeosOps facades against the current JMEOS surface The committed MeosOps* facades were generated against an older JMEOS and no longer compile against MobilityDB/JMEOS main: the *_as_hexwkb functions folded their trailing out-parameter (required (Pointer,byte), the facades called (Pointer,byte,Pointer)) and an int widened to long, giving 12 compilation errors in MeosOpsFree{Pose,Npoint,Cbuffer}, MeosOps{STBox,TBox,Set,Span,SpanSet}. Regenerate the 8 drifted facades with tools/codegen_facades.py against a jar built from JMEOS main. Verified with a clean build (mvn clean test) against the freshly built libmeos + jar: 11 tests, 0 failures, 0 errors. --- .../main/java/org/mobilitydb/meos/MeosOpsFreeCbuffer.java | 6 +++--- .../main/java/org/mobilitydb/meos/MeosOpsFreeNpoint.java | 2 +- .../src/main/java/org/mobilitydb/meos/MeosOpsFreePose.java | 6 +++--- .../src/main/java/org/mobilitydb/meos/MeosOpsSTBox.java | 6 +++--- .../src/main/java/org/mobilitydb/meos/MeosOpsSet.java | 2 +- .../src/main/java/org/mobilitydb/meos/MeosOpsSpan.java | 2 +- .../src/main/java/org/mobilitydb/meos/MeosOpsSpanSet.java | 2 +- .../src/main/java/org/mobilitydb/meos/MeosOpsTBox.java | 6 +++--- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsFreeCbuffer.java b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsFreeCbuffer.java index 269f8a8..f2f0f19 100644 --- a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsFreeCbuffer.java +++ b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsFreeCbuffer.java @@ -100,7 +100,7 @@ public static int cbuffer_hash(Pointer arg0) { *

Pure per-event; safe in any scalar position.

*

Classification: scalar comparison/hash

*/ - public static int cbuffer_hash_extended(Pointer arg0, int arg1) { + public static long cbuffer_hash_extended(Pointer arg0, long arg1) { if (!MEOS_AVAILABLE) { throw new UnsupportedOperationException( "cbuffer_hash_extended requires libmeos — set -Dmobilitykafka.meos.enabled=true"); @@ -1868,12 +1868,12 @@ public static String cbuffer_as_ewkt(Pointer arg0, int arg1) { *

I/O / catalog / lifecycle helper.

*

Classification: IO/serialization

*/ - public static String cbuffer_as_hexwkb(Pointer arg0, byte arg1, Pointer arg2) { + public static String cbuffer_as_hexwkb(Pointer arg0, byte arg1) { if (!MEOS_AVAILABLE) { throw new UnsupportedOperationException( "cbuffer_as_hexwkb requires libmeos — set -Dmobilitykafka.meos.enabled=true"); } - return GeneratedFunctions.cbuffer_as_hexwkb(arg0, arg1, arg2); + return GeneratedFunctions.cbuffer_as_hexwkb(arg0, arg1); } /** diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsFreeNpoint.java b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsFreeNpoint.java index 4cf74ec..5f84e0c 100644 --- a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsFreeNpoint.java +++ b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsFreeNpoint.java @@ -152,7 +152,7 @@ public static int npoint_hash(Pointer arg0) { *

Pure per-event; safe in any scalar position.

*

Classification: scalar comparison/hash

*/ - public static int npoint_hash_extended(Pointer arg0, int arg1) { + public static long npoint_hash_extended(Pointer arg0, long arg1) { if (!MEOS_AVAILABLE) { throw new UnsupportedOperationException( "npoint_hash_extended requires libmeos — set -Dmobilitykafka.meos.enabled=true"); diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsFreePose.java b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsFreePose.java index e17b637..9fcd881 100644 --- a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsFreePose.java +++ b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsFreePose.java @@ -139,7 +139,7 @@ public static int pose_hash(Pointer arg0) { *

Pure per-event; safe in any scalar position.

*

Classification: scalar comparison/hash

*/ - public static int pose_hash_extended(Pointer arg0, int arg1) { + public static long pose_hash_extended(Pointer arg0, long arg1) { if (!MEOS_AVAILABLE) { throw new UnsupportedOperationException( "pose_hash_extended requires libmeos — set -Dmobilitykafka.meos.enabled=true"); @@ -906,12 +906,12 @@ public static String pose_as_ewkt(Pointer arg0, int arg1) { *

I/O / catalog / lifecycle helper.

*

Classification: IO/serialization

*/ - public static String pose_as_hexwkb(Pointer arg0, byte arg1, Pointer arg2) { + public static String pose_as_hexwkb(Pointer arg0, byte arg1) { if (!MEOS_AVAILABLE) { throw new UnsupportedOperationException( "pose_as_hexwkb requires libmeos — set -Dmobilitykafka.meos.enabled=true"); } - return GeneratedFunctions.pose_as_hexwkb(arg0, arg1, arg2); + return GeneratedFunctions.pose_as_hexwkb(arg0, arg1); } /** diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSTBox.java b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSTBox.java index 2cec49a..f8d3e78 100644 --- a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSTBox.java +++ b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSTBox.java @@ -275,7 +275,7 @@ public static int stbox_hash(Pointer arg0) { *

Object-model role: {@code accessor}.

*

Classification: role=accessor

*/ - public static int stbox_hash_extended(Pointer arg0, int arg1) { + public static long stbox_hash_extended(Pointer arg0, long arg1) { if (!MEOS_AVAILABLE) { throw new UnsupportedOperationException( "stbox_hash_extended requires libmeos — set -Dmobilitykafka.meos.enabled=true"); @@ -695,12 +695,12 @@ public static Pointer stbox_zmin(Pointer arg0) { *

Object-model role: {@code output}.

*

Classification: IO/serialization

*/ - public static String stbox_as_hexwkb(Pointer arg0, byte arg1, Pointer arg2) { + public static String stbox_as_hexwkb(Pointer arg0, byte arg1) { if (!MEOS_AVAILABLE) { throw new UnsupportedOperationException( "stbox_as_hexwkb requires libmeos — set -Dmobilitykafka.meos.enabled=true"); } - return GeneratedFunctions.stbox_as_hexwkb(arg0, arg1, arg2); + return GeneratedFunctions.stbox_as_hexwkb(arg0, arg1); } /** diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSet.java b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSet.java index b80a2f3..47a3cfd 100644 --- a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSet.java +++ b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSet.java @@ -162,7 +162,7 @@ public static int set_hash(Pointer arg0) { *

Object-model role: {@code accessor}.

*

Classification: role=accessor

*/ - public static int set_hash_extended(Pointer arg0, int arg1) { + public static long set_hash_extended(Pointer arg0, long arg1) { if (!MEOS_AVAILABLE) { throw new UnsupportedOperationException( "set_hash_extended requires libmeos — set -Dmobilitykafka.meos.enabled=true"); diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSpan.java b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSpan.java index 75102b4..8f93ff9 100644 --- a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSpan.java +++ b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSpan.java @@ -162,7 +162,7 @@ public static int span_hash(Pointer arg0) { *

Object-model role: {@code accessor}.

*

Classification: role=accessor

*/ - public static int span_hash_extended(Pointer arg0, int arg1) { + public static long span_hash_extended(Pointer arg0, long arg1) { if (!MEOS_AVAILABLE) { throw new UnsupportedOperationException( "span_hash_extended requires libmeos — set -Dmobilitykafka.meos.enabled=true"); diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSpanSet.java b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSpanSet.java index 3eb5dad..7f0c714 100644 --- a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSpanSet.java +++ b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsSpanSet.java @@ -148,7 +148,7 @@ public static int spanset_hash(Pointer arg0) { *

Object-model role: {@code accessor}.

*

Classification: role=accessor

*/ - public static int spanset_hash_extended(Pointer arg0, int arg1) { + public static long spanset_hash_extended(Pointer arg0, long arg1) { if (!MEOS_AVAILABLE) { throw new UnsupportedOperationException( "spanset_hash_extended requires libmeos — set -Dmobilitykafka.meos.enabled=true"); diff --git a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsTBox.java b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsTBox.java index 2fd6827..4f65f6e 100644 --- a/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsTBox.java +++ b/kafka-streams-app/src/main/java/org/mobilitydb/meos/MeosOpsTBox.java @@ -176,7 +176,7 @@ public static int tbox_hash(Pointer arg0) { *

Object-model role: {@code accessor}.

*

Classification: role=accessor

*/ - public static int tbox_hash_extended(Pointer arg0, int arg1) { + public static long tbox_hash_extended(Pointer arg0, long arg1) { if (!MEOS_AVAILABLE) { throw new UnsupportedOperationException( "tbox_hash_extended requires libmeos — set -Dmobilitykafka.meos.enabled=true"); @@ -400,12 +400,12 @@ public static Pointer tbox_xmin_inc(Pointer arg0) { *

Object-model role: {@code output}.

*

Classification: IO/serialization

*/ - public static String tbox_as_hexwkb(Pointer arg0, byte arg1, Pointer arg2) { + public static String tbox_as_hexwkb(Pointer arg0, byte arg1) { if (!MEOS_AVAILABLE) { throw new UnsupportedOperationException( "tbox_as_hexwkb requires libmeos — set -Dmobilitykafka.meos.enabled=true"); } - return GeneratedFunctions.tbox_as_hexwkb(arg0, arg1, arg2); + return GeneratedFunctions.tbox_as_hexwkb(arg0, arg1); } /** From 6d135f9e2132a061e3eec260d30d2b3b54eba627 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Fri, 10 Jul 2026 13:46:29 +0200 Subject: [PATCH 2/2] Provision MEOS SRID/network reference data for the tests The native build target does not install MEOS's data files. libmeos reads spatial_ref_sys.csv from a fixed default path (/usr/local/share) to resolve SRIDs; when the file is absent it prints "Cannot open the spatial_ref_sys.csv file" to stdout. Inside a surefire fork that raw native write corrupts the fork's encoded channel, so any SRID-touching test (npoint, tgeompoint) aborts the JVM with "The forked VM terminated without properly saying goodbye" even though the test logic is correct. Stage spatial_ref_sys.csv and ways1000.csv into /usr/local/share after the build so SRID resolution succeeds and nothing is written to the fork channel. --- build-jmeos.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/build-jmeos.sh b/build-jmeos.sh index f6a59fb..5c165c3 100755 --- a/build-jmeos.sh +++ b/build-jmeos.sh @@ -115,6 +115,26 @@ LIBMEOS_SO="$(find "${MDB_DIR}/build" -name 'libmeos.so' -print -quit)" [ -n "${LIBMEOS_SO}" ] || { echo "error: libmeos.so not produced by the MEOS build" >&2; exit 1; } log "Built ${LIBMEOS_SO}" +# --------------------------------------------------------------------------- +# 1b. Provision MEOS's SRID/network reference data at its default runtime path. +# --------------------------------------------------------------------------- +# libmeos resolves SRIDs by reading spatial_ref_sys.csv from a fixed default +# path (meos/src/geo/tspatial_transform_meos.c: SPATIAL_REF_SYS_CSV = +# "/usr/local/share/spatial_ref_sys.csv"). A full `cmake --install` would place +# it there (meos/CMakeLists.txt), but this script only builds the `meos` target, +# so the data files are staged explicitly. Without them, any SRID-touching call +# (npoint, tgeompoint) makes libmeos print "Cannot open the spatial_ref_sys.csv +# file" to stdout, which corrupts the surefire fork channel and terminates the +# JVM under test ("The forked VM terminated without properly saying goodbye"). +MEOS_DATA_DIR="${MEOS_DATA_DIR:-/usr/local/share}" +log "Provisioning MEOS reference data into ${MEOS_DATA_DIR}" +provision_data() { + local src="$1" dst="$2" + install -Dm644 "${src}" "${dst}" 2>/dev/null || sudo install -Dm644 "${src}" "${dst}" +} +provision_data "${MDB_DIR}/meos/src/geo/spatial_ref_sys.csv" "${MEOS_DATA_DIR}/spatial_ref_sys.csv" +provision_data "${MDB_DIR}/meos/examples/data/ways1000.csv" "${MEOS_DATA_DIR}/ways1000.csv" + # --------------------------------------------------------------------------- # 2. Build JMEOS.jar against that libmeos.so. # ---------------------------------------------------------------------------