[Groonga-commit] groonga/groonga at 3f5649d [master] http/httpd: support custom command version in load

Back to archive index

Kouhei Sutou null+****@clear*****
Tue Sep 6 15:39:37 JST 2016


Kouhei Sutou	2016-09-06 15:39:37 +0900 (Tue, 06 Sep 2016)

  New Revision: 3f5649dcb4abe9c5610dc560d7357b81e67ffff3
  https://github.com/groonga/groonga/commit/3f5649dcb4abe9c5610dc560d7357b81e67ffff3

  Message:
    http/httpd: support custom command version in load

  Modified files:
    lib/ctx.c
    lib/grn_ctx.h
    lib/grn_ctx_impl.h
    lib/proc.c
    src/groonga.c
    src/httpd/nginx-module/ngx_http_groonga_module.c

  Modified: lib/ctx.c (+11 -7)
===================================================================
--- lib/ctx.c    2016-09-06 15:22:54 +0900 (f63dd1c)
+++ lib/ctx.c    2016-09-06 15:39:37 +0900 (be9f6cd)
@@ -234,7 +234,6 @@ grn_ctx_impl_init(grn_ctx *ctx)
   ctx->impl->expr_vars = grn_hash_create(ctx, NULL, sizeof(grn_id), sizeof(grn_obj *), 0);
   ctx->impl->stack_curr = 0;
   ctx->impl->curr_expr = NULL;
-  ctx->impl->qe_next = NULL;
   GRN_TEXT_INIT(&ctx->impl->current_request_id, 0);
   ctx->impl->current_request_timer_id = NULL;
   ctx->impl->parser = NULL;
@@ -242,11 +241,14 @@ grn_ctx_impl_init(grn_ctx *ctx)
   GRN_TEXT_INIT(&ctx->impl->output.names, GRN_OBJ_VECTOR);
   GRN_UINT32_INIT(&ctx->impl->output.levels, GRN_OBJ_VECTOR);
 
+  ctx->impl->command.flags = 0;
   if (ctx == &grn_gctx) {
     ctx->impl->command.version = GRN_COMMAND_VERSION_STABLE;
   } else {
     ctx->impl->command.version = grn_get_default_command_version();
   }
+  ctx->impl->command.keep.command = NULL;
+  ctx->impl->command.keep.version = ctx->impl->command.version;
 
   if (ctx == &grn_gctx) {
     ctx->impl->match_escalation_threshold =
@@ -283,9 +285,10 @@ grn_ctx_impl_init(grn_ctx *ctx)
 }
 
 void
-grn_ctx_set_next_expr(grn_ctx *ctx, grn_obj *expr)
+grn_ctx_set_keep_command(grn_ctx *ctx, grn_obj *command)
 {
-  ctx->impl->qe_next = expr;
+  ctx->impl->command.keep.command = command;
+  ctx->impl->command.keep.version = ctx->impl->command.version;
 }
 
 static void
@@ -1298,10 +1301,11 @@ grn_ctx_send(grn_ctx *ctx, const char *str, unsigned int str_len, int flags)
       grn_obj *expr = NULL;
 
       command_version = grn_ctx_get_command_version(ctx);
-      if (ctx->impl->qe_next) {
+      if (ctx->impl->command.keep.command) {
         grn_obj *val;
-        expr = ctx->impl->qe_next;
-        ctx->impl->qe_next = NULL;
+        expr = ctx->impl->command.keep.command;
+        ctx->impl->command.keep.command = NULL;
+        grn_ctx_set_command_version(ctx, ctx->impl->command.keep.version);
         if ((val = grn_expr_get_var_by_offset(ctx, expr, 0))) {
           grn_obj_reinit(ctx, val, GRN_DB_TEXT, 0);
           GRN_TEXT_PUT(ctx, val, str, str_len);
@@ -1323,7 +1327,7 @@ grn_ctx_send(grn_ctx *ctx, const char *str, unsigned int str_len, int flags)
         }
       }
       if (ctx->stat == GRN_CTX_QUITTING) { ctx->stat = GRN_CTX_QUIT; }
-      if (ctx->impl->qe_next) {
+      if (ctx->impl->command.keep.command) {
         ERRCLR(ctx);
       } else {
         if (ctx->impl->current_request_timer_id) {

  Modified: lib/grn_ctx.h (+1 -1)
===================================================================
--- lib/grn_ctx.h    2016-09-06 15:22:54 +0900 (8f794e6)
+++ lib/grn_ctx.h    2016-09-06 15:39:37 +0900 (f540c7b)
@@ -433,7 +433,7 @@ void grn_ctx_loader_clear(grn_ctx *ctx);
 void grn_log_reopen(grn_ctx *ctx);
 
 GRN_API grn_rc grn_ctx_sendv(grn_ctx *ctx, int argc, char **argv, int flags);
-GRN_API void grn_ctx_set_next_expr(grn_ctx *ctx, grn_obj *expr);
+void grn_ctx_set_keep_command(grn_ctx *ctx, grn_obj *command);
 
 grn_content_type grn_get_ctype(grn_obj *var);
 

  Modified: lib/grn_ctx_impl.h (+4 -1)
===================================================================
--- lib/grn_ctx_impl.h    2016-09-06 15:22:54 +0900 (42be6d0)
+++ lib/grn_ctx_impl.h    2016-09-06 15:39:37 +0900 (ceeeeb4)
@@ -160,7 +160,6 @@ struct _grn_ctx_impl {
   uint32_t stack_curr;
   grn_hash *expr_vars;
   grn_obj *curr_expr;
-  grn_obj *qe_next;
   grn_obj current_request_id;
   void *current_request_timer_id;
   void *parser;
@@ -196,6 +195,10 @@ struct _grn_ctx_impl {
   struct {
     int flags;
     grn_command_version version;
+    struct {
+      grn_obj *command;
+      grn_command_version version;
+    } keep;
   } command;
 
   /* match escalation portion */

  Modified: lib/proc.c (+2 -1)
===================================================================
--- lib/proc.c    2016-09-06 15:22:54 +0900 (8dd6a49)
+++ lib/proc.c    2016-09-06 15:39:37 +0900 (55798a0)
@@ -144,7 +144,8 @@ proc_load(grn_ctx *ctx, int nargs, grn_obj **args, grn_user_data *user_data)
   }
   if (ctx->impl->loader.stat != GRN_LOADER_END &&
       !(ctx->impl->command.flags & GRN_CTX_TAIL)) {
-    grn_ctx_set_next_expr(ctx, grn_proc_get_info(ctx, user_data, NULL, NULL, NULL));
+    grn_obj *command = grn_proc_get_info(ctx, user_data, NULL, NULL, NULL);
+    grn_ctx_set_keep_command(ctx, command);
   } else {
     if (ctx->impl->loader.rc != GRN_SUCCESS) {
       ctx->rc = ctx->impl->loader.rc;

  Modified: src/groonga.c (+1 -2)
===================================================================
--- src/groonga.c    2016-09-06 15:22:54 +0900 (522e9ef)
+++ src/groonga.c    2016-09-06 15:39:37 +0900 (8edfdee)
@@ -1308,7 +1308,7 @@ do_htreq_get(grn_ctx *ctx, ht_context *hc)
       }
     }
   }
-  grn_ctx_send(ctx, path, pathe - path, 0);
+  grn_ctx_send(ctx, path, pathe - path, GRN_CTX_TAIL);
 }
 
 typedef struct {
@@ -1637,7 +1637,6 @@ do_htreq(grn_ctx *ctx, ht_context *hc)
     do_htreq_post(ctx, hc);
     break;
   }
-  grn_ctx_set_next_expr(ctx, NULL);
   /* if (ctx->rc != GRN_OPERATION_WOULD_BLOCK) {...} */
   grn_msg_close(ctx, (grn_obj *)msg);
   /* if not keep alive connection */

  Modified: src/httpd/nginx-module/ngx_http_groonga_module.c (+1 -1)
===================================================================
--- src/httpd/nginx-module/ngx_http_groonga_module.c    2016-09-06 15:22:54 +0900 (0338ec7)
+++ src/httpd/nginx-module/ngx_http_groonga_module.c    2016-09-06 15:39:37 +0900 (f48d7cf)
@@ -699,7 +699,7 @@ ngx_http_groonga_handler_process_command_path(ngx_http_request_t *r,
   GRN_TEXT_PUTS(context, &uri, "/d/");
   GRN_TEXT_PUT(context, &uri, command_path->data, command_path->len);
   grn_ctx_send(context, GRN_TEXT_VALUE(&uri), GRN_TEXT_LEN(&uri),
-               GRN_NO_FLAGS);
+               GRN_CTX_TAIL);
   data->rc = context->rc;
   ngx_http_groonga_context_log_error(r->connection->log);
   GRN_OBJ_FIN(context, &uri);
-------------- next part --------------
HTML����������������������������...
Descargar 



More information about the Groonga-commit mailing list
Back to archive index