<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-trx/+/19306">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Hoernchen: Looks good to me, approved
  laforge: Looks good to me, approved
  fixeria: Looks good to me, but someone else must approve
  pespin: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Introduce CTR log category<br><br>This way i most usual rate_ctr related internal logging is disabled by default<br>(notice), and it can b eeasily enabled by switching the category to info<br>or debug.<br><br>Change-Id: Id6c36432da7e7ce673c585bcae6772a695028ec5<br>---<br>M CommonLibs/debug.c<br>M CommonLibs/debug.h<br>M CommonLibs/trx_rate_ctr.cpp<br>3 files changed, 26 insertions(+), 19 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/CommonLibs/debug.c b/CommonLibs/debug.c</span><br><span>index b33476e..7ee8184 100644</span><br><span>--- a/CommonLibs/debug.c</span><br><span>+++ b/CommonLibs/debug.c</span><br><span>@@ -81,6 +81,12 @@</span><br><span>             .color = NULL,</span><br><span>               .enabled = 1, .loglevel = LOGL_NOTICE,</span><br><span>       },</span><br><span style="color: hsl(120, 100%, 40%);">+    [DCTR] = {</span><br><span style="color: hsl(120, 100%, 40%);">+            .name = "DCTR",</span><br><span style="color: hsl(120, 100%, 40%);">+             .description = "Rate counter related logging",</span><br><span style="color: hsl(120, 100%, 40%);">+              .color = NULL,</span><br><span style="color: hsl(120, 100%, 40%);">+                .enabled = 1, .loglevel = LOGL_NOTICE,</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span> };</span><br><span> </span><br><span> const struct log_info log_info = {</span><br><span>diff --git a/CommonLibs/debug.h b/CommonLibs/debug.h</span><br><span>index 8d70155..dd78168 100644</span><br><span>--- a/CommonLibs/debug.h</span><br><span>+++ b/CommonLibs/debug.h</span><br><span>@@ -16,6 +16,7 @@</span><br><span>  DTRXDUL,</span><br><span>     DDEV,</span><br><span>        DDEVDRV,</span><br><span style="color: hsl(120, 100%, 40%);">+      DCTR,</span><br><span> };</span><br><span> </span><br><span> pid_t my_gettid(void);</span><br><span>diff --git a/CommonLibs/trx_rate_ctr.cpp b/CommonLibs/trx_rate_ctr.cpp</span><br><span>index f12e4e3..1f44404 100644</span><br><span>--- a/CommonLibs/trx_rate_ctr.cpp</span><br><span>+++ b/CommonLibs/trx_rate_ctr.cpp</span><br><span>@@ -135,12 +135,12 @@</span><br><span> static int dev_rate_ctr_timerfd_cb(struct osmo_fd *ofd, unsigned int what) {</span><br><span>   size_t chan;</span><br><span>         struct rate_ctr *ctr;</span><br><span style="color: hsl(0, 100%, 40%);">-   LOGC(DMAIN, INFO) << "Main thread is updating Device counters";</span><br><span style="color: hsl(120, 100%, 40%);">+       LOGC(DCTR, INFO) << "Main thread is updating Device counters";</span><br><span>       dev_rate_ctr_mutex.lock();</span><br><span>   for (chan = 0; chan < chan_len; chan++) {</span><br><span>                 if (dev_ctrs_pending[chan].chan == PENDING_CHAN_NONE)</span><br><span>                        continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGCHAN(chan, DMAIN, DEBUG) << "rate_ctr update";</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGCHAN(chan, DCTR, DEBUG) << "rate_ctr update";</span><br><span>             ctr = &rate_ctrs[chan]->ctr[TRX_CTR_DEV_RX_OVERRUNS];</span><br><span>                 rate_ctr_add(ctr, dev_ctrs_pending[chan].rx_overruns - ctr->current);</span><br><span>             ctr = &rate_ctrs[chan]->ctr[TRX_CTR_DEV_TX_UNDERRUNS];</span><br><span>@@ -158,7 +158,7 @@</span><br><span>          dev_ctrs_pending[chan].chan = PENDING_CHAN_NONE;</span><br><span>     }</span><br><span>    if (osmo_timerfd_disable(&dev_rate_ctr_timerfd) < 0)</span><br><span style="color: hsl(0, 100%, 40%);">-             LOGC(DMAIN, ERROR) << "Failed to disable timerfd";</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGC(DCTR, ERROR) << "Failed to disable timerfd";</span><br><span>    dev_rate_ctr_mutex.unlock();</span><br><span>         return 0;</span><br><span> }</span><br><span>@@ -166,12 +166,12 @@</span><br><span> static int trx_rate_ctr_timerfd_cb(struct osmo_fd *ofd, unsigned int what) {</span><br><span>       size_t chan;</span><br><span>         struct rate_ctr *ctr;</span><br><span style="color: hsl(0, 100%, 40%);">-   LOGC(DMAIN, INFO) << "Main thread is updating Transceiver counters";</span><br><span style="color: hsl(120, 100%, 40%);">+  LOGC(DCTR, INFO) << "Main thread is updating Transceiver counters";</span><br><span>  trx_rate_ctr_mutex.lock();</span><br><span>   for (chan = 0; chan < chan_len; chan++) {</span><br><span>                 if (trx_ctrs_pending[chan].chan == PENDING_CHAN_NONE)</span><br><span>                        continue;</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGCHAN(chan, DMAIN, DEBUG) << "rate_ctr update";</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGCHAN(chan, DCTR, DEBUG) << "rate_ctr update";</span><br><span>             ctr = &rate_ctrs[chan]->ctr[TRX_CTR_TRX_TX_STALE_BURSTS];</span><br><span>             rate_ctr_add(ctr, trx_ctrs_pending[chan].tx_stale_bursts - ctr->current);</span><br><span>                 ctr = &rate_ctrs[chan]->ctr[TRX_CTR_TRX_TX_UNAVAILABLE_BURSTS];</span><br><span>@@ -186,7 +186,7 @@</span><br><span>                 trx_ctrs_pending[chan].chan = PENDING_CHAN_NONE;</span><br><span>     }</span><br><span>    if (osmo_timerfd_disable(&trx_rate_ctr_timerfd) < 0)</span><br><span style="color: hsl(0, 100%, 40%);">-             LOGC(DMAIN, ERROR) << "Failed to disable timerfd";</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGC(DCTR, ERROR) << "Failed to disable timerfd";</span><br><span>    trx_rate_ctr_mutex.unlock();</span><br><span>         return 0;</span><br><span> }</span><br><span>@@ -206,21 +206,21 @@</span><br><span>       switch (signal) {</span><br><span>    case S_DEVICE_COUNTER_CHANGE:</span><br><span>                dev_ctr = (struct device_counters *)signal_data;</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGCHAN(dev_ctr->chan, DMAIN, INFO) << "Received counter change from radioDevice";</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGCHAN(dev_ctr->chan, DCTR, INFO) << "Received counter change from radioDevice";</span><br><span>                 dev_rate_ctr_mutex.lock();</span><br><span>           dev_ctrs_pending[dev_ctr->chan] = *dev_ctr;</span><br><span>               if (osmo_timerfd_schedule(&dev_rate_ctr_timerfd, &next_sched, &intv_sched) < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        LOGC(DMAIN, ERROR) << "Failed to schedule timerfd: " << errno << " = "<< strerror(errno);</span><br><span style="color: hsl(120, 100%, 40%);">+                 LOGC(DCTR, ERROR) << "Failed to schedule timerfd: " << errno << " = "<< strerror(errno);</span><br><span>                 }</span><br><span>            dev_rate_ctr_mutex.unlock();</span><br><span>                 break;</span><br><span>       case S_TRX_COUNTER_CHANGE:</span><br><span>           trx_ctr = (struct trx_counters *)signal_data;</span><br><span style="color: hsl(0, 100%, 40%);">-           LOGCHAN(trx_ctr->chan, DMAIN, INFO) << "Received counter change from Transceiver";</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGCHAN(trx_ctr->chan, DCTR, INFO) << "Received counter change from Transceiver";</span><br><span>                 trx_rate_ctr_mutex.lock();</span><br><span>           trx_ctrs_pending[trx_ctr->chan] = *trx_ctr;</span><br><span>               if (osmo_timerfd_schedule(&trx_rate_ctr_timerfd, &next_sched, &intv_sched) < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        LOGC(DMAIN, ERROR) << "Failed to schedule timerfd: " << errno << " = "<< strerror(errno);</span><br><span style="color: hsl(120, 100%, 40%);">+                 LOGC(DCTR, ERROR) << "Failed to schedule timerfd: " << errno << " = "<< strerror(errno);</span><br><span>                 }</span><br><span>            trx_rate_ctr_mutex.unlock();</span><br><span>                 break;</span><br><span>@@ -247,15 +247,15 @@</span><br><span>       struct ctr_threshold *ctr_thr;</span><br><span>       struct rate_ctr *rate_ctr;</span><br><span>   size_t chan;</span><br><span style="color: hsl(0, 100%, 40%);">-    LOGC(DMAIN, DEBUG) << "threshold_timer_cb fired!";</span><br><span style="color: hsl(120, 100%, 40%);">+    LOGC(DCTR, DEBUG) << "threshold_timer_cb fired!";</span><br><span> </span><br><span>        llist_for_each_entry(ctr_thr, &threshold_list, list) {</span><br><span>           for (chan = 0; chan < chan_len; chan++) {</span><br><span>                         rate_ctr = &rate_ctrs[chan]->ctr[ctr_thr->ctr_id];</span><br><span style="color: hsl(0, 100%, 40%);">-                    LOGCHAN(chan, DMAIN, INFO) << "checking threshold: " << ctr_threshold_2_vty_str(ctr_thr)</span><br><span style="color: hsl(120, 100%, 40%);">+                        LOGCHAN(chan, DCTR, INFO) << "checking threshold: " << ctr_threshold_2_vty_str(ctr_thr)</span><br><span>                                                   << " ("<< rate_ctr->intv[ctr_thr->intv].rate << " vs " << ctr_thr->val << ")";</span><br><span>                       if (rate_ctr->intv[ctr_thr->intv].rate >= ctr_thr->val) {</span><br><span style="color: hsl(0, 100%, 40%);">-                           LOGCHAN(chan, DMAIN, FATAL) << "threshold reached, stopping! " << ctr_threshold_2_vty_str(ctr_thr)</span><br><span style="color: hsl(120, 100%, 40%);">+                              LOGCHAN(chan, DCTR, FATAL) << "threshold reached, stopping! " << ctr_threshold_2_vty_str(ctr_thr)</span><br><span>                                                         << " ("<< rate_ctr->intv[ctr_thr->intv].rate << " vs " << ctr_thr->val << ")";</span><br><span>                               osmo_signal_dispatch(SS_MAIN, S_MAIN_STOP_REQUIRED, NULL);</span><br><span>                           return;</span><br><span>@@ -313,7 +313,7 @@</span><br><span> </span><br><span> </span><br><span>        threshold_timer_sched_secs = OSMO_MAX((int)(min_secs / 2 - 1), 1);</span><br><span style="color: hsl(0, 100%, 40%);">-      LOGC(DMAIN, INFO) << "New ctr-error-threshold check interval: "</span><br><span style="color: hsl(120, 100%, 40%);">+       LOGC(DCTR, INFO) << "New ctr-error-threshold check interval: "</span><br><span>                         << threshold_timer_sched_secs << " seconds";</span><br><span>         osmo_timer_schedule(&threshold_timer, threshold_timer_sched_secs, 0);</span><br><span> }</span><br><span>@@ -333,18 +333,18 @@</span><br><span>               trx_ctrs_pending[i].chan = PENDING_CHAN_NONE;</span><br><span>                rate_ctrs[i] = rate_ctr_group_alloc(ctx, &trx_chan_ctr_group_desc, i);</span><br><span>           if (!rate_ctrs[i]) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    LOGCHAN(i, DMAIN, ERROR) << "Failed to allocate rate ctr";</span><br><span style="color: hsl(120, 100%, 40%);">+                    LOGCHAN(i, DCTR, ERROR) << "Failed to allocate rate ctr";</span><br><span>                    exit(1);</span><br><span>             }</span><br><span>    }</span><br><span>    dev_rate_ctr_timerfd.fd = -1;</span><br><span>        if (osmo_timerfd_setup(&dev_rate_ctr_timerfd, dev_rate_ctr_timerfd_cb, NULL) < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-              LOGC(DMAIN, ERROR) << "Failed to setup timerfd";</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGC(DCTR, ERROR) << "Failed to setup timerfd";</span><br><span>              exit(1);</span><br><span>     }</span><br><span>    trx_rate_ctr_timerfd.fd = -1;</span><br><span>        if (osmo_timerfd_setup(&trx_rate_ctr_timerfd, trx_rate_ctr_timerfd_cb, NULL) < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-              LOGC(DMAIN, ERROR) << "Failed to setup timerfd";</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGC(DCTR, ERROR) << "Failed to setup timerfd";</span><br><span>              exit(1);</span><br><span>     }</span><br><span>    osmo_signal_register_handler(SS_DEVICE, device_sig_cb, NULL);</span><br><span>@@ -361,7 +361,7 @@</span><br><span> </span><br><span>      new_ctr = talloc_zero(trx_rate_ctr_ctx, struct ctr_threshold);</span><br><span>       *new_ctr = *ctr;</span><br><span style="color: hsl(0, 100%, 40%);">-        LOGC(DMAIN, NOTICE) << "Adding new threshold check: " << ctr_threshold_2_vty_str(new_ctr);</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGC(DCTR, NOTICE) << "Adding new threshold check: " << ctr_threshold_2_vty_str(new_ctr);</span><br><span>      llist_add(&new_ctr->list, &threshold_list);</span><br><span>       threshold_timer_update_intv();</span><br><span> }</span><br><span>@@ -376,7 +376,7 @@</span><br><span>                ctr->val != del_ctr->val)</span><br><span>                  continue;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           LOGC(DMAIN, NOTICE) << "Deleting threshold check: " << ctr_threshold_2_vty_str(del_ctr);</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGC(DCTR, NOTICE) << "Deleting threshold check: " << ctr_threshold_2_vty_str(del_ctr);</span><br><span>                llist_del(&ctr->list);</span><br><span>                talloc_free(ctr);</span><br><span>            threshold_timer_update_intv();</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-trx/+/19306">change 19306</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-trx/+/19306"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-trx </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Id6c36432da7e7ce673c585bcae6772a695028ec5 </div>
<div style="display:none"> Gerrit-Change-Number: 19306 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: Jenkins Builder </div>
<div style="display:none"> Gerrit-MessageType: merged </div>