From 73240c0c716d8ac2dd3a145ec090036e351d065a Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 18 Mar 2026 21:59:54 +0000
Subject: [PATCH 1/4] Update diskann-garnet from v1.0.23 to v1.0.25 with new
metric_type parameter in create_index FFI
Co-authored-by: hailangx <3389245+hailangx@users.noreply.github.com>
---
Directory.Packages.props | 2 +-
libs/server/Resp/Vector/DiskANNService.cs | 5 ++---
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 971d5960e27..cd7546526c3 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -32,6 +32,6 @@
-
+
\ No newline at end of file
diff --git a/libs/server/Resp/Vector/DiskANNService.cs b/libs/server/Resp/Vector/DiskANNService.cs
index 37c7ace6c31..e22d9cf192e 100644
--- a/libs/server/Resp/Vector/DiskANNService.cs
+++ b/libs/server/Resp/Vector/DiskANNService.cs
@@ -34,11 +34,9 @@ public nint CreateIndex(
delegate* unmanaged[Cdecl] readModifyWriteCallback
)
{
- // TODO: actually pass distance metric
-
unsafe
{
- return NativeDiskANNMethods.create_index(context, dimensions, reduceDims, quantType, buildExplorationFactor, numLinks, (nint)readCallback, (nint)writeCallback, (nint)deleteCallback, (nint)readModifyWriteCallback);
+ return NativeDiskANNMethods.create_index(context, dimensions, reduceDims, quantType, (int)distanceMetric, buildExplorationFactor, numLinks, (nint)readCallback, (nint)writeCallback, (nint)deleteCallback, (nint)readModifyWriteCallback);
}
}
@@ -308,6 +306,7 @@ public static partial nint create_index(
uint dimensions,
uint reduceDims,
VectorQuantType quantType,
+ int metricType,
uint buildExplorationFactor,
uint numLinks,
nint readCallback,
From 0f1efb30f5ac7fe79a2e71baa06c64846ce5c6d9 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 18 Mar 2026 22:45:35 +0000
Subject: [PATCH 2/4] Add null check on create_index return value, throw
GarnetException if null
Co-authored-by: hailangx <3389245+hailangx@users.noreply.github.com>
---
libs/server/Resp/Vector/DiskANNService.cs | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/libs/server/Resp/Vector/DiskANNService.cs b/libs/server/Resp/Vector/DiskANNService.cs
index e22d9cf192e..439d8a50214 100644
--- a/libs/server/Resp/Vector/DiskANNService.cs
+++ b/libs/server/Resp/Vector/DiskANNService.cs
@@ -5,6 +5,7 @@
using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
+using Garnet.common;
using Tsavorite.core;
namespace Garnet.server
@@ -36,7 +37,13 @@ public nint CreateIndex(
{
unsafe
{
- return NativeDiskANNMethods.create_index(context, dimensions, reduceDims, quantType, (int)distanceMetric, buildExplorationFactor, numLinks, (nint)readCallback, (nint)writeCallback, (nint)deleteCallback, (nint)readModifyWriteCallback);
+ var index = NativeDiskANNMethods.create_index(context, dimensions, reduceDims, quantType, (int)distanceMetric, buildExplorationFactor, numLinks, (nint)readCallback, (nint)writeCallback, (nint)deleteCallback, (nint)readModifyWriteCallback);
+ if (index == nint.Zero)
+ {
+ throw new GarnetException("Failed to create DiskANN index, native create_index returned null");
+ }
+
+ return index;
}
}
From 5cad13457fd8aaf3821f542d588e129d1fd4ed94 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 18 Mar 2026 22:51:15 +0000
Subject: [PATCH 3/4] Fix DiskANNServiceTests to pass new metricType parameter
to create_index
Co-authored-by: hailangx <3389245+hailangx@users.noreply.github.com>
---
global.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/global.json b/global.json
index 3462d015963..4155c97b1fa 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "10.0.103",
+ "version": "10.0.102",
"rollForward": "latestMajor",
"allowPrerelease": false
}
From beff58dd9f205b57512aee3eb71115c0f2e51793 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 18 Mar 2026 22:54:08 +0000
Subject: [PATCH 4/4] Fix DiskANNServiceTests: add metricType parameter to
create_index calls
Co-authored-by: hailangx <3389245+hailangx@users.noreply.github.com>
---
global.json | 2 +-
test/Garnet.test/DiskANN/DiskANNServiceTests.cs | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/global.json b/global.json
index 4155c97b1fa..3462d015963 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,6 @@
{
"sdk": {
- "version": "10.0.102",
+ "version": "10.0.103",
"rollForward": "latestMajor",
"allowPrerelease": false
}
diff --git a/test/Garnet.test/DiskANN/DiskANNServiceTests.cs b/test/Garnet.test/DiskANN/DiskANNServiceTests.cs
index 43171efc53e..f9ed2e53113 100644
--- a/test/Garnet.test/DiskANN/DiskANNServiceTests.cs
+++ b/test/Garnet.test/DiskANN/DiskANNServiceTests.cs
@@ -170,7 +170,7 @@ unsafe byte ReadModifyWriteCallback(ulong context, nint keyData, nuint keyLength
var deleteFuncPtr = Marshal.GetFunctionPointerForDelegate(deleteDel);
var rmwFuncPtr = Marshal.GetFunctionPointerForDelegate(rmwDel);
- var rawIndex = NativeDiskANNMethods.create_index(Context, 75, 0, VectorQuantType.XPreQ8, 10, 10, readFuncPtr, writeFuncPtr, deleteFuncPtr, rmwFuncPtr);
+ var rawIndex = NativeDiskANNMethods.create_index(Context, 75, 0, VectorQuantType.XPreQ8, (int)VectorDistanceMetricType.Cosine, 10, 10, readFuncPtr, writeFuncPtr, deleteFuncPtr, rmwFuncPtr);
Span id = [0, 1, 2, 3];
Span elem = Enumerable.Range(0, 75).Select(static x => (byte)x).ToArray();
@@ -365,7 +365,7 @@ unsafe byte ReadModifyWriteCallback(ulong context, nint keyData, nuint keyLength
var deleteFuncPtr = Marshal.GetFunctionPointerForDelegate(deleteDel);
var rmwFuncPtr = Marshal.GetFunctionPointerForDelegate(rmwDel);
- var rawIndex = NativeDiskANNMethods.create_index(Context, 75, 0, VectorQuantType.XPreQ8, 10, 10, readFuncPtr, writeFuncPtr, deleteFuncPtr, rmwFuncPtr);
+ var rawIndex = NativeDiskANNMethods.create_index(Context, 75, 0, VectorQuantType.XPreQ8, (int)VectorDistanceMetricType.Cosine, 10, 10, readFuncPtr, writeFuncPtr, deleteFuncPtr, rmwFuncPtr);
Span id = [0, 1, 2, 3];
Span elem = Enumerable.Range(0, 75).Select(static x => (byte)x).ToArray();
@@ -410,7 +410,7 @@ unsafe byte ReadModifyWriteCallback(ulong context, nint keyData, nuint keyLength
{
NativeDiskANNMethods.drop_index(Context, rawIndex);
- rawIndex = NativeDiskANNMethods.create_index(Context, 75, 0, VectorQuantType.XPreQ8, 10, 10, readFuncPtr, writeFuncPtr, deleteFuncPtr, rmwFuncPtr);
+ rawIndex = NativeDiskANNMethods.create_index(Context, 75, 0, VectorQuantType.XPreQ8, (int)VectorDistanceMetricType.Cosine, 10, 10, readFuncPtr, writeFuncPtr, deleteFuncPtr, rmwFuncPtr);
}
// Search value