[GitHub] [apisix] spacewander commented on a change in pull request #2965: feat: use luasocket instead of curl in etcd.lua

2020-12-25 Thread GitBox


spacewander commented on a change in pull request #2965:
URL: https://github.com/apache/apisix/pull/2965#discussion_r548829822



##
File path: apisix/cli/etcd.lua
##
@@ -179,14 +179,14 @@ function _M.init(env, show_output)
 
 local post_json_auth = dkjson.encode(json_auth)
 local response_body = {}
-local _, err = http.request{url = auth_url, method = "POST",
+local res, err = http.request{url = auth_url, method = "POST",
 source = 
ltn12.source.string(post_json_auth),
 sink = ltn12.sink.table(response_body),
 headers = {["Content-Length"] = 
#post_json_auth}}
 -- In case of failure, request returns nil followed by an error 
message.
 -- Else the first return value is just the number 1

Review comment:
   Got it





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [apisix] spacewander commented on a change in pull request #2965: feat: use luasocket instead of curl in etcd.lua

2020-12-24 Thread GitBox


spacewander commented on a change in pull request #2965:
URL: https://github.com/apache/apisix/pull/2965#discussion_r548827770



##
File path: apisix/cli/etcd.lua
##
@@ -179,14 +179,14 @@ function _M.init(env, show_output)
 
 local post_json_auth = dkjson.encode(json_auth)
 local response_body = {}
-local _, err = http.request{url = auth_url, method = "POST",
+local res, err = http.request{url = auth_url, method = "POST",
 source = 
ltn12.source.string(post_json_auth),
 sink = ltn12.sink.table(response_body),
 headers = {["Content-Length"] = 
#post_json_auth}}
 -- In case of failure, request returns nil followed by an error 
message.
 -- Else the first return value is just the number 1

Review comment:
   The first return value isn't the response body?





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [apisix] spacewander commented on a change in pull request #2965: feat: use luasocket instead of curl in etcd.lua

2020-12-24 Thread GitBox


spacewander commented on a change in pull request #2965:
URL: https://github.com/apache/apisix/pull/2965#discussion_r548771546



##
File path: apisix/cli/etcd.lua
##
@@ -160,31 +163,38 @@ function _M.init(env, show_output)
 for index, host in ipairs(yaml_conf.etcd.host) do
 local is_success = true
 
-local token_head = ""
+local errmsg
+local auth_token
 local user = yaml_conf.etcd.user
 local password = yaml_conf.etcd.password
 if user and password then
-local uri_auth = host .. "/v3/auth/authenticate"
+local auth_url = host .. "/v3/auth/authenticate"
 local json_auth = {
 name =  etcd_conf.user,
 password = etcd_conf.password
 }
-local post_json_auth = dkjson.encode(json_auth)
-local cmd_auth = "curl -s " .. uri_auth .. " -X POST -d '" ..
- post_json_auth .. "' --connect-timeout " .. 
timeout
- .. " --max-time " .. timeout * 2 .. " --retry 1 
2>&1"
 
-local res_auth = util.execute_cmd(cmd_auth)
-local body_auth, _, err_auth = dkjson.decode(res_auth)
-if err_auth then
-util.die(cmd_auth, "\n", res_auth)
+local post_json_auth = dkjson.encode(json_auth)
+local response_body = {}
+local _, err = http.request{url = auth_url, method = "POST",
+source = 
ltn12.source.string(post_json_auth),
+sink = ltn12.sink.table(response_body),
+headers = {["Content-Length"] = 
#post_json_auth}}
+-- err is string type
+if err and type(err) == "string" then

Review comment:
   I think it would be better to use `if not res then handle err`? Since 
the first argument is nil when error happened. This way is more normal.





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [apisix] spacewander commented on a change in pull request #2965: feat: use luasocket instead of curl in etcd.lua

2020-12-24 Thread GitBox


spacewander commented on a change in pull request #2965:
URL: https://github.com/apache/apisix/pull/2965#discussion_r548771546



##
File path: apisix/cli/etcd.lua
##
@@ -160,31 +163,38 @@ function _M.init(env, show_output)
 for index, host in ipairs(yaml_conf.etcd.host) do
 local is_success = true
 
-local token_head = ""
+local errmsg
+local auth_token
 local user = yaml_conf.etcd.user
 local password = yaml_conf.etcd.password
 if user and password then
-local uri_auth = host .. "/v3/auth/authenticate"
+local auth_url = host .. "/v3/auth/authenticate"
 local json_auth = {
 name =  etcd_conf.user,
 password = etcd_conf.password
 }
-local post_json_auth = dkjson.encode(json_auth)
-local cmd_auth = "curl -s " .. uri_auth .. " -X POST -d '" ..
- post_json_auth .. "' --connect-timeout " .. 
timeout
- .. " --max-time " .. timeout * 2 .. " --retry 1 
2>&1"
 
-local res_auth = util.execute_cmd(cmd_auth)
-local body_auth, _, err_auth = dkjson.decode(res_auth)
-if err_auth then
-util.die(cmd_auth, "\n", res_auth)
+local post_json_auth = dkjson.encode(json_auth)
+local response_body = {}
+local _, err = http.request{url = auth_url, method = "POST",
+source = 
ltn12.source.string(post_json_auth),
+sink = ltn12.sink.table(response_body),
+headers = {["Content-Length"] = 
#post_json_auth}}
+-- err is string type
+if err and type(err) == "string" then

Review comment:
   I think it would be better to use `if not res then handle err`? Since 
the first argument is nil when error happened.





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [apisix] spacewander commented on a change in pull request #2965: feat: use luasocket instead of curl in etcd.lua

2020-12-24 Thread GitBox


spacewander commented on a change in pull request #2965:
URL: https://github.com/apache/apisix/pull/2965#discussion_r548537555



##
File path: apisix/cli/etcd.lua
##
@@ -160,31 +163,38 @@ function _M.init(env, show_output)
 for index, host in ipairs(yaml_conf.etcd.host) do
 local is_success = true
 
-local token_head = ""
+local errmsg
+local auth_token
 local user = yaml_conf.etcd.user
 local password = yaml_conf.etcd.password
 if user and password then
-local uri_auth = host .. "/v3/auth/authenticate"
+local auth_url = host .. "/v3/auth/authenticate"
 local json_auth = {
 name =  etcd_conf.user,
 password = etcd_conf.password
 }
-local post_json_auth = dkjson.encode(json_auth)
-local cmd_auth = "curl -s " .. uri_auth .. " -X POST -d '" ..
- post_json_auth .. "' --connect-timeout " .. 
timeout
- .. " --max-time " .. timeout * 2 .. " --retry 1 
2>&1"
 
-local res_auth = util.execute_cmd(cmd_auth)
-local body_auth, _, err_auth = dkjson.decode(res_auth)
-if err_auth then
-util.die(cmd_auth, "\n", res_auth)
+local post_json_auth = dkjson.encode(json_auth)
+local response_body = {}
+local _, err = http.request{url = auth_url, method = "POST",
+source = 
ltn12.source.string(post_json_auth),
+sink = ltn12.sink.table(response_body),
+headers = {["Content-Length"] = 
#post_json_auth}}
+-- err is string type
+if err and type(err) == "string" then

Review comment:
   I mean, why we need to check the type of `err`? We need to clarify it in 
the comment, so that people can know it without searching luasocket's doc. 





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [apisix] spacewander commented on a change in pull request #2965: feat: use luasocket instead of curl in etcd.lua

2020-12-23 Thread GitBox


spacewander commented on a change in pull request #2965:
URL: https://github.com/apache/apisix/pull/2965#discussion_r548434807



##
File path: apisix/cli/etcd.lua
##
@@ -160,31 +163,38 @@ function _M.init(env, show_output)
 for index, host in ipairs(yaml_conf.etcd.host) do
 local is_success = true
 
-local token_head = ""
+local errmsg
+local auth_token
 local user = yaml_conf.etcd.user
 local password = yaml_conf.etcd.password
 if user and password then
-local uri_auth = host .. "/v3/auth/authenticate"
+local auth_url = host .. "/v3/auth/authenticate"
 local json_auth = {
 name =  etcd_conf.user,
 password = etcd_conf.password
 }
-local post_json_auth = dkjson.encode(json_auth)
-local cmd_auth = "curl -s " .. uri_auth .. " -X POST -d '" ..
- post_json_auth .. "' --connect-timeout " .. 
timeout
- .. " --max-time " .. timeout * 2 .. " --retry 1 
2>&1"
 
-local res_auth = util.execute_cmd(cmd_auth)
-local body_auth, _, err_auth = dkjson.decode(res_auth)
-if err_auth then
-util.die(cmd_auth, "\n", res_auth)
+local post_json_auth = dkjson.encode(json_auth)
+local response_body = {}
+local _, err = http.request{url = auth_url, method = "POST",
+source = 
ltn12.source.string(post_json_auth),
+sink = ltn12.sink.table(response_body),
+headers = {["Content-Length"] = 
#post_json_auth}}
+-- err is string type
+if err and type(err) == "string" then

Review comment:
   Better to add more info about the `err` handle, so that people can know 
what you are doing without looking into luasocket's doc.





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [apisix] spacewander commented on a change in pull request #2965: feat: use luasocket instead of curl in etcd.lua

2020-12-06 Thread GitBox


spacewander commented on a change in pull request #2965:
URL: https://github.com/apache/apisix/pull/2965#discussion_r537210013



##
File path: .travis/apisix_cli_test.sh
##
@@ -817,3 +817,53 @@ fi
 done
 
 echo "passed: etcd auth enabled and init kv has been set up correctly"
+
+# check etcd connect refused
+git checkout conf/config.yaml
+
+echo '
+etcd:
+  host:
+- "http://127.0.0.1:2389;
+  prefix: "/apisix"
+' > conf/config.yaml
+
+make init &>/tmp/apisix_temp &

Review comment:
   @starsz 
   You can try this way:
   
https://github.com/apache/apisix/blob/c41aa8534a18f43ef0c3cd6780f106595f9f9b88/.travis/apisix_cli_test_in_ci.sh#L43





This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [apisix] spacewander commented on a change in pull request #2965: feat: use luasocket instead of curl in etcd.lua

2020-12-04 Thread GitBox


spacewander commented on a change in pull request #2965:
URL: https://github.com/apache/apisix/pull/2965#discussion_r535974232



##
File path: .travis/apisix_cli_test.sh
##
@@ -817,3 +817,53 @@ fi
 done
 
 echo "passed: etcd auth enabled and init kv has been set up correctly"
+
+# check etcd connect refused
+git checkout conf/config.yaml
+
+echo '
+etcd:
+  host:
+- "http://127.0.0.1:2389;
+  prefix: "/apisix"
+' > conf/config.yaml
+
+make init &>/tmp/apisix_temp &

Review comment:
   Why need to run in the background?

##
File path: apisix/cli/etcd.lua
##
@@ -106,9 +111,6 @@ function _M.init(env, show_output)
 
 local etcd_conf = yaml_conf.etcd
 
-local timeout = etcd_conf.timeout or 3

Review comment:
   Should allow configuring timeout in the new way

##
File path: apisix/cli/etcd.lua
##
@@ -132,22 +134,23 @@ function _M.init(env, show_output)
 
 -- check the etcd cluster version
 for index, host in ipairs(yaml_conf.etcd.host) do
-uri = host .. "/version"
-local cmd = str_format("curl -s -m %d %s", timeout * 2, uri)
-local res = util.execute_cmd(cmd)
-local errmsg = str_format("got malformed version message: \"%s\" from 
etcd\n",
-  res)
+local version_url = host .. "/version"
+local errmsg
 
-local body, _, err = dkjson.decode(res)
-if err then
+local res, err = http.request(version_url)

Review comment:
   Look like this library doesn't support max-timeout? Only operation level 
timeout is supported.

##
File path: .travis/apisix_cli_test.sh
##
@@ -817,3 +817,53 @@ fi
 done
 
 echo "passed: etcd auth enabled and init kv has been set up correctly"
+
+# check etcd connect refused
+git checkout conf/config.yaml
+
+echo '
+etcd:
+  host:
+- "http://127.0.0.1:2389;
+  prefix: "/apisix"
+' > conf/config.yaml
+
+make init &>/tmp/apisix_temp &
+sleep 1
+if [`grep -c "connection refused" /tmp/apisix_temp` -ne '1']; then
+echo "failed: not output connection refused"
+exit 1
+fi
+
+echo "passed: show connection refused info successfully"
+
+# check etcd auth error
+git checkout conf/config.yaml
+
+export ETCDCTL_API=3
+etcdctl version
+etcdctl --endpoints=127.0.0.1:2379 user add "root:apache-api6"

Review comment:
   Need to clean the user/role after running the test

##
File path: apisix/cli/etcd.lua
##
@@ -191,26 +206,36 @@ function _M.init(env, show_output)
 
 local key =  (etcd_conf.prefix or "") .. dir_name .. "/"
 
-local uri = host .. "/v3/kv/put"
+local put_url = host .. "/v3/kv/put"
 local post_json = '{"value":"' .. base64_encode("init_dir")
   .. '", "key":"' .. base64_encode(key) .. '"}'
-local cmd = "curl " .. uri .. token_head .. " -X POST -d '" .. 
post_json
-.. "' --connect-timeout " .. timeout
-.. " --max-time " .. timeout * 2 .. " --retry 1 2>&1"
+local response_body = {}
+local headers = {["Content-Length"] = #post_json}
+if auth_token then
+headers["Authorization"] = auth_token
+end
 
-local res = util.execute_cmd(cmd)
-if res:find("error", 1, true) then
+local _, err = http.request{url = put_url, method = "POST",
+source = 
ltn12.source.string(post_json),
+sink = ltn12.sink.table(response_body),
+headers = headers}
+if err and type(err) == "string" then
+errmsg = str_format("request etcd endpoint \"%s\" error, 
%s\n", host, err)

Review comment:
   Better to log the full uri

##
File path: apisix/cli/etcd.lua
##
@@ -132,22 +134,23 @@ function _M.init(env, show_output)
 
 -- check the etcd cluster version
 for index, host in ipairs(yaml_conf.etcd.host) do
-uri = host .. "/version"
-local cmd = str_format("curl -s -m %d %s", timeout * 2, uri)
-local res = util.execute_cmd(cmd)
-local errmsg = str_format("got malformed version message: \"%s\" from 
etcd\n",
-  res)
+local version_url = host .. "/version"
+local errmsg
 
-local body, _, err = dkjson.decode(res)
-if err then
+local res, err = http.request(version_url)
+if err and type(err) == "string" then
+errmsg = str_format("request etcd endpoint \'%s\' error, %s\n", 
host, err)

Review comment:
   Better to log the full uri

##
File path: apisix/cli/etcd.lua
##
@@ -160,27 +163,39 @@ function _M.init(env, show_output)
 for index, host in ipairs(yaml_conf.etcd.host) do
 local is_success = true
 
-local token_head = ""
+local errmsg
+