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