Deal with atomic stats variables on 32-bit machines.
authorMonty Taylor <mordred@inaugust.com>
Fri, 18 Dec 2009 23:59:37 +0000 (15:59 -0800)
committerMonty Taylor <mordred@inaugust.com>
Fri, 18 Dec 2009 23:59:37 +0000 (15:59 -0800)
clients/ms_atomic.h
clients/ms_conn.c
clients/ms_memslap.h
clients/ms_task.c
clients/ms_thread.c

index ca117df834a3f6a1bf0d8681138e0513e238cced..c4f9a9475c31906e5fd4da9b576292d05bf6b827 100644 (file)
 #if defined(__SUNPRO_C)
 # define _KERNEL
 # include <atomic.h>
+# if defined(_INT64_TYPE)
+#  define  atomic_add_size(X, Y) atomic_add_64((X), (Y))
+#  define  atomic_add_size_nv(X, Y) atomic_add_64((X), (Y))
+#  define  atomic_dec_size(X, Y) atomic_add_64((X), (Y))
+#  define  atomic_dec_size_nv(X, Y) atomic_add_64((X), (Y))
+# else
+#  define  atomic_add_size(X, Y) atomic_add_32((X), (Y))
+#  define  atomic_add_size_nv(X, Y) atomic_add_32((X), (Y))
+#  define  atomic_dec_size(X, Y) atomic_add_32((X), (Y))
+#  define  atomic_dec_size_nv(X, Y) atomic_add_32((X), (Y))
+# endif
 # undef _KERNEL
 #else
 # define atomic_add_8(X, Y)  __sync_fetch_and_add((X), (Y))
 # define atomic_add_16(X, Y) __sync_fetch_and_add((X), (Y))
 # define atomic_add_32(X, Y) __sync_fetch_and_add((X), (Y))
-# define atomic_add_64(X, Y) __sync_fetch_and_add((X), (Y))
+# define atomic_add_size(X, Y) __sync_fetch_and_add((X), (Y))
 # define atomic_dec_8(X)  __sync_fetch_and_sub((X), 1)
 # define atomic_dec_16(X) __sync_fetch_and_sub((X), 1)
 # define atomic_dec_32(X) __sync_fetch_and_sub((X), 1)
-# define atomic_dec_64(X) __sync_fetch_and_sub((X), 1)
+# define atomic_dec_size(X) __sync_fetch_and_sub((X), 1)
 /* The same as above, but these return the new value instead of void */
 # define atomic_add_8_nv(X, Y)  __sync_fetch_and_add((X), (Y))
 # define atomic_add_16_nv(X, Y) __sync_fetch_and_add((X), (Y))
 # define atomic_add_32_nv(X, Y) __sync_fetch_and_add((X), (Y))
-# define atomic_add_64_nv(X, Y) __sync_fetch_and_add((X), (Y))
+# define atomic_add_size_nv(X, Y) __sync_fetch_and_add((X), (Y))
 # define atomic_dec_8_nv(X)  __sync_fetch_and_sub((X), 1)
 # define atomic_dec_16_nv(X) __sync_fetch_and_sub((X), 1)
 # define atomic_dec_32_nv(X) __sync_fetch_and_sub((X), 1)
-# define atomic_dec_64_nv(X) __sync_fetch_and_sub((X), 1)
+# define atomic_dec_size_nv(X) __sync_fetch_and_sub((X), 1)
 #endif /* defined(__SUNPRO_C) */
 
 #endif /* CLIENTS_MS_ATOMIC_H */
index 34707958aa0d21896c0fd6fe5b3e4f64187b857b..c062dc2958df424eb1e165e0e6cf6ce33396033f 100644 (file)
@@ -1589,7 +1589,7 @@ static int ms_udp_read(ms_conn_t *c, char *buf, int len)
 
     if (res > 0)
     {
-      atomic_add_64(&ms_stats.bytes_read, res);
+      atomic_add_size(&ms_stats.bytes_read, res);
       c->rudpbytes+= res;
       rbytes+= res;
       if (res == avail)
@@ -1623,7 +1623,7 @@ static int ms_udp_read(ms_conn_t *c, char *buf, int len)
 
   if (copybytes == -1)
   {
-    atomic_add_64(&ms_stats.pkt_disorder, 1);
+    atomic_add_size(&ms_stats.pkt_disorder, 1);
   }
 
   return copybytes;
@@ -1701,7 +1701,7 @@ static int ms_try_read_network(ms_conn_t *c)
     {
       if (! c->udp)
       {
-        atomic_add_64(&ms_stats.bytes_read, res);
+        atomic_add_size(&ms_stats.bytes_read, res);
       }
       gotdata= 1;
       c->rbytes+= res;
@@ -1765,7 +1765,7 @@ static void ms_verify_value(ms_conn_t *c,
       if (curr_time.tv_sec - c->curr_task.item->client_time
           > c->curr_task.item->exp_time + EXPIRE_TIME_ERROR)
       {
-        atomic_add_64(&ms_stats.exp_get, 1);
+        atomic_add_size(&ms_stats.exp_get, 1);
 
         if (ms_setting.verbose)
         {
@@ -1806,7 +1806,7 @@ static void ms_verify_value(ms_conn_t *c,
       if ((c->curr_task.item->value_size != vlen)
           || (memcmp(orignval, value, (size_t)vlen) != 0))
       {
-        atomic_add_64(&ms_stats.vef_failed, 1);
+        atomic_add_size(&ms_stats.vef_failed, 1);
 
         if (ms_setting.verbose)
         {
@@ -2254,7 +2254,7 @@ static int ms_transmit(ms_conn_t *c)
     res= sendmsg(c->sfd, m, 0);
     if (res > 0)
     {
-      atomic_add_64(&ms_stats.bytes_written, res);
+      atomic_add_size(&ms_stats.bytes_written, res);
 
       /* We've written some of the data. Remove the completed
        *  iovec entries from the list of pending writes. */
@@ -2997,9 +2997,9 @@ int ms_mcd_set(ms_conn_t *c, ms_task_item_t *item)
     }
   }
 
-  atomic_add_64(&ms_stats.obj_bytes,
-                item->key_size + item->value_size);
-  atomic_add_64(&ms_stats.cmd_set, 1);
+  atomic_add_size(&ms_stats.obj_bytes,
+                  item->key_size + item->value_size);
+  atomic_add_size(&ms_stats.cmd_set, 1);
 
   return 0;
 } /* ms_mcd_set */
@@ -3083,7 +3083,7 @@ int ms_mcd_get(ms_conn_t *c, ms_task_item_t *item, bool verify)
     }
   }
 
-  atomic_add_64(&ms_stats.cmd_get, 1);
+  atomic_add_size(&ms_stats.cmd_get, 1);
 
   return 0;
 } /* ms_mcd_get */
@@ -3182,7 +3182,7 @@ int ms_mcd_mlget(ms_conn_t *c)
   for (int i= 0; i < c->mlget_task.mlget_num; i++)
   {
     item= c->mlget_task.mlget_item[i].item;
-    atomic_add_64(&ms_stats.cmd_get, 1);
+    atomic_add_size(&ms_stats.cmd_get, 1);
   }
 
   return 0;
index 30cc715708b189377c210dedc88d2ff8e2949ed9..51023d9d2514868722b2f0c3690d7e5f6ae6bbb6 100644 (file)
@@ -70,21 +70,21 @@ typedef struct statistic
 typedef struct stats
 {
   volatile uint32_t active_conns;   /* active connections */
-  uint64_t bytes_read;              /* read bytes */
-  uint64_t bytes_written;           /* written bytes */
-  uint64_t obj_bytes;               /* object bytes */
-  uint64_t pre_cmd_get;             /* previous total get command count */
-  uint64_t pre_cmd_set;             /* previous total set command count */
-  uint64_t cmd_get;                 /* current total get command count */
-  uint64_t cmd_set;                 /* current total set command count */
-  uint64_t get_misses;              /* total objects of get miss */
-  uint64_t vef_miss;                /* total objects of verification miss  */
-  uint64_t vef_failed;              /* total objects of verification failed  */
-  uint64_t unexp_unget;             /* total objects which is unexpired but not get */
-  uint64_t exp_get;                 /* total objects which is expired but get  */
-  volatile uint64_t pkt_disorder;            /* disorder packages of UDP */
-  uint64_t pkt_drop;                /* packages dropped of UDP */
-  uint64_t udp_timeout;             /* how many times timeout of UDP happens */
+  size_t bytes_read;              /* read bytes */
+  size_t bytes_written;           /* written bytes */
+  size_t obj_bytes;               /* object bytes */
+  size_t pre_cmd_get;             /* previous total get command count */
+  size_t pre_cmd_set;             /* previous total set command count */
+  size_t cmd_get;                 /* current total get command count */
+  size_t cmd_set;                 /* current total set command count */
+  size_t get_misses;              /* total objects of get miss */
+  size_t vef_miss;                /* total objects of verification miss  */
+  size_t vef_failed;              /* total objects of verification failed  */
+  size_t unexp_unget;             /* total objects which is unexpired but not get */
+  size_t exp_get;                 /* total objects which is expired but get  */
+  volatile size_t pkt_disorder;            /* disorder packages of UDP */
+  size_t pkt_drop;                /* packages dropped of UDP */
+  size_t udp_timeout;             /* how many times timeout of UDP happens */
 } ms_stats_t;
 
 /* lock adapter */
index 7a427332346e9dc2955942f1b3a5f768b378f459..bcd2757c0b0453d6a944b0d59344751a7aa35a5c 100644 (file)
@@ -725,7 +725,7 @@ static void ms_update_multi_get_result(ms_conn_t *c)
     /* update get miss counter */
     if (mlget_item->get_miss)
     {
-      atomic_add_64(&ms_stats.get_misses, 1);
+      atomic_add_size(&ms_stats.get_misses, 1);
     }
 
     /* get nothing from server for this task item */
@@ -741,7 +741,7 @@ static void ms_update_multi_get_result(ms_conn_t *c)
         if (curr_time.tv_sec - item->client_time
             < item->exp_time - EXPIRE_TIME_ERROR)
         {
-          atomic_add_64(&ms_stats.unexp_unget, 1);
+          atomic_add_size(&ms_stats.unexp_unget, 1);
 
           if (ms_setting.verbose)
           {
@@ -779,7 +779,7 @@ static void ms_update_multi_get_result(ms_conn_t *c)
       }
       else
       {
-        atomic_add_64(&ms_stats.vef_miss, 1);
+        atomic_add_size(&ms_stats.vef_miss, 1);
 
         if (ms_setting.verbose)
         {
@@ -829,7 +829,7 @@ static void ms_update_single_get_result(ms_conn_t *c, ms_task_item_t *item)
   /* update get miss counter */
   if ((c->precmd.cmd == CMD_GET) && c->curr_task.get_miss)
   {
-    atomic_add_64(&ms_stats.get_misses, 1);
+    atomic_add_size(&ms_stats.get_misses, 1);
   }
 
   /* get nothing from server for this task item */
@@ -846,7 +846,7 @@ static void ms_update_single_get_result(ms_conn_t *c, ms_task_item_t *item)
       if (curr_time.tv_sec - item->client_time
           < item->exp_time - EXPIRE_TIME_ERROR)
       {
-        atomic_add_64(&ms_stats.unexp_unget, 1);
+        atomic_add_size(&ms_stats.unexp_unget, 1);
 
         if (ms_setting.verbose)
         {
@@ -884,7 +884,7 @@ static void ms_update_single_get_result(ms_conn_t *c, ms_task_item_t *item)
     }
     else
     {
-      atomic_add_64(&ms_stats.vef_miss, 1);
+      atomic_add_size(&ms_stats.vef_miss, 1);
 
       if (ms_setting.verbose)
       {
index 5c387d0ee76303b0fa2dd289bcfd32a6d3f84e24..92d68871fd70c7d327957946023dd902ad39bffd 100644 (file)
@@ -69,10 +69,10 @@ static void ms_check_sock_timeout(void)
         /* calculate dropped packets count */
         if (c->recvpkt > 0)
         {
-          atomic_add_64(&ms_stats.pkt_drop, c->packets - c->recvpkt);
+          atomic_add_size(&ms_stats.pkt_drop, c->packets - c->recvpkt);
         }
 
-        atomic_add_64(&ms_stats.udp_timeout, 1);
+        atomic_add_size(&ms_stats.udp_timeout, 1);
         ms_reset_conn(c, true);
       }
     }