@@ -293,7 +293,55 @@ int wrap_memcached_sub(cachedb_con *connection,str* attr,int val,
293
293
294
294
int wrap_memcached_get_counter (cachedb_con * connection ,str * attr , int * res )
295
295
{
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 ;
297
345
}
298
346
299
347
#define MAX_HOSTPORT_SIZE 22
0 commit comments