Add docs for tap, and update all other documentation.
[m6w6/libmemcached] / libmemcached / options / parser.yy
index 6071a99bd02c83087c3259b94870a69d6c090646..0f0aee65a459115f6da1f104b3198888bde67029 100644 (file)
@@ -40,7 +40,6 @@
 #include <stdint.h>
 
 #include <libmemcached/options/context.h>
-#include <libmemcached/options/build.h>
 #include <libmemcached/options/string.h>
 #include <libmemcached/options/symbol.h>
 #include <libmemcached/visibility.h>
 
 int conf_lex(YYSTYPE* lvalp, void* scanner);
 
-#define parser_abort(A, B) do { parser::abort_func((A), (B)); YYABORT; } while (0) 
+#define parser_abort(A, B) do { (A)->abort((B)); YYABORT; } while (0) 
 
 inline void config_error(Context *context, yyscan_t *scanner, const char *error)
 {
   if (not context->end())
-    parser::abort_func(context, error);
-}
-
-int config_parse(Context*, yyscan_t *);
-
-void Context::start() 
-{
-  config_parse(this, scanner);
+    context->abort(error);
 }
 
 %}
@@ -83,19 +75,15 @@ void Context::start()
 %token UNKNOWN
 
 /* All behavior options */
-%token AUTO_EJECT_HOSTS
 %token BINARY_PROTOCOL
 %token BUFFER_REQUESTS
-%token CACHE_LOOKUPS
 %token CONNECT_TIMEOUT
-%token _CORK
 %token DISTRIBUTION
 %token HASH
-%token HASH_WITH_PREFIX_KEY
+%token HASH_WITH_NAMESPACE
 %token IO_BYTES_WATERMARK
 %token IO_KEY_PREFETCH
 %token IO_MSG_WATERMARK
-%token KETAMA
 %token KETAMA_HASH
 %token KETAMA_WEIGHTED
 %token NOREPLY
@@ -103,22 +91,22 @@ void Context::start()
 %token POLL_TIMEOUT
 %token RANDOMIZE_REPLICA_READ
 %token RCV_TIMEOUT
+%token REMOVE_FAILED_SERVERS
 %token RETRY_TIMEOUT
-%token SERVER_FAILURE_LIMIT
 %token SND_TIMEOUT
 %token SOCKET_RECV_SIZE
 %token SOCKET_SEND_SIZE
 %token SORT_HOSTS
 %token SUPPORT_CAS
-%token _TCP_NODELAY
-%token _TCP_KEEPALIVE
-%token _TCP_KEEPIDLE
 %token USER_DATA
 %token USE_UDP
 %token VERIFY_KEY
+%token _TCP_KEEPALIVE
+%token _TCP_KEEPIDLE
+%token _TCP_NODELAY
 
 /* Callbacks */
-%token PREFIX_KEY
+%token NAMESPACE
 
 /* Hash types */
 %token MD5
@@ -143,17 +131,16 @@ void Context::start()
 %nonassoc ','
 %nonassoc '='
 
-%token <number> NUMBER
 %token <number> FLOAT
-%token <string> HOSTNAME
-%token <string> HOSTNAME_WITH_PORT
-%token <string> IPADDRESS
-%token <string> IPADDRESS_WITH_PORT
+%token <number> NUMBER
+%token PORT
+%token WEIGHT_START
+%token <server> IPADDRESS
+%token <server> HOSTNAME
 %token <string> STRING
 %token <string> QUOTED_STRING
 %token <string> FILE_PATH
 
-%type <server> server
 %type <string> string
 %type <distribution> distribution
 %type <hash> hash
@@ -203,15 +190,21 @@ statement:
 
 
 expression:
-          SERVER server
-          { 
-            if ((context->rc= memcached_server_add_parsed(context->memc, $2.c_str, $2.length, $2.port, 0)) != MEMCACHED_SUCCESS)
+          SERVER HOSTNAME optional_port optional_weight
+          {
+            if ((context->rc= memcached_server_add_with_weight(context->memc, $2.c_str, $2.port, $2.weight)) != MEMCACHED_SUCCESS)
             {
               parser_abort(context, NULL);
             }
+            context->unset_server();
           }
-        | SERVERS_OPTION server_list
+        | SERVER IPADDRESS optional_port optional_weight
           {
+            if ((context->rc= memcached_server_add_with_weight(context->memc, $2.c_str, $2.port, $2.weight)) != MEMCACHED_SUCCESS)
+            {
+              parser_abort(context, NULL);
+            }
+            context->unset_server();
           }
         | CONFIGURE_FILE string
           {
@@ -221,7 +214,7 @@ expression:
         ;
 
 behaviors:
-          PREFIX_KEY string
+          NAMESPACE string
           {
             if ((context->rc= memcached_set_prefix_key(context->memc, $2.c_str, $2.length)) != MEMCACHED_SUCCESS)
             {
@@ -235,18 +228,22 @@ behaviors:
               parser_abort(context, NULL);;
             }
           }
-        | HASH hash
+        | DISTRIBUTION distribution ',' hash
           {
-            if ((context->rc= memcached_behavior_set(context->memc, MEMCACHED_BEHAVIOR_HASH, $2)) != MEMCACHED_SUCCESS)
+            if ((context->rc= memcached_behavior_set(context->memc, MEMCACHED_BEHAVIOR_DISTRIBUTION, $2)) != MEMCACHED_SUCCESS)
             {
-              parser_abort(context, NULL);; 
+              parser_abort(context, NULL);;
+            }
+            if ((context->rc= memcached_behavior_set_distribution_hash(context->memc, $4)) != MEMCACHED_SUCCESS)
+            {
+              parser_abort(context, NULL);;
             }
           }
-        | KETAMA_HASH hash
+        | HASH hash
           {
-            if ((context->rc= memcached_behavior_set(context->memc, MEMCACHED_BEHAVIOR_KETAMA_HASH, $2)) != MEMCACHED_SUCCESS)
+            if ((context->rc= memcached_behavior_set(context->memc, MEMCACHED_BEHAVIOR_HASH, $2)) != MEMCACHED_SUCCESS)
             {
-              parser_abort(context, NULL);;
+              parser_abort(context, NULL);; 
             }
           }
         | behavior_number NUMBER
@@ -269,7 +266,11 @@ behaviors:
         ;
 
 behavior_number:
-          CONNECT_TIMEOUT
+          REMOVE_FAILED_SERVERS
+          {
+            $$= MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS;
+          }
+        | CONNECT_TIMEOUT
           {
             $$= MEMCACHED_BEHAVIOR_CONNECT_TIMEOUT;
           }
@@ -301,10 +302,6 @@ behavior_number:
           {
             $$= MEMCACHED_BEHAVIOR_RETRY_TIMEOUT;
           }
-        |  SERVER_FAILURE_LIMIT
-          {
-            $$= MEMCACHED_BEHAVIOR_SERVER_FAILURE_LIMIT;
-          }
         |  SND_TIMEOUT
           {
             $$= MEMCACHED_BEHAVIOR_SND_TIMEOUT;
@@ -320,11 +317,7 @@ behavior_number:
         ;
 
 behavior_boolean: 
-          AUTO_EJECT_HOSTS
-          {
-            $$= MEMCACHED_BEHAVIOR_AUTO_EJECT_HOSTS;
-          }
-        | BINARY_PROTOCOL
+          BINARY_PROTOCOL
           {
             $$= MEMCACHED_BEHAVIOR_BINARY_PROTOCOL;
           }
@@ -332,26 +325,10 @@ behavior_boolean:
           {
             $$= MEMCACHED_BEHAVIOR_BUFFER_REQUESTS;
           }
-        | CACHE_LOOKUPS
-          {
-            $$= MEMCACHED_BEHAVIOR_CACHE_LOOKUPS;
-          }
-        | _CORK
-          {
-            $$= MEMCACHED_BEHAVIOR_CORK;
-          }
-        | HASH_WITH_PREFIX_KEY
+        | HASH_WITH_NAMESPACE
           {
             $$= MEMCACHED_BEHAVIOR_HASH_WITH_PREFIX_KEY;
           }
-        | KETAMA
-          {
-            $$= MEMCACHED_BEHAVIOR_KETAMA;
-          }
-        | KETAMA_WEIGHTED
-          {
-            $$= MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED;
-          }
         | NOREPLY
           {
             $$= MEMCACHED_BEHAVIOR_NOREPLY;
@@ -390,54 +367,16 @@ behavior_boolean:
           }
 
 
-server_list:
-           server
-          {
-            if ((context->rc= memcached_server_add_parsed(context->memc, $1.c_str, $1.length, $1.port, 0)) != MEMCACHED_SUCCESS)
-            {
-              parser_abort(context, NULL);;
-            }
-          }
-        | server_list ',' server
-          {
-            if ((context->rc= memcached_server_add_parsed(context->memc, $3.c_str, $3.length, $3.port, 0)) != MEMCACHED_SUCCESS)
-            {
-              parser_abort(context, NULL);;
-            }
-          }
+optional_port:
+          { }
+        | PORT
+          { };
         ;
 
-server:
-          HOSTNAME_WITH_PORT NUMBER
-          {
-            $$.c_str= $1.c_str;
-            $$.length= $1.length -1; // -1 to remove :
-            $$.port= $2;
-          }
-        | HOSTNAME
-          {
-            $$.c_str= $1.c_str;
-            $$.length= $1.length;
-            $$.port= MEMCACHED_DEFAULT_PORT;
-          }
-        | STRING /* a match can be against "localhost" which is just a string */
-          {
-            $$.c_str= $1.c_str;
-            $$.length= $1.length;
-            $$.port= MEMCACHED_DEFAULT_PORT;
-          }
-        | IPADDRESS_WITH_PORT NUMBER
-          {
-            $$.c_str= $1.c_str;
-            $$.length= $1.length -1; // -1 to remove :
-            $$.port= $2;
-          }
-        | IPADDRESS
-          {
-            $$.c_str= $1.c_str;
-            $$.length= $1.length;
-            $$.port= MEMCACHED_DEFAULT_PORT;
-          }
+optional_weight:
+          { }
+        | WEIGHT_START
+          { }
         ;
 
 hash:
@@ -505,3 +444,11 @@ distribution:
             $$= MEMCACHED_DISTRIBUTION_RANDOM;
           }
         ;
+
+%% 
+
+void Context::start() 
+{
+  config_parse(this, (void **)scanner);
+}
+