protected void channelRead0()

in runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/PrepareConfHandler.java [55:85]


    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);
    }