For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

dragonflymr's avatar
dragonflymr
Icon for Cirrostratus rankCirrostratus
Dec 14, 2015

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

  • 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

     

  • 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

     

    • Kai_Wilke's avatar
      Kai_Wilke
      Icon for MVP rankMVP
      Hi Piotr, solving your questions makes more fun than solving x-word puzzles. So you're very much welcome! ;-) Cheers, Kai
  • 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

    • Kai_Wilke's avatar
      Kai_Wilke
      Icon for MVP rankMVP
      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's avatar
      dragonflymr
      Icon for Cirrostratus rankCirrostratus
      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
    • Kai_Wilke's avatar
      Kai_Wilke
      Icon for MVP rankMVP
      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...
  • 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