Skip to content

Commit 568a878

Browse files
committed
properly initialize vector indexer
1 parent 94563e4 commit 568a878

3 files changed

Lines changed: 75 additions & 54 deletions

File tree

src/apps/hnsw/coordinator/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use ahash::HashSet;
77
use bifrost::{
88
conshash::ConsistentHashing,
99
dispatch_rpc_service_functions,
10-
1110
raft::client::RaftClient,
1211
rpc::cluster::{
1312
all_server_ids, broadcast_to_members, broadcast_with_server_ids, client_by_server_id,

src/apps/hnsw/mod.rs

Lines changed: 74 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -8,26 +8,16 @@ use futures::{
88
TryFutureExt,
99
};
1010
use neb::{
11-
index::{
12-
builder::IndexError,
13-
vector::{set_vector_index_core, VectorIndexerCore},
14-
},
15-
11+
index::{builder::IndexError, vector::VectorIndexerCore},
1612
server::NebServer,
1713
};
1814

19-
20-
use crate::{
21-
apps::hnsw::coordinator::AsyncServiceClient,
22-
server::MorpheusServer,
23-
};
24-
use neb::index::vector::MetricEncoding;
25-
use dovahkiin::types::OwnedValue;
15+
use crate::{apps::hnsw::coordinator::AsyncServiceClient, server::MorpheusServer};
2616
use dovahkiin::types::Map;
17+
use dovahkiin::types::OwnedValue;
18+
use neb::index::vector::MetricEncoding;
2719
use neb::ram::types::OwnedPrimArray;
2820

29-
30-
3121
pub mod coordinator;
3222
pub mod measurements;
3323
pub mod partition;
@@ -87,8 +77,8 @@ impl VectorIndexerCore for VectorIndexer {
8777
self.coordinator
8878
.del_cell(*cell_id)
8979
.map_err(IndexError::RPCError)
90-
.and_then(|r| async move {
91-
//r.map_err(IndexError::Other)
80+
.and_then(|r| async move {
81+
//r.map_err(IndexError::Other)
9282
Ok(()) // Do not output index deletion errors
9383
})
9484
.boxed()
@@ -128,13 +118,19 @@ impl VectorIndexer {
128118
}
129119
}
130120

131-
pub fn set_core(self) {
132-
set_vector_index_core(self);
121+
pub fn set_core(self, neb_server: &NebServer) {
122+
neb_server
123+
.indexer
124+
.as_ref()
125+
.unwrap()
126+
.clients
127+
.vector_client
128+
.set_vector_index_core(self);
133129
}
134130

135131
pub async fn new_and_set_core(morph: &MorpheusServer) {
136132
let indexer = Self::new(morph).await;
137-
indexer.set_core();
133+
indexer.set_core(&morph.neb_server);
138134
}
139135

140136
pub fn set_ef_construction(&mut self, ef_construction: u64) {
@@ -147,8 +143,18 @@ unsafe impl Sync for VectorIndexer {}
147143

148144
#[cfg(test)]
149145
mod e2e_tests {
150-
use dovahkiin::{data_map, types::{OwnedPrimArray, Type}};
151-
use neb::{index::vector::{self, MetricEncoding}, ram::{cell::OwnedCell, schema::{Field, IndexType, Schema}, types::RandValue}};
146+
use dovahkiin::{
147+
data_map,
148+
types::{OwnedPrimArray, Type},
149+
};
150+
use neb::{
151+
index::vector::{self, MetricEncoding},
152+
ram::{
153+
cell::OwnedCell,
154+
schema::{Field, IndexType, Schema},
155+
types::RandValue,
156+
},
157+
};
152158

153159
use crate::{apps::hnsw::coordinator::Service, tests::start_server};
154160

@@ -159,46 +165,66 @@ mod e2e_tests {
159165
const CELL_SCHEMA_ID: u32 = 123;
160166

161167
#[tokio::test]
162-
async fn test_e2e() {
163-
let server = start_server(5010, "vector_indexer_e2e_test").await.unwrap();
168+
async fn single_cell() {
169+
let server = start_server(5910, "vector_indexer_e2e_test").await.unwrap();
164170
let _partition = server.init_hnsw_index_partition_service().await.unwrap();
165171
let coordinator = server.init_hnsw_index_service().await.unwrap();
166172
let indexer = VectorIndexer::new(&server).await;
167-
indexer.set_core();
168-
assert!(vector::is_vector_index_core_set());
173+
indexer.set_core(&server.neb_server);
174+
assert!(server
175+
.neb_server
176+
.indexer
177+
.as_ref()
178+
.unwrap()
179+
.clients
180+
.vector_client
181+
.is_vector_index_core_set());
169182

170183
let neb_client = server.neb_client.clone();
171184
let cell_schema = Schema::new_with_id(
172-
CELL_SCHEMA_ID, "test_schema", None,
173-
Field::new_schema(
174-
vec![
175-
Field::new_indexed_array(
176-
VECTOR,
177-
Type::F32,
178-
vec![IndexType::Vector(MetricEncoding::L2)]
179-
)
180-
]
181-
),
182-
false, false
185+
CELL_SCHEMA_ID,
186+
"test_schema",
187+
None,
188+
Field::new_schema(vec![Field::new_indexed_array(
189+
VECTOR,
190+
Type::F32,
191+
vec![IndexType::Vector(MetricEncoding::L2)],
192+
)]),
193+
false,
194+
false,
183195
);
184-
neb_client.new_schema_with_id(cell_schema).await.unwrap().unwrap();
196+
neb_client
197+
.new_schema_with_id(cell_schema)
198+
.await
199+
.unwrap()
200+
.unwrap();
185201
let cell_id = Id::rand();
186202
let vector1 = vec![1.0, 2.0, 3.0];
187203
let map = data_map!(VECTOR: OwnedValue::PrimArray(OwnedPrimArray::F32(vector1.clone())));
188204
let cell1 = OwnedCell::new_with_id(CELL_SCHEMA_ID, &cell_id, OwnedValue::Map(map));
189-
assert!(vector::is_vector_index_core_set());
205+
assert!(server
206+
.neb_server
207+
.indexer
208+
.as_ref()
209+
.unwrap()
210+
.clients
211+
.vector_client
212+
.is_vector_index_core_set());
190213
neb_client.write_cell(cell1).await.unwrap().unwrap();
191-
let query = coordinator.query_top_k(
192-
CELL_SCHEMA_ID,
193-
VECTOR_FIELD_ID,
194-
OwnedPrimArray::F32(vector1),
195-
10,
196-
32,
197-
10,
198-
MetricEncoding::L2
199-
).await.unwrap();
214+
let query = coordinator
215+
.query_top_k(
216+
CELL_SCHEMA_ID,
217+
VECTOR_FIELD_ID,
218+
OwnedPrimArray::F32(vector1),
219+
10,
220+
32,
221+
10,
222+
MetricEncoding::L2,
223+
)
224+
.await
225+
.unwrap();
200226
assert_eq!(query.len(), 1);
201227
assert_eq!(query[0].0, cell_id);
202228
assert_eq!(query[0].1, 0.0);
203229
}
204-
}
230+
}

src/apps/hnsw/partition/search.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,21 @@ use std::{
88

99
use ahash::{AHashSet, HashMap};
1010
use bifrost::{conshash::ConsistentHashing, raft::client::RaftClient};
11-
use dovahkiin::types::{Map as DovMap};
11+
use dovahkiin::types::Map as DovMap;
1212
use dovahkiin::{
1313
data_map,
1414
types::{Id, OwnedPrimArray, SharedValue},
1515
};
1616
use lightning::map::Map;
1717
use lightning::map::PtrHashMap;
18-
use log4rs::append;
1918
use neb::{
2019
index::{ranged::trees::Ordering, IndexerClients},
2120
query::data_client::IndexedDataClient,
2221
ram::{
23-
cell::{Cell, OwnedCell},
2422
chunk::Chunks,
2523
types::RandId,
2624
},
2725
};
28-
use parking_lot::RwLock;
29-
use rand::{seq::SliceRandom, Rng};
3026

3127
use crate::{
3228
apps::hnsw::measurements::{vector_distance, HnswMetric, Metric, MetricEncoding},

0 commit comments

Comments
 (0)