@@ -410,6 +410,43 @@ static int read_file_string(const char *fn, char **out)
410
410
return NEU_ERR_FAILURE ;
411
411
}
412
412
413
+ // file tree walking callback for collecting adapter group config infos
414
+ static int read_group_config_cb (const char * fpath , bool is_dir , void * arg )
415
+ {
416
+ vector_t * group_config_infos = arg ;
417
+ int rv = 0 ;
418
+
419
+ if (is_dir ) {
420
+ return 0 ;
421
+ }
422
+
423
+ char * json_str = NULL ;
424
+ rv = read_file_string (fpath , & json_str );
425
+ if (0 != rv ) {
426
+ return rv ;
427
+ }
428
+
429
+ neu_json_group_configs_req_t * group_config_req = NULL ;
430
+ rv = neu_json_decode_group_configs_req (json_str , & group_config_req );
431
+ free (json_str );
432
+ if (0 != rv ) {
433
+ return rv ;
434
+ }
435
+
436
+ log_info ("read %s" , fpath );
437
+
438
+ if (0 == vector_push_back (group_config_infos , group_config_req )) {
439
+ // NOTE: do not call neu_json_decode_group_configs_req_free,
440
+ // since member ownership was transferred to vector
441
+ free (group_config_req );
442
+ } else {
443
+ neu_json_decode_group_configs_req_free (group_config_req );
444
+ rv = NEU_ERR_ENOMEM ;
445
+ }
446
+
447
+ return rv ;
448
+ }
449
+
413
450
typedef struct neu_persister {
414
451
const char * persist_dir ;
415
452
const char * adapters_fname ;
@@ -841,48 +878,30 @@ int neu_persister_store_group_config(
841
878
842
879
int neu_persister_load_group_configs (neu_persister_t * persister ,
843
880
const char * adapter_name ,
844
- const char * group_config_name ,
845
881
vector_t * * group_config_infos )
846
882
{
847
- char * group_configs = NULL ;
883
+ char path [ PATH_MAX_SIZE ] = { 0 } ;
848
884
849
- char group_config_file [128 ] = { 0 };
850
- int rv = snprintf (group_config_file , 128 , "%s/persist/%s/group_configs/%s" ,
851
- persister -> persist_dir , adapter_name , group_config_name );
852
- if (sizeof (group_config_file ) == rv ) {
853
- log_error ("group_config_file exceeds maximum value" );
885
+ int n = persister_group_configs_dir (path , sizeof (path ), persister ,
886
+ adapter_name );
887
+ if (sizeof (path ) == n ) {
888
+ log_error ("persister path too long: %s" , path );
854
889
return -1 ;
855
890
}
856
891
857
- rv = read_file_string ( group_config_file , & group_configs );
858
- if (rv != 0 ) {
859
- return rv ;
892
+ vector_t * result = vector_new ( 0 , sizeof ( neu_persist_group_config_info_t ) );
893
+ if (NULL == result ) {
894
+ return NEU_ERR_ENOMEM ;
860
895
}
861
896
862
- neu_json_group_configs_req_t * group_config_req = NULL ;
863
- rv = neu_json_decode_group_configs_req (group_configs , & group_config_req );
864
- if (rv != 0 ) {
865
- return rv ;
897
+ int rv = file_tree_walk (path , read_group_config_cb , result );
898
+ if (0 == rv ) {
899
+ * group_config_infos = result ;
900
+ } else {
901
+ neu_persist_group_config_infos_free (result );
866
902
}
867
903
868
- // vector_t *vec = vector_new_move_from_buf(
869
- // group_config_req->datatag_names, group_config_req->datatag_names,
870
- // group_config_req->group_config_name,
871
- // group_config_req->n_datatag_name, group_config_req->read_interval,
872
- // sizeof(neu_persist_group_config_info_t));
873
- // if (vec == NULL) {
874
- // return -1;
875
- // }
876
-
877
- // *group_config_infos = vec;
878
- // group_config_req->adapter_name = NULL;
879
- // group_config_req->datatag_names = NULL;
880
- // group_config_req->group_config_name = NULL;
881
- // group_config_req->n_datatag_name = 0;
882
- // group_config_req->read_interval = 0;
883
-
884
- neu_json_decode_group_configs_req_free (group_config_req );
885
- return 0 ;
904
+ return rv ;
886
905
}
887
906
888
907
int neu_persister_delete_group_config (neu_persister_t * persister ,
0 commit comments