From ff3f600920f4b64a1533ade6b4251befd551e3c3 Mon Sep 17 00:00:00 2001 From: Olof hagsand Date: Wed, 8 Sep 2021 11:50:07 +0200 Subject: [PATCH] Renamed paging to pagination --- CHANGELOG.md | 10 +++---- apps/backend/backend_get.c | 12 ++++---- apps/backend/backend_plugin.c | 12 ++++---- apps/backend/clixon_backend_plugin.h | 2 +- example/main/example_backend.c | 29 +++++++++---------- lib/clixon/clixon_plugin.h | 28 +++++++++--------- ...ng_config.sh => test_pagination_config.sh} | 0 ...ging_draft.sh => test_pagination_draft.sh} | 0 ...ging_state.sh => test_pagination_state.sh} | 0 yang/clixon/clixon-config@2021-07-11.yang | 2 +- ...on-netconf-list-pagination@2021-08-27.yang | 6 ++-- 11 files changed, 50 insertions(+), 51 deletions(-) rename test/{test_paging_config.sh => test_pagination_config.sh} (100%) rename test/{test_paging_draft.sh => test_pagination_draft.sh} (100%) rename test/{test_paging_state.sh => test_pagination_state.sh} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 90e53777..dea223f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,7 +35,7 @@ Expected: September, 2021 ### New features -* List paging for Netconf and Restconf +* List pagination for Netconf and Restconf * Experimental, work-in-progress * Enable with LIST_PAGINATION compile-time option * According to: @@ -48,7 +48,7 @@ Expected: September, 2021 * ietf-yang-metadata@2016-08-05.yang * ietf-netconf-with-defaults@2011-06-01.yang * New state callback signature (ca_statedata2) - * The new callback contains parameters for paging + * The new callback contains parameters for pagination * Goal is to replace ca_statedata callback * YANG Leafref feature update @@ -71,7 +71,7 @@ Expected: September, 2021 * New http media: application/yang-collection+xml/json * New state callback signature (ca_statedata2) - * The new callback contains parameters for paging + * The new callback contains parameters for pagination * Goal is to replace ca_statedata callback @@ -120,7 +120,7 @@ Developers may need to change their code * In this case, eg "uses", single quotes can now be used, but not `qstring + qstring` in this case * Fixed: [Performance issue when parsing large JSON param](https://github.com/clicon/clixon/issues/266) * Fixed: [Duplicate lines emitted by cli_show_config (cli output style) when yang list element has composite key](https://github.com/clicon/clixon/issues/258) -* Fixed: Typing 'q' in CLI more paging did not properly quit output +* Fixed: Typing 'q' in CLI more scrolling did not properly quit output * Output continued but was not shown, for a very large file this could cause considerable delay * Fixed: Lock was broken in first get get access * if the first netconf operation to a backend was lock;get;unlock, the lock was broken in the first get access. @@ -773,7 +773,7 @@ Developers may need to change their code * The register function has removed `from` and `rev` parameters: `upgrade_callback_register(h, cb, namespace, arg)` * The callback function has a new `op` parameter with possible values: `XML_FLAG_ADD`, `XML_FLAG_CHANGE` or `XML_FLAG_CHANGE`: `clicon_upgrade_cb(h, xn, ns, op, from, to, arg, cbret)` -* Added new cli show functions to work with cligen_output for cligen paging to work. To achieve this, replace function calls as follows: +* Added new cli show functions to work with cligen_output for cligen scrolling to work. To achieve this, replace function calls as follows: * `xml2txt(...)` --> `xml2txt_cb(..., cligen_output)` * `xml2cli(...)` --> `xml2cli_cb(..., cligen_output)` * `clicon_xml2file(...)` --> `clicon_xml2file_cb(..., cligen_output)` diff --git a/apps/backend/backend_get.c b/apps/backend/backend_get.c index 9fe72229..c3770e16 100644 --- a/apps/backend/backend_get.c +++ b/apps/backend/backend_get.c @@ -258,7 +258,7 @@ get_client_statedata(clicon_handle h, goto fail; } /* Use plugin state callbacks */ - if ((ret = clixon_plugin_statedata_all(h, yspec, nsc, xpath, PAGING_NONE, 0, 0, NULL, xret)) < 0) + if ((ret = clixon_plugin_statedata_all(h, yspec, nsc, xpath, PAGINATION_NONE, 0, 0, NULL, xret)) < 0) goto done; if (ret == 0) goto fail; @@ -467,10 +467,10 @@ get_list_pagination(clicon_handle h, cxobj *xerr = NULL; cbuf *cbmsg = NULL; /* For error msg */ cxobj *xret = NULL; - char *xpath2; /* With optional paging predicate */ + char *xpath2; /* With optional pagination predicate */ int ret; uint32_t iddb; /* DBs lock, if any */ - paging_status_t pagingstatus; + pagination_mode_t pagmode; cxobj *x1 = NULL; cxobj *xcache = NULL; uint32_t total = 0; @@ -600,12 +600,12 @@ get_list_pagination(clicon_handle h, else {/* Check if running locked (by this session) */ if ((iddb = xmldb_islocked(h, "running")) != 0 && iddb == ce->ce_id) - pagingstatus = PAGING_LOCK; + pagmode = PAGINATION_LOCK; else - pagingstatus = PAGING_STATELESS; + pagmode = PAGINATION_STATELESS; /* Use plugin state callbacks */ if ((ret = clixon_plugin_statedata_all(h, yspec, nsc, xpath, - pagingstatus, + pagmode, offset, limit, &remaining, &xret)) < 0) goto done; } diff --git a/apps/backend/backend_plugin.c b/apps/backend/backend_plugin.c index bc3576f7..eeca7141 100644 --- a/apps/backend/backend_plugin.c +++ b/apps/backend/backend_plugin.c @@ -239,7 +239,7 @@ clixon_plugin_daemon_all(clicon_handle h) * @param[in] h clicon handle * @param[in] nsc namespace context for xpath * @param[in] xpath String with XPATH syntax. or NULL for all - * @param[in] pagingstatus List pagination status + * @param[in] pagmode List pagination mode * @param[in] offset Offset, for list pagination * @param[in] limit Limit, for list pagination * @param[out] remaining Remaining elements (if limit is non-zero) @@ -253,7 +253,7 @@ clixon_plugin_statedata_one(clixon_plugin_t *cp, clicon_handle h, cvec *nsc, char *xpath, - paging_status_t pagingstatus, + pagination_mode_t pagmode, uint32_t offset, uint32_t limit, uint32_t *remaining, @@ -268,7 +268,7 @@ clixon_plugin_statedata_one(clixon_plugin_t *cp, if ((fn2 = clixon_plugin_api_get(cp)->ca_statedata2) != NULL){ if ((x = xml_new(DATASTORE_TOP_SYMBOL, NULL, CX_ELMNT)) == NULL) goto done; - if (fn2(h, nsc, xpath, pagingstatus, offset, limit, remaining, x) < 0){ + if (fn2(h, nsc, xpath, pagmode, offset, limit, remaining, x) < 0){ if (clicon_errno < 0) clicon_log(LOG_WARNING, "%s: Internal error: State callback in plugin: %s returned -1 but did not make a clicon_err call", __FUNCTION__, clixon_plugin_name_get(cp)); @@ -302,7 +302,7 @@ clixon_plugin_statedata_one(clixon_plugin_t *cp, * @param[in] yspec Yang spec * @param[in] nsc Namespace context * @param[in] xpath String with XPATH syntax. or NULL for all - * @param[in] pagination List pagination + * @param[in] pagmode List pagination mode * @param[in] offset Offset, for list pagination * @param[in] limit Limit, for list pagination * @param[out] remaining Remaining elements (if limit is non-zero) @@ -317,7 +317,7 @@ clixon_plugin_statedata_all(clicon_handle h, yang_stmt *yspec, cvec *nsc, char *xpath, - paging_status_t pagingstatus, + pagination_mode_t pagmode, uint32_t offset, uint32_t limit, uint32_t *remaining, @@ -332,7 +332,7 @@ clixon_plugin_statedata_all(clicon_handle h, clicon_debug(1, "%s", __FUNCTION__); while ((cp = clixon_plugin_each(h, cp)) != NULL) { - if ((ret = clixon_plugin_statedata_one(cp, h, nsc, xpath, pagingstatus, + if ((ret = clixon_plugin_statedata_one(cp, h, nsc, xpath, pagmode, offset, limit, remaining, &x)) < 0) goto done; if (ret == 0){ diff --git a/apps/backend/clixon_backend_plugin.h b/apps/backend/clixon_backend_plugin.h index b88c58e8..ec83b7a0 100644 --- a/apps/backend/clixon_backend_plugin.h +++ b/apps/backend/clixon_backend_plugin.h @@ -76,7 +76,7 @@ int clixon_plugin_pre_daemon_all(clicon_handle h); int clixon_plugin_daemon_all(clicon_handle h); int clixon_plugin_statedata_all(clicon_handle h, yang_stmt *yspec, cvec *nsc, char *xpath, - paging_status_t pagingstatus, + pagination_mode_t pagmode, uint32_t offset, uint32_t limit, uint32_t *remaining, cxobj **xtop); int clixon_plugin_lockdb_all(clicon_handle h, char *db, int lock, int id); diff --git a/example/main/example_backend.c b/example/main/example_backend.c index 19aebd01..942d9052 100644 --- a/example/main/example_backend.c +++ b/example/main/example_backend.c @@ -93,7 +93,7 @@ static char *_state_file = NULL; */ static int _state_file_cached = 0; -/*! Cache control of read state file paging example, +/*! Cache control of read state file pagination example, * keep xml tree cache as long as db is locked */ static cxobj *_state_xml_cache = NULL; /* XML cache */ @@ -353,7 +353,7 @@ example_copy_extra(clicon_handle h, /* Clicon handle */ * @param[in] h Clicon handle * @param[in] nsc External XML namespace context, or NULL * @param[in] xpath String with XPATH syntax. or NULL for all - * @param[in] paging List pagination (not uses here) + * @param[in] pagmode List pagination (not used here) * @param[in] offset Offset, for list pagination * @param[in] limit Limit, for list pagination * @param[out] remaining Remaining elements (if limit is non-zero) @@ -370,14 +370,13 @@ example_copy_extra(clicon_handle h, /* Clicon handle */ } } * This yang snippet is present in clixon-example.yang for example. - * XXX paging for lock - * @see example_statefile where state is read from file and also paging + * @see example_statefile where state is read from file and also pagination */ int example_statedata(clicon_handle h, cvec *nsc, char *xpath, - paging_status_t paging, + pagination_mode_t pagmode, uint32_t offset, uint32_t limit, uint32_t *remaining, @@ -456,14 +455,14 @@ example_statedata(clicon_handle h, return retval; } -/*! Called to get state data from plugin by reading a file, also paging +/*! Called to get state data from plugin by reading a file, also pagination * * The example shows how to read and parse a state XML file, (which is cached in the -i case). - * Return the requested xpath / paging xstate by copying from the parsed state XML file + * Return the requested xpath / pagination xstate by copying from the parsed state XML file * @param[in] h Clicon handle * @param[in] nsc External XML namespace context, or NULL * @param[in] xpath String with XPATH syntax. or NULL for all - * @param[in] paging List pagination + * @param[in] pagmode List pagination mode * @param[in] offset Offset, for list pagination * @param[in] limit Limit, for list pagination * @param[out] xstate XML tree, on entry. Copy to this @@ -476,7 +475,7 @@ int example_statefile(clicon_handle h, cvec *nsc, char *xpath, - paging_status_t paging, + pagination_mode_t pagmode, uint32_t offset, uint32_t limit, uint32_t *remaining, @@ -516,13 +515,13 @@ example_statefile(clicon_handle h, xt = _state_xml_cache; if (xpath_vec(xt, nsc, "%s", &xvec, &xlen, xpath) < 0) goto done; - switch (paging){ - case PAGING_NONE: + switch (pagmode){ + case PAGINATION_NONE: lower = 0; upper = xlen; break; - case PAGING_STATELESS: - case PAGING_LOCK: + case PAGINATION_STATELESS: + case PAGINATION_LOCK: lower = offset; if (limit == 0) upper = xlen; @@ -552,7 +551,7 @@ example_statefile(clicon_handle h, goto done; if (_state_file_cached) xt = NULL; /* ensure cache is not cleared */ - if (paging == PAGING_LOCK) + if (pagmode == PAGINATION_LOCK) _state_file_transaction++; ok: retval = 0; @@ -584,7 +583,7 @@ example_lockdb(clicon_handle h, clicon_debug(1, "%s Lock callback: db%s: locked:%d", __FUNCTION__, db, lock); - /* Part of cached paging example + /* Part of cached pagination example */ if (strcmp(db, "running") == 0 && lock == 0 && _state && _state_file && _state_file_cached && _state_file_transaction){ diff --git a/lib/clixon/clixon_plugin.h b/lib/clixon/clixon_plugin.h index 7d08b0ba..cc7b8700 100644 --- a/lib/clixon/clixon_plugin.h +++ b/lib/clixon/clixon_plugin.h @@ -206,31 +206,31 @@ typedef int (plgreset_t)(clicon_handle h, const char *db); */ typedef int (plgstatedata_t)(clicon_handle h, cvec *nsc, char *xpath, cxobj *xtop); -/*! List paging status in the plugin state data callback +/*! List pagination status in the plugin state data callback * - * List paging is either enabled or not. - * If paging is enabled, the xpath addresses a list/ leaf-list and the plugin should return + * List pagination is either enabled or not. + * If pagination is enabled, the xpath addresses a list/ leaf-list and the plugin should return * entries according to the values of offset and limit. - * Paging can use a lock/transaction mechanism - * If locking is not used, the plugin cannot expect more paging calls, and no state or caching + * Pagination can use a lock/transaction mechanism + * If locking is not used, the plugin cannot expect more pagination calls, and no state or caching * should be used - * If locking is used, the paging is part of a session transaction and the plugin may cache - * state (such as a cache) and can expect more paging calls until the running db-lock is released, + * If locking is used, the pagination is part of a session transaction and the plugin may cache + * state (such as a cache) and can expect more pagination calls until the running db-lock is released, * (see ca_lockdb) * The transaction is the regular lock/unlock db of running-db of a specific session. */ -enum paging_status{ - PAGING_NONE, /* No list paging: limit/offset are no-ops */ - PAGING_STATELESS, /* Stateless list paging, dont expect more paging calls */ - PAGING_LOCK /* Transactional list paging, can expect more paging until lock release */ +enum pagination_mode{ + PAGINATION_NONE, /* No list pagination: limit/offset are no-ops */ + PAGINATION_STATELESS, /* Stateless list pagination, dont expect more pagination calls */ + PAGINATION_LOCK /* Transactional list pagination, can expect more pagination until lock release */ }; -typedef enum paging_status paging_status_t; +typedef enum pagination_mode pagination_mode_t; /* Plugin statedata * @param[in] Clicon handle * @param[in] xpath Part of state requested * @param[in] nsc XPATH namespace context. - * @param[in] paging List pagination mode + * @param[in] pagmode List pagination mode * @param[in] offset Offset, for list pagination * @param[in] limit Limit, for list pagination * @param[out] remaining Remaining elements (if limit is non-zero) @@ -239,7 +239,7 @@ typedef enum paging_status paging_status_t; * @retval 0 OK */ typedef int (plgstatedata2_t)(clicon_handle h, cvec *nsc, char *xpath, - paging_status_t paging, + pagination_mode_t pagmode, uint32_t offset, uint32_t limit, uint32_t *remaining, cxobj *xtop); diff --git a/test/test_paging_config.sh b/test/test_pagination_config.sh similarity index 100% rename from test/test_paging_config.sh rename to test/test_pagination_config.sh diff --git a/test/test_paging_draft.sh b/test/test_pagination_draft.sh similarity index 100% rename from test/test_paging_draft.sh rename to test/test_pagination_draft.sh diff --git a/test/test_paging_state.sh b/test/test_pagination_state.sh similarity index 100% rename from test/test_paging_state.sh rename to test/test_pagination_state.sh diff --git a/yang/clixon/clixon-config@2021-07-11.yang b/yang/clixon/clixon-config@2021-07-11.yang index 4a11af17..82b0861f 100644 --- a/yang/clixon/clixon-config@2021-07-11.yang +++ b/yang/clixon/clixon-config@2021-07-11.yang @@ -692,7 +692,7 @@ module clixon-config { type int32; default 24; description - "Set to number of CLI terminal rows for paging/scrolling. 0 means unlimited. + "Set to number of CLI terminal rows for scrolling. 0 means unlimited. The number is set statically UNLESS: - there is no terminal, such as file input, in which case nr lines is 0 - there is a terminal sufficiently powerful to read the number of lines from diff --git a/yang/clixon/clixon-netconf-list-pagination@2021-08-27.yang b/yang/clixon/clixon-netconf-list-pagination@2021-08-27.yang index 089b2165..1ff94395 100644 --- a/yang/clixon/clixon-netconf-list-pagination@2021-08-27.yang +++ b/yang/clixon/clixon-netconf-list-pagination@2021-08-27.yang @@ -80,7 +80,7 @@ module clixon-netconf-list-pagination { represent any value greater than or equal to 2^32-1 elements."; } - grouping paging-parameters { + grouping pagination-parameters { leaf list-pagination { type boolean; default false; @@ -173,10 +173,10 @@ module clixon-netconf-list-pagination { } } augment /nc:get-config/nc:input { - uses paging-parameters; + uses pagination-parameters; } // extending the get operation augment /nc:get/nc:input { - uses paging-parameters; + uses pagination-parameters; } }