You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by cc...@apache.org on 2019/07/31 17:54:25 UTC

[mynewt-core] branch master updated: log: Add configurability to watermark storage

This is an automated email from the ASF dual-hosted git repository.

ccollins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git


The following commit(s) were added to refs/heads/master by this push:
     new d063916  log: Add configurability to watermark storage
d063916 is described below

commit d063916bdcc86d754bb87d9a72412e3a606912b0
Author: JustineKH <ju...@juul.com>
AuthorDate: Wed Jul 31 10:24:31 2019 -0700

    log: Add configurability to watermark storage
---
 sys/log/full/src/log.c      |  8 ++++++++
 sys/log/full/src/log_fcb.c  | 16 +++++++++++++++-
 sys/log/full/src/log_nmgr.c |  4 ++++
 sys/log/full/syscfg.yml     |  7 +++++++
 4 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/sys/log/full/src/log.c b/sys/log/full/src/log.c
index d4e4cb9..ffa317f 100644
--- a/sys/log/full/src/log.c
+++ b/sys/log/full/src/log.c
@@ -74,6 +74,7 @@ STATS_NAME_END(logs)
 #endif
 
 #if MYNEWT_VAL(LOG_STORAGE_WATERMARK)
+#if MYNEWT_VAL(LOG_PERSIST_WATERMARK)
 static int log_conf_set(int argc, char **argv, char *val);
 
 static struct conf_handler log_conf = {
@@ -117,6 +118,7 @@ log_conf_set(int argc, char **argv, char *val)
     return 0;
 }
 #endif
+#endif
 
 void
 log_init(void)
@@ -155,9 +157,11 @@ log_init(void)
 #endif
 
 #if MYNEWT_VAL(LOG_STORAGE_WATERMARK)
+#if MYNEWT_VAL(LOG_PERSIST_WATERMARK)
     rc = conf_register(&log_conf);
     SYSINIT_PANIC_ASSERT(rc == 0);
 #endif
+#endif
 }
 
 struct log *
@@ -921,8 +925,10 @@ err:
 int
 log_set_watermark(struct log *log, uint32_t index)
 {
+#if MYNEWT_VAL(LOG_PERSIST_WATERMARK)
     char log_path[CONF_MAX_NAME_LEN];
     char mark_val[10]; /* fits uint32_t + \0 */
+#endif
     int rc;
 
     if (!log->l_log->log_set_watermark) {
@@ -935,12 +941,14 @@ log_set_watermark(struct log *log, uint32_t index)
         goto err;
     }
 
+#if MYNEWT_VAL(LOG_PERSIST_WATERMARK)
     snprintf(log_path, CONF_MAX_NAME_LEN, "log/%s/mark", log->l_name);
     log_path[CONF_MAX_NAME_LEN - 1] = '\0';
 
     sprintf(mark_val, "%u", (unsigned)index);
 
     conf_save_one(log_path, mark_val);
+#endif
 
     return (0);
 err:
diff --git a/sys/log/full/src/log_fcb.c b/sys/log/full/src/log_fcb.c
index bfa4009..b7ee467 100644
--- a/sys/log/full/src/log_fcb.c
+++ b/sys/log/full/src/log_fcb.c
@@ -532,19 +532,28 @@ log_fcb_registered(struct log *log)
 {
 #if MYNEWT_VAL(LOG_STORAGE_WATERMARK)
     struct fcb_log *fl;
+#if MYNEWT_VAL(LOG_PERSIST_WATERMARK)
     struct fcb *fcb;
     struct fcb_entry loc;
+#endif
 
     fl = (struct fcb_log *)log->l_arg;
+
+#if MYNEWT_VAL(LOG_PERSIST_WATERMARK)
     fcb = &fl->fl_fcb;
 
     /* Set watermark to first element */
     memset(&loc, 0, sizeof(loc));
+
     if (fcb_getnext(fcb, &loc)) {
         fl->fl_watermark_off = loc.fe_area->fa_off + loc.fe_elem_off;
     } else {
         fl->fl_watermark_off = fcb->f_oldest->fa_off;
     }
+#else
+    /* Initialize watermark to designated unknown value*/
+    fl->fl_watermark_off = 0xffffffff;
+#endif
 #endif
     return 0;
 }
@@ -603,9 +612,14 @@ log_fcb_storage_info(struct log *log, struct log_storage_info *info)
 #if MYNEWT_VAL(LOG_STORAGE_WATERMARK)
     /* Calculate used size */
     fa_used = el_max - fl->fl_watermark_off;
-    if ((int32_t)fa_used < 0) {
+
+    if (fl->fl_watermark_off == 0xffffffff){
+        fa_used = 0xffffffff;
+    }
+    else if ((int32_t)fa_used < 0) {
         fa_used += fa_size;
     }
+
     info->used_unread = fa_used;
 #endif
 
diff --git a/sys/log/full/src/log_nmgr.c b/sys/log/full/src/log_nmgr.c
index ba1f334..bad3efb 100644
--- a/sys/log/full/src/log_nmgr.c
+++ b/sys/log/full/src/log_nmgr.c
@@ -466,6 +466,10 @@ log_nmgr_read(struct mgmt_cbuf *cb)
         rc = OS_EINVAL;
     }
 
+#if MYNEWT_VAL(LOG_STORAGE_WATERMARK)
+    log_set_watermark(log, index);
+#endif
+
 err:
     g_err |= cbor_encoder_close_container(&cb->encoder, &logs);
     g_err |= cbor_encode_text_stringz(&cb->encoder, "rc");
diff --git a/sys/log/full/syscfg.yml b/sys/log/full/syscfg.yml
index 103d978..50f6e75 100644
--- a/sys/log/full/syscfg.yml
+++ b/sys/log/full/syscfg.yml
@@ -115,6 +115,13 @@ syscfg.defs:
         value: 0
         restrictions: LOG_STORAGE_INFO
 
+    LOG_PERSIST_WATERMARK:
+        description: >
+            1 Persist storage of watermarks.
+            0 Do not persist watermarks
+            0 Initializes watermarks to unknown (0xffffffff)
+        value: 1
+
     LOG_SYSINIT_STAGE_MAIN:
         description: >
             Primary sysinit stage for logging functionality.