@@ -108,7 +108,6 @@ static void qd_connector_config_cleanup_conns(void *context)
108
108
static qd_error_t qd_connector_config_create_connectors (qd_connector_config_t * ctor_config )
109
109
{
110
110
ASSERT_MGMT_THREAD ; // only the mgmt thread can modify the connector list!
111
-
112
111
qd_error_clear ();
113
112
114
113
// The connector configuration for inter-router connections may define a data connection count. This is the number
@@ -282,25 +281,6 @@ qd_connector_t *qd_connector_create(qd_connector_config_t *ctor_config, bool is_
282
281
snprintf (item -> host_port , hplen , "%s:%s" , item -> host , item -> port );
283
282
DEQ_INSERT_TAIL (connector -> conn_info_list , item );
284
283
285
- //
286
- // Set up the vanflow record for this connector (LINK)
287
- // Do this only for router-to-router connectors since the record represents an inter-router link
288
- //
289
- if ((strcmp (ctor_config -> config .role , "inter-router" ) == 0 && !is_data_connector ) ||
290
- strcmp (ctor_config -> config .role , "edge" ) == 0 ||
291
- strcmp (ctor_config -> config .role , "inter-edge" ) == 0 ) {
292
- connector -> vflow_record = vflow_start_record (VFLOW_RECORD_LINK , 0 );
293
- vflow_set_string (connector -> vflow_record , VFLOW_ATTRIBUTE_NAME , ctor_config -> config .name );
294
- vflow_set_string (connector -> vflow_record , VFLOW_ATTRIBUTE_ROLE , ctor_config -> config .role );
295
- vflow_set_uint64 (connector -> vflow_record , VFLOW_ATTRIBUTE_LINK_COST , ctor_config -> config .inter_router_cost );
296
- vflow_set_string (connector -> vflow_record , VFLOW_ATTRIBUTE_OPER_STATUS , "down" );
297
- vflow_set_uint64 (connector -> vflow_record , VFLOW_ATTRIBUTE_DOWN_COUNT , 0 );
298
- vflow_set_string (connector -> vflow_record , VFLOW_ATTRIBUTE_PROTOCOL , item -> scheme );
299
- vflow_set_string (connector -> vflow_record , VFLOW_ATTRIBUTE_DESTINATION_HOST , item -> host );
300
- vflow_set_string (connector -> vflow_record , VFLOW_ATTRIBUTE_DESTINATION_PORT , item -> port );
301
- vflow_set_uint64 (connector -> vflow_record , VFLOW_ATTRIBUTE_OCTETS , 0 );
302
- vflow_set_uint64 (connector -> vflow_record , VFLOW_ATTRIBUTE_OCTETS_REVERSE , 0 );
303
- }
304
284
return connector ;
305
285
}
306
286
@@ -360,8 +340,6 @@ void qd_connector_decref(qd_connector_t* connector)
360
340
assert (connector -> qd_conn == 0 );
361
341
362
342
qd_connector_config_decref (connector -> ctor_config );
363
- vflow_end_record (connector -> vflow_record );
364
- connector -> vflow_record = 0 ;
365
343
qd_timer_free (connector -> reconnect_timer );
366
344
sys_mutex_free (& connector -> lock );
367
345
sys_atomic_destroy (& connector -> ref_count );
@@ -486,8 +464,11 @@ void qd_connector_add_connection(qd_connector_t *connector, qd_connection_t *ctx
486
464
void qd_connector_add_link (qd_connector_t * connector )
487
465
{
488
466
if (!connector -> is_data_connector ) {
489
- vflow_set_string (connector -> vflow_record , VFLOW_ATTRIBUTE_OPER_STATUS , "up" );
490
- vflow_set_timestamp_now (connector -> vflow_record , VFLOW_ATTRIBUTE_UP_TIMESTAMP );
467
+ qd_connector_config_t * ctor_config = connector -> ctor_config ;
468
+ if (ctor_config && ctor_config -> vflow_record ) {
469
+ vflow_set_string (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_OPER_STATUS , "up" );
470
+ vflow_set_timestamp_now (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_UP_TIMESTAMP );
471
+ }
491
472
connector -> oper_status_down = false;
492
473
}
493
474
}
@@ -504,11 +485,14 @@ void qd_connector_remove_connection(qd_connector_t *connector, bool final, const
504
485
qd_connection_t * ctx = connector -> qd_conn ;
505
486
if (!connector -> is_data_connector && !connector -> oper_status_down && !final ) {
506
487
connector -> oper_status_down = true;
507
- vflow_set_string (connector -> vflow_record , VFLOW_ATTRIBUTE_OPER_STATUS , "down" );
508
- vflow_inc_counter (connector -> vflow_record , VFLOW_ATTRIBUTE_DOWN_COUNT , 1 );
509
- vflow_set_timestamp_now (connector -> vflow_record , VFLOW_ATTRIBUTE_DOWN_TIMESTAMP );
510
- vflow_set_string (connector -> vflow_record , VFLOW_ATTRIBUTE_RESULT , condition_name ? condition_name : "unknown" );
511
- vflow_set_string (connector -> vflow_record , VFLOW_ATTRIBUTE_REASON , condition_description ? condition_description : "" );
488
+ qd_connector_config_t * ctor_config = connector -> ctor_config ;
489
+ if (ctor_config && ctor_config -> vflow_record ) {
490
+ vflow_set_string (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_OPER_STATUS , "down" );
491
+ vflow_inc_counter (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_DOWN_COUNT , 1 );
492
+ vflow_set_timestamp_now (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_DOWN_TIMESTAMP );
493
+ vflow_set_string (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_RESULT , condition_name ? condition_name : "unknown" );
494
+ vflow_set_string (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_REASON , condition_description ? condition_description : "" );
495
+ }
512
496
}
513
497
connector -> qd_conn = 0 ;
514
498
ctx -> connector = 0 ;
@@ -660,6 +644,7 @@ qd_connector_config_t *qd_connector_config_create(qd_dispatch_t *qd, qd_entity_t
660
644
661
645
const bool is_inter_router = strcmp (ctor_config -> config .role , "inter-router" ) == 0 ;
662
646
const bool is_edge = strcmp (ctor_config -> config .role , "edge" ) == 0 ;
647
+ const bool is_inter_edge = strcmp (ctor_config -> config .role , "inter-edge" ) == 0 ;
663
648
664
649
//
665
650
// If an sslProfile is configured allocate a TLS config to be used by all child connector's connections
@@ -681,9 +666,25 @@ qd_connector_config_t *qd_connector_config_create(qd_dispatch_t *qd, qd_entity_t
681
666
handle_connector_ssl_profile_mgmt_update );
682
667
}
683
668
}
684
-
669
+ if (is_inter_router || is_edge || is_inter_edge ) {
670
+ ctor_config -> vflow_record = vflow_start_record (VFLOW_RECORD_LINK , 0 );
671
+ vflow_set_string (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_NAME , ctor_config -> config .name );
672
+ vflow_set_string (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_ROLE , ctor_config -> config .role );
673
+ vflow_set_uint64 (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_LINK_COST , ctor_config -> config .inter_router_cost );
674
+ vflow_set_string (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_OPER_STATUS , "down" );
675
+ vflow_set_uint64 (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_DOWN_COUNT , 0 );
676
+ if (ctor_config -> config .ssl_required ) {
677
+ vflow_set_string (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_PROTOCOL , "amqps" );
678
+ } else {
679
+ vflow_set_string (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_PROTOCOL , "amqp" );
680
+ }
681
+ vflow_set_string (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_DESTINATION_PORT , ctor_config -> config .port );
682
+ vflow_set_uint64 (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_OCTETS , 0 );
683
+ vflow_set_uint64 (ctor_config -> vflow_record , VFLOW_ATTRIBUTE_OCTETS_REVERSE , 0 );
684
+ }
685
+ //
685
686
// For inter-router connectors generate a group correlator and configure the data connection count
686
-
687
+ //
687
688
if (is_inter_router ) {
688
689
qd_generate_discriminator (ctor_config -> group_correlator );
689
690
ctor_config -> data_connection_count = qd_dispatch_get_data_connection_count (qd );
@@ -739,6 +740,11 @@ void qd_connector_config_decref(qd_connector_config_t *ctor_config)
739
740
assert (rc > 0 ); // else underflow
740
741
741
742
if (rc == 1 ) {
743
+ if (ctor_config -> vflow_record ) {
744
+ vflow_end_record (ctor_config -> vflow_record );
745
+ ctor_config -> vflow_record = 0 ;
746
+ }
747
+
742
748
// Expect: all connectors hold the ref_count so this must be empty
743
749
assert (DEQ_IS_EMPTY (ctor_config -> connectors ));
744
750
0 commit comments