Releases: tarantool/vshard
0.1.34
Date: 17-06-2025
Tag: 0.1.34
Compatibility
VShard 0.1.34 is almost fully compatible with previous VShard versions. Hot-reloading from an older version to 0.1.34 works. However, hot-reloading from 0.1.34 or later to a version earlier than 0.1.34 does not work and requires additional steps. Either the following code must be executed before the hot-reload, or a restart should be performed:
Before hot-reload from new to old on router
local function worker_cancel(module)
local worker = module.worker
if worker ~= nil and worker.fiber ~= nil then
pcall(worker.fiber.cancel, worker.fiber)
end
end
local function replicaset_workers_cancel_all(replicasets)
for _, rs in pairs(replicasets) do
worker_cancel(rs)
for _, r in pairs(rs.replicas) do
worker_cancel(r)
end
end
end
-- Execute on routers before reload:
for _, router in pairs(vshard.router.internal.routers) do
replicaset_workers_cancel_all(router.replicasets)
end
-- Now hot reload can be done:
-- package.loaded['vshard.router'] = nil
-- vshard.router = require('vshard.router')
Before hot-reload from new to old on storage
local function worker_cancel(module)
local worker = module.worker
if worker ~= nil and worker.fiber ~= nil then
pcall(worker.fiber.cancel, worker.fiber)
end
end
local function replicaset_workers_cancel_all(replicasets)
for _, rs in pairs(replicasets) do
worker_cancel(rs)
for _, r in pairs(rs.replicas) do
worker_cancel(r)
end
end
end
-- Execute on storages before reload:
replicaset_workers_cancel_all(vshard.storage.internal.replicasets)
-- Now hot reload can be done:
-- package.loaded['vshard.storage'] = nil
-- vshard.storage = require('vshard.storage')
Ignoring these actions will result in duplicate internal services.
Functionality added or changed
-
vshard.storage.bucket_ref()
has been optimized and now works faster (#285). -
Master discovery has been optimized for better performance. However, the router can no longer discover multiple masters within a replicaset (#541, #549).
-
Introduced the
connection_fetch_schema
option, which allows disabling fetching schema in vshard connections (#408). -
bucket_ids
option in partialmap_callrw
can now be a key-value table in addition to an array. Whenbucket_ids
is key-value table, the values are treated as split arguments, which are passed only to the replicasets that have the corresponding buckets (#539). -
Introduced failover configuration options:
failover_sequential_fail_count
- how many failed requests must be done before marking replica as unhealthy;failover_interval
- how often replicas are pinged;failover_replica_lag_limit
- the maximum number of seconds replica can lag from master before it's marked as unhealthy (#505).
Bugs fixed
-
All types of read-only requests now skip dead replicas. Previously, it worked only for
callro
(#505). -
Fixed
vshard.storage.info()
, which incorrectly showed alerts for all connected replicas, e.g. disconnected anon replicas caused alert. Now only replicas from configuration are shown (#493). -
Fixed
vshard.storage.info()
, which could fail with LuaJIT error, if replica hadupstream = nil
inbox.info.replication
(#513). -
Fixed GC not deleting outdated bucket routes from memory (#546).
-
Fixed a router not retrying
TRANSFER_IN_PROGRESS
error (#548). -
Fixed the rebalancer being blocked for timeout of
map_callrw
request, when partialmap_callrw
failed with error (#554). -
Fixed the failover assertion failure during rolling upgrade, which happened, if router was upgraded earlier than storage (#556).
-
Fixed failover lowering priority of a replica, if replica was disconnected from a master even for a moment (#512).
0.1.33
0.1.32
Date: 12-03-2025
Tag: 0.1.32
Compatibility
VShard 0.1.32 is fully compatible with the previous VShard versions.
Functionality added or changed
- The function
vshard.router.bucket_discovery()
is no longer available. Previously it was marked as "Router internal API" (#503).
Bugs fixed
0.1.31
Date: 29-01-2025
Tag: 0.1.31
Compatibility
VShard 0.1.31 is fully compatible with the previous VShard versions.
Bugs fixed
0.1.30
Date: 14-10-2024
Tag: 0.1.30
Compatibility
VShard 0.1.30 is fully compatible with the previous VShard versions.
Functionality added or changed
- New option
bucket_ids
forvshard.router.map_callrw()
. It enables batch-call on a set of buckets on each of the affected replicasets. Like Map-Reduce, but on a subset of the cluster (#176).
0.1.29
0.1.28
Date: 30-08-2024
Tag: 0.1.28
Compatibility
VShard 0.1.28 is fully compatible with the previous VShard versions.
Functionality added or changed
- New option
request_timeout
was added torouter.call{ro/re/bro/bre}
requests. It must be<= timeout
and by default is equal totimeout
. When set, it controls how much time a single request to a replica may take, and when this time passes, router retries the request on the next replica in a round-robin manner as long astimeout
is not elapsed (#484).
Bugs fixed
- Router started accounting replicas not responding to pings and lowering their priority (#483).
0.1.27
Date: 29-04-2024
Tag: 0.1.27
Compatibility
VShard 0.1.27 is fully compatible with the previous VShard versions.
Functionality added or changed
vshard.router.info()
andvshard.storage.info()
now exposeidentification_mode
as it was specified in the config.vshard.storage.info()
now containsuri
field which contains the listen-URI of this instance and the user name which was used to configure the storage (#467).
Bugs fixed
- Router and storage, when had
master = 'auto'
in their configs, could be stuck unable to discover a new master when the old one would suddenly disappear without any info (tarantool/vshard-ee#4).
0.1.26
Date: 17-01-2024
Tag: 0.1.26
Compatibility
VShard 0.1.26 is fully compatible with the previous VShard versions.
Bugs fixed
- Fixed a bug in storage hot reload from earlier versions when named identification
name_as_key
was used in the config (gh-464). - Fixed the instance URIs in logs containing invalid IPv6 addresses when IPv6 was used.
0.1.25
Date: 21-12-2023
Tag: 0.1.25
Compatibility
VShard 0.1.25 is fully compatible with the previous VShard versions.
Functionality added or changed
- Added support of
master='auto'
on the storage side. It makes the storages dynamically track who of them is the master (no election, only tracking and automatic role switch) (gh-429). - Introduced
rebalancer
flag for replicas and replicasets to be able to choose manually who of them should run the rebalancer service (gh-432). - Introduced
rebalancer_mode
which can be used to enforce manual or automatic rebalancer assignment, or turn the rebalancer off completely (gh-432). - Config can be used with instance and replicaset names instead of UUIDs - for that there is a new option
identification_mode
. When specified asuuid_as_key
(default) the behaviour is like in 0.1.24 and before. The valuename_as_key
unlocks the new behaviour (gh-426).
Bugs fixed
- Fixed a bug when bucket recovery and GC could sometimes do a bit more work than needed in case manual
vshard.storage.bucket_send()
was used (gh-434). - Fixed a bug when
vshard.storage.send()
could false-positively fail in the end or the beginning of its work (gh-433). - Fixed a bug that the router couldn't call storage functions implemented in C or having their Lua body stored in
_func
(gh-436).