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.