From 67e893abded4877b3d1d9024def4aaf5e4764a4f Mon Sep 17 00:00:00 2001 From: Konstantin Osipov <kostja@tarantool.org> Date: Tue, 2 Sep 2014 19:13:04 +0400 Subject: [PATCH] A fix fog gh-452 crash hot_standby test Recovery now needs to be run in a non-sched fiber. Create a fiber for it in on_bind callback. On another token: - rename snap_daemon to snapshot_daemon - don't output redundant snap_daemon prefix in the log, it's already in the fiber name. - miscallenous cleanups (roles). --- src/box/CMakeLists.txt | 2 +- src/box/alter.cc | 2 +- src/box/box.cc | 2 +- src/box/lua/call.cc | 4 +- .../{snap_daemon.lua => snapshot_daemon.lua} | 48 +++++++++---------- src/errcode.h | 3 +- src/iproto.cc | 9 +++- test/box/misc.result | 1 + test/box/session.storage.result | 2 +- 9 files changed, 39 insertions(+), 34 deletions(-) rename src/box/lua/{snap_daemon.lua => snapshot_daemon.lua} (79%) diff --git a/src/box/CMakeLists.txt b/src/box/CMakeLists.txt index 867cfb0404..896003798e 100644 --- a/src/box/CMakeLists.txt +++ b/src/box/CMakeLists.txt @@ -7,7 +7,7 @@ lua_source(lua_sources lua/load_cfg.lua) lua_source(lua_sources lua/schema.lua) lua_source(lua_sources lua/tuple.lua) lua_source(lua_sources lua/session.lua) -lua_source(lua_sources lua/snap_daemon.lua) +lua_source(lua_sources lua/snapshot_daemon.lua) set(bin_sources) bin_source(bin_sources bootstrap.snap bootstrap.h) diff --git a/src/box/alter.cc b/src/box/alter.cc index 6e2c55d1df..b759b6dd36 100644 --- a/src/box/alter.cc +++ b/src/box/alter.cc @@ -1214,7 +1214,7 @@ user_create_from_tuple(struct user *user, struct tuple *tuple) if (tuple_field_count(tuple) > AUTH_MECH_LIST) { const char *auth_data = tuple_field(tuple, AUTH_MECH_LIST); if (user->type == SC_ROLE && strlen(auth_data)) { - tnt_raise(ClientError, ER_CREATE_USER, + tnt_raise(ClientError, ER_CREATE_ROLE, user->name, "authentication data can not be set for " "a role"); } diff --git a/src/box/box.cc b/src/box/box.cc index 1a61f5cb6e..0228087e5b 100644 --- a/src/box/box.cc +++ b/src/box/box.cc @@ -287,7 +287,7 @@ boxk(enum iproto_type type, uint32_t space_id, const char *format, ...) /** * @brief Called when recovery/replication wants to add a new server * to cluster. - * cluster_add_server() is called as a commit trigger on _cluster + * cluster_add_server() is called as a commit trigger on jcluster * space and actually adds the server to the cluster. * @param server_uuid */ diff --git a/src/box/lua/call.cc b/src/box/lua/call.cc index 69c26af4d3..4a394417a3 100644 --- a/src/box/lua/call.cc +++ b/src/box/lua/call.cc @@ -54,12 +54,12 @@ extern char session_lua[], schema_lua[], load_cfg_lua[], - snap_daemon_lua[]; + snapshot_daemon_lua[]; static const char *lua_sources[] = { session_lua, schema_lua, - snap_daemon_lua, + snapshot_daemon_lua, load_cfg_lua, NULL }; diff --git a/src/box/lua/snap_daemon.lua b/src/box/lua/snapshot_daemon.lua similarity index 79% rename from src/box/lua/snap_daemon.lua rename to src/box/lua/snapshot_daemon.lua index aec2d047bf..b482cc53c4 100644 --- a/src/box/lua/snap_daemon.lua +++ b/src/box/lua/snapshot_daemon.lua @@ -15,7 +15,7 @@ do -- create snapshot, return true if no errors local function snapshot() - log.info("%s: making snapshot...", PREFIX) + log.info("making snapshot...") local s, e = pcall(function() box.snapshot() end) if s then return true @@ -24,7 +24,7 @@ do if errno() == errno.EEXIST then return false end - log.error("%s: error while creating snapshot: %s", PREFIX, e) + log.error("error while creating snapshot: %s", e) return false end @@ -52,14 +52,13 @@ do local snap_name = sprintf('%020d.snap', tonumber(lsn)) if fio.basename(last_snap) == snap_name then - log.debug('%s: snapshot %s is already exists', PREFIX, last_snap) + log.debug('snapshot file %s already exists', last_snap) return false end local snstat = fio.stat(last_snap) if snstat == nil then - log.error("%s: Can't stat %s: %s", - PREFIX, snaps[#snaps], errno.strerror()) + log.error("can't stat %s: %s", snaps[#snaps], errno.strerror()) return false end if snstat.mtime <= fiber.time() + box.cfg.snapshot_period then @@ -72,7 +71,8 @@ do local snaps = fio.glob(fio.pathjoin(box.cfg.snap_dir, '*.snap')) if snaps == nil then - log.error("%s: Can't read snap_dir: %s", PREFIX, errno.strerror()) + log.error("can't read snap_dir %s: %s", box.cfg.snap_dir, + errno.strerror()) return end @@ -94,7 +94,8 @@ do snaps = fio.glob(fio.pathjoin(box.cfg.snap_dir, '*.snap')) local xlogs = fio.glob(fio.pathjoin(box.cfg.wal_dir, '*.xlog')) if xlogs == nil then - log.error("%s: Can't read wal_dir: %s", PREFIX, errno.strerror()) + log.error("can't read wal_dir %s: %s", box.cfg.wal_dir, + errno.strerror()) return end @@ -102,10 +103,10 @@ do local rm = snaps[1] table.remove(snaps, 1) - log.info("%s: Removing old snapshot %s", PREFIX, rm) + log.info("removing old snapshot %s", rm) if not fio.unlink(rm) then - log.error("%s: Error while removing %s: %s", - PREFIX, rm, errno.strerror()) + log.error("error while removing %s: %s", + rm, errno.strerror()) return end end @@ -129,11 +130,11 @@ do local rm = xlogs[1] table.remove(xlogs, 1) - log.info("%s: Removing old xlog %s", PREFIX, rm) + log.info("removing old xlog %s", rm) if not fio.unlink(rm) then - log.error("%s: Error while removing %s: %s", - PREFIX, rm, errno.strerror()) + log.error("error while removing %s: %s", + rm, errno.strerror()) return end end @@ -179,7 +180,7 @@ do local function daemon_fiber(self) fiber.name(PREFIX) - log.info("%s: status: %s", PREFIX, self.status) + log.info("%s", self.status) while true do local interval = next_snap_interval() fiber.sleep(interval) @@ -190,11 +191,11 @@ do local s, e = pcall(process) if not s then - log.error("%s: %s", PREFIX, e) + log.error(e) end end - log.info("%s: status: %s", PREFIX, self.status) - log.info("%s: finished daemon fiber", PREFIX) + log.info("%s", self.status) + log.info("finished daemon fiber") end setmetatable(daemon, { @@ -202,8 +203,7 @@ do start = function() local daemon = box.internal[PREFIX] or daemon if daemon.status == 'started' then - error( - sprintf("%s: %s", PREFIX, "Daemon is already started")) + error("snapshot daemon has already been started") end daemon.status = 'started' daemon.fiber = fiber.create(daemon_fiber, daemon) @@ -212,8 +212,7 @@ do stop = function() local daemon = box.internal[PREFIX] or daemon if daemon.status == 'stopped' then - error( - sprintf('%s: %s', PREFIX, "Daemon is already stopped")) + error("snapshot daemon has already been stopped") end daemon.status = 'stopped' if daemon.fiber ~= nil then @@ -224,8 +223,8 @@ do set_snapshot_period = function(snapshot_period) local daemon = box.internal[PREFIX] or daemon - log.info("%s: new snapshot_period: %s", PREFIX, - tostring(snapshot_period)) + log.info("new snapshot period is %s", + tostring(snapshot_period)) if daemon.fiber ~= nil then daemon.fiber:wakeup() end @@ -234,8 +233,7 @@ do set_snapshot_count = function(snapshot_count) local daemon = box.internal[PREFIX] or daemon - log.info("%s: new snapshot_count: %s", - PREFIX, tostring(snapshot_count)) + log.info("new snapshot count is %s", tostring(snapshot_count)) if daemon.fiber ~= nil then daemon.fiber:wakeup() diff --git a/src/errcode.h b/src/errcode.h index 86c1def569..26cbd75352 100644 --- a/src/errcode.h +++ b/src/errcode.h @@ -132,7 +132,8 @@ enum { TNT_ERRMSG_MAX = 512 }; /* 80 */_(ER_NO_ACTIVE_TRANSACTION, 2, "Operation is not permitted when there is no active transaction ") \ /* 81 */_(ER_CROSS_ENGINE_TRANSACTION, 2, "A multi-statement transaction can not use multiple storage engines") \ /* 82 */_(ER_NO_SUCH_ROLE, 2, "Role '%s' is not found") \ - /* 46 */_(ER_ROLE_EXISTS, 2, "Role '%s' already exists") \ + /* 83 */_(ER_ROLE_EXISTS, 2, "Role '%s' already exists") \ + /* 84 */_(ER_CREATE_ROLE, 2, "Failed to create role '%s': %s") \ /* * !IMPORTANT! Please follow instructions at start of the file diff --git a/src/iproto.cc b/src/iproto.cc index c4497b74b2..eefc3b7130 100644 --- a/src/iproto.cc +++ b/src/iproto.cc @@ -831,6 +831,12 @@ iproto_on_accept(struct evio_service * /* service */, int fd, iproto_queue_push(&request_queue, ireq); } +static void on_bind(void *arg __attribute__((unused))) +{ + fiber_call(fiber_new("leave_local_hot_standby", + (fiber_func) box_leave_local_standby_mode)); +} + /** Initialize a read-write port. */ void iproto_init(const char *uri) @@ -843,8 +849,7 @@ iproto_init(const char *uri) evio_service_init(loop(), &primary, "primary", uri, iproto_on_accept, NULL); - evio_service_on_bind(&primary, - box_leave_local_standby_mode, NULL); + evio_service_on_bind(&primary, on_bind, NULL); evio_service_start(&primary); mempool_create(&iproto_request_pool, &cord()->slabc, diff --git a/test/box/misc.result b/test/box/misc.result index 833adfe903..3b77040316 100644 --- a/test/box/misc.result +++ b/test/box/misc.result @@ -193,6 +193,7 @@ t; - 'box.error.CREATE_USER : 43' - 'box.error.CREATE_SPACE : 9' - 'box.error.UNKNOWN_SCHEMA_OBJECT : 49' + - 'box.error.CREATE_ROLE : 84' - 'box.error.ROLE_EXISTS : 83' - 'box.error.NO_SUCH_ROLE : 82' - 'box.error.NO_ACTIVE_TRANSACTION : 80' diff --git a/test/box/session.storage.result b/test/box/session.storage.result index a292e1b2f2..b10f215b10 100644 --- a/test/box/session.storage.result +++ b/test/box/session.storage.result @@ -31,7 +31,7 @@ all = getmetatable(session).aggregate_storage ... dump(all) --- -- '''[null,null,{"abc":"cde"}]''' +- '''[null,null,null,{"abc":"cde"}]''' ... --# create connection second to default --# set connection second -- GitLab