Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 30 additions & 28 deletions examples/kv/key-value-store/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -22,51 +22,53 @@ local memtx_memory = tonumber(os.getenv("TARANTOOL_MEMTX_MEMORY")) or (128 * 102

local http_port = os.getenv("TARANTOOL_HTTP_PORT") or 8081

local fiber = require('fiber')
local log = require('log')

local http_client = require('http.client')
local http_server = require('http.server')
--- [HACK] Probing node via membership
local function dns_resolver(opts)
opts = opts or {}
opts.timeout = opts.timeout or 100

local function resolve_uri(uri, timeout)
if not uri then
return nil, "Pass URI in the next format: uri:port"
end
local membership = require('membership')

timeout = timeout or 10
-- local uri, port = uri:match("(^.*)%:(.*)")
local resolved = false

local server_options = {
log_errors = true,
log_requests = log.debug
}
local hostname, port = advertise_uri:match("^(.*)%:(.*)")
local ok, err = membership.init(hostname, tonumber(port))
if not ok then
log.error("[dns_resolver] Can't init a membership. Error: %s", err)
os.exit(1)
end

local srv = http_server.new("0.0.0.0", "3301", server_options)
srv:route({ path = '/dns_resolver', method = 'GET' }, function(_) return { status = 200, text = 'Success' } end)
srv:start()
membership.set_encryption_key('test')
membership.set_payload('alias', '__' .. advertise_uri)

local time = 0
while time < timeout do
local resp = http_client.get(uri .. '/dns_resolver')
if resp.status ~= nil and resp.status == 200 then
local resolved = false
while time < opts.timeout do
local ok = membership.probe_uri(membership.myself().uri)
if ok then
resolved = true
break
else
print('Not resolved yet')
end

log.info("DNS resolution has been failed. Trying to probe it again...")
fiber.sleep(1)
time = time + 1
end
srv:stop()

return resolved
membership.leave()
if not resolved then
return false
end

return true
end

local t = resolve_uri(advertise_uri, 50)
if not t then os.exit(1) end
fiber.sleep(5)
local resolved = dns_resolver({ timeout = 60 })
if not resolved then
log.error("[dns_resolver] Instance has not been resolved")
os.exit(1)
end
--- End of hack

local ok, err = cartridge.cfg({
alias = instance_name,
Expand Down