Forum Discussion
Append to list stored in table key
Hi,
First of all I wonder if this is good idea to store list in sub/table key - considering performance nad memory consummatum. Let's say it could be list containing no more that 10 IPs.
Second I wonder if there is faster more elegant way to actually add new value to the list. My idea is:
set c_val [table lookup -subtable ip [IP::client_addr]]
lappend c_val $new_val
table set -subtable ip [IP::client_addr] $c_val
Seems to be a lot overhead here, so maybe there is better way?
Piotr
20 Replies
- dragonflymr
Cirrostratus
Thanks Kai, I need do dive dipper in all nuisances - as you mentioned, knowledge is spread among many articles, sometimes it is hard to figure out which are outdated and which are current. It's hard for me to understand all the code because it's not my area of competence - at least not during last 20 years. Trying to keep up as fast as possible but... I am sick right now so it's hard to master analytic skills, but will try hard. What is great about this forum that there are people that devote time and patience to help and explain things to newbies like me - really, really I am appreciating all this effort, you guys are just amazing!!
Piotr
- dragonflymr
Cirrostratus
Thanks Kai, I need do dive dipper in all nuisances - as you mentioned, knowledge is spread among many articles, sometimes it is hard to figure out which are outdated and which are current. It's hard for me to understand all the code because it's not my area of competence - at least not during last 20 years. Trying to keep up as fast as possible but... I am sick right now so it's hard to master analytic skills, but will try hard. What is great about this forum that there are people that devote time and patience to help and explain things to newbies like me - really, really I am appreciating all this effort, you guys are just amazing!!
Piotr
- Hi Piotr, solving your questions makes more fun than solving x-word puzzles. So you're very much welcome! ;-) Cheers, Kai
- dragonflymr
Cirrostratus
Kay,
I am stuck with static array usage:
{ $temp(session_id_counter) < $static::conf(session_id_limit) }
I tried to define this array in RULE_INIT using:
set static::conf(session_id_limit) 5
but when saving I am getting such error:
Dec 16 16:56:50 bigip11 err tmm[5640]: 01220001:3: TCL error: /Common/test_kay_table_log - can't set "static::conf(session_id_limit)": variable isn't array while executing "set static::conf(session_id_limit) 5"
I can use set ::conf(session_id_limit) 5 but then iRule is demoted from CMP.
Can't find right way to define static array but for some strange reson when I use:
set static::conf_my(session_id_limit) 5
there is no error??
Piotr
- Hi Piotr, if "conf" is already defined as classic variable [set conf 1] then you can't change it or add stuff to it using [set conf(abc) 1]. Try [unset -nocomlain conf] then use [set conf(abc) 1] again. Cheers, Kai
- dragonflymr
Cirrostratus
Strange, I can't see any set conf in my code. I assume that set conf is not the same as set static::conf, and I for sure do not have any static::conf defined. Weird. Piotr - Sorry for confusion. The above command was just an example to show the behavior of classic and array variables. $conf is not the same as static::conf but may be the same as ::conf ;-) So change the "Try [unset -nocomlain conf] then use [set conf(abc) 1] again" to " Try [unset -nocomlain static::conf] then use [set static::conf(abc) 1] again". Alternativly you may crawl the variable of the static namespase using [info vars static::co*] and then check the contained variable with [array exists static::conf] Cheers, Kai BTW: Just created static::conf(abc) in my own environment. At least its working for me...
- dragonflymr
Cirrostratus
Thanks, will try with unset. Anyway I am getting grip on how to use arrays :-)
Piotr
Hi Piotr,
arrays can be very much handled like classic variables. The differences are not that much, but they the will also add certain functionality that you should remind when writing more or less complex code.
- $array($var_name), $array($var_name1$var_name2(key1)) or $array([command]) will work without using [eval].
- $array(quick brown fox) will work without tranforming the spaces.
- [unset array] will unset every contained entry in one step.
Because of the [unset] feature I tend to organise my code using $reqest(var_names), $temp(var_names) and $connection(var_names), where...
- the $temp(keys) MAY be flushed after each request to free memory.
- the $reqest(keys) MUST be flushed at the beginning of each request.
- the $connection(keys) MUST persist for the entire connection. But a single key MAY be erased as needed.
Using this scheme makes variable handling very comfortable and much more effective compared to regular variables^^
Cheers, Kai
Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
