@@ -190,6 +190,19 @@ namespace_t *namespace_ensure(namespace_t *namespace) {
190
190
return namespace ;
191
191
}
192
192
193
+ // lazy load a namespace
194
+ // this just populate data and index from disk
195
+ // based on an existing namespace object
196
+ // this can be used to load and reload a namespace
197
+ static int namespace_load_lazy (ns_root_t * nsroot , namespace_t * namespace ) {
198
+ // now, we are sure the namespace exists, but it's maybe empty
199
+ // let's call index and data initializer, they will take care about that
200
+ namespace -> index = index_init (nsroot -> settings , namespace -> indexpath , namespace , nsroot -> branches );
201
+ namespace -> data = data_init (nsroot -> settings , namespace -> datapath , namespace -> index -> indexid );
202
+
203
+ return 0 ;
204
+ }
205
+
193
206
// load (or create if it doesn't exists) a namespace
194
207
static namespace_t * namespace_load (ns_root_t * nsroot , char * name ) {
195
208
namespace_t * namespace ;
@@ -212,12 +225,9 @@ static namespace_t *namespace_load(ns_root_t *nsroot, char *name) {
212
225
if (!namespace_ensure (namespace ))
213
226
return NULL ;
214
227
228
+ // load data from disk
215
229
namespace_descriptor_load (namespace );
216
-
217
- // now, we are sure the namespace exists, but it's maybe empty
218
- // let's call index and data initializer, they will take care about that
219
- namespace -> index = index_init (nsroot -> settings , namespace -> indexpath , namespace , nsroot -> branches );
220
- namespace -> data = data_init (nsroot -> settings , namespace -> datapath , namespace -> index -> indexid );
230
+ namespace_load_lazy (nsroot , namespace );
221
231
222
232
return namespace ;
223
233
}
@@ -448,6 +458,22 @@ static void namespace_kick_slot(namespace_t *namespace) {
448
458
}
449
459
}
450
460
461
+ int namespace_reload (namespace_t * namespace ) {
462
+ debug ("[+] namespace: reloading: %s\n" , namespace -> name );
463
+
464
+ debug ("[+] namespace: reload: cleaning index\n" );
465
+ index_clean_namespace (namespace -> index , namespace );
466
+
467
+ debug ("[+] namespace: reload: destroying objects\n" )
468
+ index_destroy (namespace -> index );
469
+ data_destroy (namespace -> data );
470
+
471
+ debug ("[+] namespace: reload: reloading data\n" );
472
+ namespace_load_lazy (nsroot , namespace );
473
+
474
+ return 0 ;
475
+ }
476
+
451
477
//
452
478
// delete (clean and remove files) a namespace
453
479
//
0 commit comments