@@ -293,7 +293,55 @@ int wrap_memcached_sub(cachedb_con *connection,str* attr,int val,
293293
294294int wrap_memcached_get_counter (cachedb_con * connection ,str * attr , int * res )
295295{
296- return wrap_memcached_add (connection ,attr ,0 ,0 ,res );
296+ memcached_return rc ;
297+ char * ret ;
298+ size_t ret_len ;
299+ uint32_t fl ;
300+ char * err ;
301+ memcached_con * con ;
302+ struct timeval start ;
303+ str rpl ;
304+
305+ start_expire_timer (start ,memcache_exec_threshold );
306+ con = (memcached_con * )connection -> data ;
307+
308+ ret = memcached_get (con -> memc ,attr -> s , attr -> len ,
309+ & ret_len ,& fl ,& rc );
310+
311+ if (ret == NULL )
312+ {
313+ if (rc == MEMCACHED_NOTFOUND )
314+ {
315+ stop_expire_timer (start ,memcache_exec_threshold ,
316+ "cachedb_memcached counter fetch" ,attr -> s ,attr -> len ,0 );
317+ return -2 ;
318+ }
319+ else
320+ {
321+ err = (char * )memcached_strerror (con -> memc ,rc );
322+ LM_ERR ("Failed to get: %s\n" ,err );
323+ stop_expire_timer (start ,memcache_exec_threshold ,
324+ "cachedb_memcached counter fetch" ,attr -> s ,attr -> len ,0 );
325+ return -1 ;
326+ }
327+ }
328+
329+ rpl .len = (int )ret_len ;
330+ rpl .s = ret ;
331+
332+ if (str2sint (& rpl ,res ) < 0 ) {
333+ LM_ERR ("Failed to convert %.*s to int\n" ,(int )ret_len ,ret );
334+ stop_expire_timer (start ,memcache_exec_threshold ,
335+ "cachedb_memcached counter fetch" ,attr -> s ,attr -> len ,0 );
336+ free (ret );
337+ return -1 ;
338+
339+ }
340+
341+ stop_expire_timer (start ,memcache_exec_threshold ,
342+ "cachedb_memcached counter fetch" ,attr -> s ,attr -> len ,0 );
343+ free (ret );
344+ return 0 ;
297345}
298346
299347#define MAX_HOSTPORT_SIZE 22
0 commit comments