in apisix/runner/server/handle.py [0:0]
def dispatch(self) -> flatbuffers.Builder:
# init builder
builder = runner_utils.new_builder()
# parse request
req = NewHttpRequest(self.r)
if self.r.request.ty == runner_utils.RPC_PREPARE_CONF:
# generate token
token = runner_cache.generate_token()
# get plugins config
configs = req.get_configs()
# cache plugins config
ok = runner_cache.set_config_by_token(token, configs)
if not ok:
self.r.log.error("token `%d` cache setting failed" % token)
req.code = ErrCode.CONF_TOKEN_NOT_FOUND
req.unknown_handler(builder)
return builder
req.set_conf_token(token)
ok = req.config_handler(builder)
if not ok:
self.r.log.error("prepare conf request failure")
req.code = ErrCode.BAD_REQUEST
req.unknown_handler(builder)
return builder
return builder
elif self.r.request.ty == runner_utils.RPC_HTTP_REQ_CALL:
# get request token
token = req.get_conf_token()
# get plugins
configs = runner_cache.get_config_by_token(token)
if len(configs) == 0:
self.r.log.error("token `%d` cache acquisition failed" % token)
req.code = ErrCode.CONF_TOKEN_NOT_FOUND
req.unknown_handler(builder)
return builder
# init response
resp = NewHttpResponse()
resp.set_req_id(req.get_id())
# execute plugins
ok = runner_plugin.execute(configs, self.r, req, resp)
if not ok:
req.code = ErrCode.SERVICE_UNAVAILABLE
req.unknown_handler(builder)
return builder
# response changed
ok = resp.call_handler(builder)
if ok:
return builder
# request changed
ok = req.call_handler(builder)
if not ok:
self.r.log.error("http request call failure")
req.code = ErrCode.BAD_REQUEST
req.unknown_handler(builder)
return builder
return builder
else:
self.r.log.error("unknown request")
req.code = ErrCode.BAD_REQUEST
req.unknown_handler(builder)
return builder