From e3b7f86075ad340f30dc45b10dea34695b695407 Mon Sep 17 00:00:00 2001 From: Cloud Wu Date: Tue, 21 Apr 2015 15:35:29 +0800 Subject: [PATCH] cluster reload should reset old connection to update address:port --- service/clusterd.lua | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/service/clusterd.lua b/service/clusterd.lua index 677f84fa..8d340b70 100644 --- a/service/clusterd.lua +++ b/service/clusterd.lua @@ -5,14 +5,6 @@ local cluster = require "cluster.core" local config_name = skynet.getenv "cluster" local node_address = {} - -local function loadconfig() - local f = assert(io.open(config_name)) - local source = f:read "*a" - f:close() - assert(load(source, "@"..config_name, "t", node_address))() -end - local node_session = {} local command = {} @@ -37,6 +29,24 @@ end local node_channel = setmetatable({}, { __index = open_channel }) +local function loadconfig() + local f = assert(io.open(config_name)) + local source = f:read "*a" + f:close() + local tmp = {} + assert(load(source, "@"..config_name, "t", tmp))() + for name,address in pairs(tmp) do + assert(type(address) == "string") + if node_address[name] ~= address then + -- address changed + if rawget(node_channel, name) then + node_channel[name] = nil -- reset connection + end + node_address[name] = address + end + end +end + function command.reload() loadconfig() skynet.ret(skynet.pack(nil))