What's the use case for these commands?  I looked at the existing
usage in e.g. ACS back when I added this and it seems that people are
calling _get, and if it's not there, then calling _set.  But this
looks like a race condition to me.

Does _eval not cover everything?



On 4/5/06, Vlad Seryakov <[EMAIL PROTECTED]> wrote:
> Update of /cvsroot/naviserver/naviserver/nsd
> In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24426/nsd
>
> Modified Files:
>        tclcache.c tclcmds.c
> Log Message:
> Added 2 new cache commands ns_cache_get and ns_cache_set for easier cache 
> manipulation
>
>
> Index: tclcmds.c
> ===================================================================
> RCS file: /cvsroot/naviserver/naviserver/nsd/tclcmds.c,v
> retrieving revision 1.34
> retrieving revision 1.35
> diff -C2 -d -r1.34 -r1.35
> *** tclcmds.c   28 Feb 2006 20:02:37 -0000      1.34
> --- tclcmds.c   5 Apr 2006 17:52:31 -0000       1.35
> ***************
> *** 73,76 ****
> --- 73,78 ----
>      NsTclCacheCreateObjCmd,
>      NsTclCacheEvalObjCmd,
> +     NsTclCacheGetObjCmd,
> +     NsTclCacheSetObjCmd,
>      NsTclCacheFlushObjCmd,
>      NsTclCacheIncrObjCmd,
> ***************
> *** 259,262 ****
> --- 261,266 ----
>      {"ns_cache_create", NULL, NsTclCacheCreateObjCmd},
>      {"ns_cache_eval", NULL, NsTclCacheEvalObjCmd},
> +     {"ns_cache_get", NULL, NsTclCacheGetObjCmd},
> +     {"ns_cache_set", NULL, NsTclCacheSetObjCmd},
>      {"ns_cache_flush", NULL, NsTclCacheFlushObjCmd},
>      {"ns_cache_incr", NULL, NsTclCacheIncrObjCmd},
>
> Index: tclcache.c
> ===================================================================
> RCS file: /cvsroot/naviserver/naviserver/nsd/tclcache.c,v
> retrieving revision 1.2
> retrieving revision 1.3
> diff -C2 -d -r1.2 -r1.3
> *** tclcache.c  23 Jan 2006 15:57:33 -0000      1.2
> --- tclcache.c  5 Apr 2006 17:52:31 -0000       1.3
> ***************
> *** 285,288 ****
> --- 285,378 ----
>  }
>
> + /*
> +  *----------------------------------------------------------------------
> +  *
> +  * NsTclCacheGetObjCmd --
> +  *
> +  *      Returns entry value if entry exists in the cache and not expired yet
> +  *
> +  * Results:
> +  *      TCL result with entry value or empty result
> +  *
> +  * Side effects:
> +  *      None.
> +  *
> +  *----------------------------------------------------------------------
> +  */
> +
> + int
> + NsTclCacheGetObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj 
> *CONST objv[])
> + {
> +     Ns_Cache *cache;
> +     Ns_Entry *entry;
> +     char     *key;
> +
> +     Ns_ObjvSpec args[] = {
> +         {"cache",    ObjvCache,     &cache, arg},
> +         {"key",      Ns_ObjvString, &key,   NULL},
> +         {NULL, NULL, NULL, NULL}
> +     };
> +     if (Ns_ParseObjv(NULL, args, interp, 1, objc, objv) != NS_OK) {
> +         return TCL_ERROR;
> +     }
> +     Ns_CacheLock(cache);
> +     if ((entry = Ns_CacheFindEntry(cache, key)) != NULL) {
> +         Tcl_SetStringObj(Tcl_GetObjResult(interp),
> +                          Ns_CacheGetValue(entry), Ns_CacheGetSize(entry));
> +     }
> +     Ns_CacheUnlock(cache);
> +     return TCL_OK;
> + }
> +
> + /*
> +  *----------------------------------------------------------------------
> +  *
> +  * NsTclCacheSetObjCmd --
> +  *
> +  *      Set new value of the cache entry
> +  *
> +  * Results:
> +  *      TCL result.
> +  *
> +  * Side effects:
> +  *      None.
> +  *
> +  *----------------------------------------------------------------------
> +  */
> +
> + int
> + NsTclCacheSetObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj 
> *CONST objv[])
> + {
> +     NsInterp *itPtr = arg;
> +     Ns_Cache *cache;
> +     Ns_Entry *entry;
> +     char     *key, *value = 0;
> +     int       new, timeout = -1, ttl = 0;
> +
> +     Ns_ObjvSpec opts[] = {
> +         {"-timeout", Ns_ObjvInt,   &timeout, NULL},
> +         {"-ttl",     Ns_ObjvInt,   &ttl,     NULL},
> +         {"--",       Ns_ObjvBreak, NULL,     NULL},
> +         {NULL, NULL, NULL, NULL}
> +     };
> +     Ns_ObjvSpec args[] = {
> +         {"cache",    ObjvCache,     &cache, arg},
> +         {"key",      Ns_ObjvString, &key,   NULL},
> +         {"value",    Ns_ObjvString, &value, NULL},
> +         {NULL, NULL, NULL, NULL}
> +     };
> +     if (Ns_ParseObjv(opts, args, interp, 1, objc, objv) != NS_OK) {
> +         return TCL_ERROR;
> +     }
> +     if ((entry = CreateEntry(itPtr, cache, key, &new, timeout)) == NULL) {
> +         return TCL_ERROR;
> +     }
> +     Tcl_SetStringObj(Tcl_GetObjResult(interp), value, -1);
> +     SetEntry(interp, entry, NULL, ttl);
> +     Ns_CacheUnlock(cache);
> +
> +     return TCL_OK;
> + }
> +
>
>  /*
>
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by xPML, a groundbreaking scripting language
> that extends applications into web and mobile media. Attend the live webcast
> and join the prime developer group breaking into this new coding territory!
> http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
> _______________________________________________
> naviserver-commits mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/naviserver-commits
>

Reply via email to