@@ -680,18 +680,15 @@ HnswLoadUnvisitedFromMemory(char *base, HnswElement element, HnswUnvisited * unv
680
680
}
681
681
682
682
/*
683
- * Load unvisited neighbors from disk
683
+ * Load neighbor index TIDs
684
684
*/
685
- static void
686
- HnswLoadUnvisitedFromDisk (HnswElement element , HnswUnvisited * unvisited , int * unvisitedLength , visited_hash * v , Relation index , int m , int lm , int lc )
685
+ static bool
686
+ HnswLoadNeighborTids (HnswElement element , ItemPointerData * indextids , Relation index , int m , int lm , int lc )
687
687
{
688
688
Buffer buf ;
689
689
Page page ;
690
690
HnswNeighborTuple ntup ;
691
691
int start ;
692
- ItemPointerData indextids [HNSW_MAX_M * 2 ];
693
-
694
- * unvisitedLength = 0 ;
695
692
696
693
buf = ReadBuffer (index , element -> neighborPage );
697
694
LockBuffer (buf , BUFFER_LOCK_SHARE );
@@ -703,14 +700,29 @@ HnswLoadUnvisitedFromDisk(HnswElement element, HnswUnvisited * unvisited, int *u
703
700
if (ntup -> count != (element -> level + 2 ) * m )
704
701
{
705
702
UnlockReleaseBuffer (buf );
706
- return ;
703
+ return false ;
707
704
}
708
705
709
706
/* Copy to minimize lock time */
710
707
start = (element -> level - lc ) * m ;
711
- memcpy (& indextids , ntup -> indextids + start , lm * sizeof (ItemPointerData ));
708
+ memcpy (indextids , ntup -> indextids + start , lm * sizeof (ItemPointerData ));
712
709
713
710
UnlockReleaseBuffer (buf );
711
+ return true;
712
+ }
713
+
714
+ /*
715
+ * Load unvisited neighbors from disk
716
+ */
717
+ static void
718
+ HnswLoadUnvisitedFromDisk (HnswElement element , HnswUnvisited * unvisited , int * unvisitedLength , visited_hash * v , Relation index , int m , int lm , int lc )
719
+ {
720
+ ItemPointerData indextids [HNSW_MAX_M * 2 ];
721
+
722
+ * unvisitedLength = 0 ;
723
+
724
+ if (!HnswLoadNeighborTids (element , indextids , index , m , lm , lc ))
725
+ return ;
714
726
715
727
for (int i = 0 ; i < lm ; i ++ )
716
728
{
0 commit comments