mirror of
https://github.com/apache/lucene.git
synced 2025-02-09 11:35:14 +00:00
Make HnswLock and LockedRow final (#13776)
Trivial commit that makes HnswLock final and LockedRow a record. This is general clean up and helps the JIT a little when reasoning about these types - which show quite a bit in indexing and search profiles.
This commit is contained in:
parent
2f7da75b7d
commit
3a8f75ccfc
@ -222,7 +222,7 @@ public class HnswConcurrentMergeBuilder implements HnswBuilder {
|
|||||||
@Override
|
@Override
|
||||||
void graphSeek(HnswGraph graph, int level, int targetNode) {
|
void graphSeek(HnswGraph graph, int level, int targetNode) {
|
||||||
try (HnswLock.LockedRow rowLock = hnswLock.read(level, targetNode)) {
|
try (HnswLock.LockedRow rowLock = hnswLock.read(level, targetNode)) {
|
||||||
NeighborArray neighborArray = rowLock.row;
|
NeighborArray neighborArray = rowLock.row();
|
||||||
if (nodeBuffer == null || nodeBuffer.length < neighborArray.size()) {
|
if (nodeBuffer == null || nodeBuffer.length < neighborArray.size()) {
|
||||||
nodeBuffer = new int[neighborArray.size()];
|
nodeBuffer = new int[neighborArray.size()];
|
||||||
}
|
}
|
||||||
|
@ -339,7 +339,7 @@ public class HnswGraphBuilder implements HnswBuilder {
|
|||||||
int nbr = candidates.nodes()[i];
|
int nbr = candidates.nodes()[i];
|
||||||
if (hnswLock != null) {
|
if (hnswLock != null) {
|
||||||
try (HnswLock.LockedRow rowLock = hnswLock.write(level, nbr)) {
|
try (HnswLock.LockedRow rowLock = hnswLock.write(level, nbr)) {
|
||||||
NeighborArray nbrsOfNbr = rowLock.row;
|
NeighborArray nbrsOfNbr = rowLock.row();
|
||||||
nbrsOfNbr.addAndEnsureDiversity(node, candidates.scores()[i], nbr, scorerSupplier);
|
nbrsOfNbr.addAndEnsureDiversity(node, candidates.scores()[i], nbr, scorerSupplier);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -25,7 +25,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
|
|||||||
* Provide (read-and-write) locked access to rows of an OnHeapHnswGraph. For use by
|
* Provide (read-and-write) locked access to rows of an OnHeapHnswGraph. For use by
|
||||||
* HnswConcurrentMerger and its HnswGraphBuilders.
|
* HnswConcurrentMerger and its HnswGraphBuilders.
|
||||||
*/
|
*/
|
||||||
class HnswLock {
|
final class HnswLock {
|
||||||
private static final int NUM_LOCKS = 512;
|
private static final int NUM_LOCKS = 512;
|
||||||
private final ReentrantReadWriteLock[] locks;
|
private final ReentrantReadWriteLock[] locks;
|
||||||
private final OnHeapHnswGraph graph;
|
private final OnHeapHnswGraph graph;
|
||||||
@ -52,15 +52,7 @@ class HnswLock {
|
|||||||
return new LockedRow(graph.getNeighbors(level, node), lock);
|
return new LockedRow(graph.getNeighbors(level, node), lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
static class LockedRow implements Closeable {
|
record LockedRow(NeighborArray row, Lock lock) implements Closeable {
|
||||||
final Lock lock;
|
|
||||||
final NeighborArray row;
|
|
||||||
|
|
||||||
LockedRow(NeighborArray row, Lock lock) {
|
|
||||||
this.lock = lock;
|
|
||||||
this.row = row;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void close() {
|
public void close() {
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user