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