Skip to content

bug: Why write confToken twice when writing back to API SIX #320

@tricker-king

Description

@tricker-king

Issue description

Why write confToken twice when writing back to API SIX

Environment

jdk11

  • your apisix-java-plugin-runner version
    0.5

Minimal test code / Steps to reproduce the issue

protected void channelRead0(ChannelHandlerContext ctx, A6Request request) {
    if (request.getType() != Constants.RPC_PREPARE_CONF) {
        ctx.fireChannelRead(request);
        return;
    }

    Req req = ((A6ConfigRequest) request).getReq();
    long confToken = ThreadLocalRandom.current().nextInt(Integer.MAX_VALUE);
    A6Response response = new A6ConfigResponse(confToken);
    long token = ((A6ConfigResponse) response).getConfToken();
    PluginFilterChain chain = createFilterChain(req);

    /*
     * to reset vtable_start and vtable_size of req,
     * so that req can be reused after being got from the cache.
     * {@link org.apache.apisix.plugin.runner.handler.A6HttpCallHandler#handle cache.getIfPresent()}
     * @see <a href="Issues63"> https://github.com/apache/apisix-java-plugin-runner/issues/63</a>
     * */
    Map<String, String> config = new HashMap<>();
    for (int i = 0; i < req.confLength(); i++) {
        TextEntry conf = req.conf(i);
        config.put(conf.name(), conf.value());
    }
    A6Conf a6Conf = new A6Conf(config, chain);
    cache.put(token, a6Conf);
    for (A6ConfigWatcher watcher : watchers) {
        watcher.watch(token, a6Conf);
    }
    ctx.write(response);
    ctx.writeAndFlush(response);
}

What's the actual result? (including assertion message & call stack if applicable)

What's the expected result?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions