Contents
Overview
In Release 22.12 (R04.22.12.00), list entries (for example, MSISDNs) added via tp_shell can appear immediately in the MGR GUI and be visible at runtime (for example, via tp_walkall on FW/RTR nodes), while a MySQL query against mgr_domain_main.listTable.listConditionBlob does not reflect those entries until the MGR GUI Save action is performed.
This behavior is caused by validating against a consolidated/serialized “blob” representation that may not refresh immediately. The authoritative row-level records for tp_shell-driven changes are stored in mgr_domain_main.listConditionTable.
Solution
Problem Summary
Symptom (no explicit error message): After running tp_shell to add MSISDNs to a list (with explicit list id/index1 and item index/index2), the entries appear in the MGR GUI, but do not appear in MySQL when querying mgr_domain_main.listTable.listConditionBlob until clicking Save in the MGR GUI.
Operational impact: Automations that compute the “next index” from database extracts can reuse an old index if they rely on listConditionBlob (because the blob may appear unchanged until GUI Save).
Environment
- Version: Release 22.12 (R04.22.12.00)
How to Recognize This Specific Mismatch
You are likely validating against the consolidated blob representation instead of the row-based table:
mgr_domain_main.listTable.listConditionBlobmay not change aftertp_shell.mgr_domain_main.listConditionTabledoes show the new entries aftertp_shell.
A reliable indicator is that deterministic checks like LENGTH(), MD5(), or LOCATE() remain unchanged after tp_shell, but change after a GUI Save:
SELECT LENGTH(listConditionBlob) AS len, MD5(listConditionBlob) AS md5
FROM listTable
WHERE listname = '<list_name>';
SELECT LOCATE('<msisdn_plain_digits>', listConditionBlob) AS pos_value
FROM listTable
WHERE listname = '<list_name>';
Root Cause
Two different database representations are involved:
-
Row-based storage (authoritative for
tp_shell-driven inserts)
mgr_domain_main.listConditionTablelistConditionIndex1= list identifier (list id)listConditionIndex2= item index/sequencelistCondition= value (for example, MSISDN string)
-
Consolidated/serialized representation (may refresh later)
mgr_domain_main.listTable.listConditionBlob
This is a single “blob” representation of the list’s full content and may not be regenerated immediately. In the captured evidence, it refreshed only after a GUI Save.
Recommended Validation + Automation Pattern
1) Validate inserts in the correct DB table (listConditionTable)
After running tp_shell add commands, verify the new values and indexes directly:
USE mgr_domain_main;
-- Get the next index for automation
SELECT MAX(listConditionIndex2) AS max_idx
FROM listConditionTable
WHERE listConditionIndex1 = <list_id>;
-- Confirm specific inserted entries exist
SELECT listConditionIndex2, listCondition
FROM listConditionTable
WHERE listConditionIndex1 = <list_id>
AND listCondition IN ('<msisdn_1>','<msisdn_2>','<msisdn_3>');
Operational note: Use MAX(listConditionIndex2) from listConditionTable as the source of truth for computing the next indexes in CLI automation. Do not derive “next index” from listConditionBlob.
2) Validate runtime/enforcement on FW/RTR nodes (distribution check)
To confirm the list is active at runtime and rules referencing the list will apply, validate on a FW/RTR node:
- Run
tp_walk listconditionortp_walkallon the FW/RTR node. - Confirm:
- The entry count increased as expected.
- The new
listCondition.<list_id>.<item_index>entries exist.
3) When (and why) to use MGR GUI “Save”
Use GUI Save if:
- You have a reporting/export/integration that reads list contents specifically from
listTable.listConditionBlob, or - You need the consolidated blob representation to refresh.
If you do not click Save for long periods:
- Runtime enforcement can still be validated via FW/RTR
tp_walkalland the row-based DB tablelistConditionTable. - Workflows that depend on
listConditionBlobmay appear “out of sync” until Save is performed.
4) Avoid conflicts when later editing/removing entries in GUI
If you plan to remove entries using the GUI:
- Reopen/refresh the list view first so the GUI reflects the latest state.
- Remove the desired entry.
- Click Save.
This reduces the risk of saving an older/stale view of the list.
Validation Checklist
-
DB (authoritative for
tp_shellchanges):listConditionTableshows the new MSISDN rows.MAX(listConditionIndex2)for the list id is updated.
-
Runtime/node:
- FW/RTR
tp_walkallshows increased list entry count and the new entries (for example,listCondition.<list_id>.<item_index>).
- FW/RTR
-
Optional (only if required by a tool/export):
listTable.listConditionBlobupdates after GUI Save (for example,LENGTH/MD5changes andLOCATE()begins finding the inserted values).
Engineering / Defect Notes
- No defect was confirmed.
- No engineering fix or version change was documented.
- The observed outcome is consistent with using different database representations for validation (
listConditionTablevs.listTable.listConditionBlob).
Frequently Asked Questions
- 1. How can I tell if I’m affected by this issue?
- If you add entries via
tp_shelland see them in the GUI and/ortp_walkall, but your MySQL query againstmgr_domain_main.listTable.listConditionBlobdoes not show them until you click GUI Save, you’re seeing this representation mismatch. - 2. Which table should I use to compute the “next index” for
tp_shellinserts? - Use
mgr_domain_main.listConditionTableand computeMAX(listConditionIndex2)for your<list_id>. Do not uselistTable.listConditionBlobfor index calculations. - 3. Are the newly-added MSISDNs actually enforced/blocked on FW/RTR nodes if I don’t click GUI Save?
- Validate enforcement by checking the FW/RTR runtime using
tp_walk listcondition/tp_walkall. If the entries are present there (and inlistConditionTable), rules using the list will apply on nodes that are connected and receiving updates. - 4. Why does
listConditionBlobupdate only after GUI Save? listConditionBlobis a consolidated/serialized representation. In the captured evidence, it did not refresh immediately aftertp_shellchanges, but did refresh after GUI Save (LENGTH/MD5changed andLOCATE()started finding the new values). Fortp_shell-driven workflows, treatlistConditionTableas the authoritative DB source.- 5. What’s the impact of using
tp_shellfor a week without clicking Save in the GUI? - Runtime behavior can still be correct (validate via FW/RTR
tp_walkalland DBlistConditionTable). The main impact is that any tooling or exports that read fromlistTable.listConditionBlobmay not reflect recent changes until GUI Save occurs. - 6. If I later remove an entry using the GUI, can it conflict with
tp_shell-added entries? - Before removing and saving in the GUI, refresh/reopen the list so the GUI view reflects the latest entries. Then remove and Save. This helps avoid committing a stale view.
Priyanka Bhotika
Comments