As a Roblox developer, it is currently too hard to properly migrate servers to the latest update in a timely manner without compromising the player experience. After publishing an update, developers have three options:
Do nothing and wait hours/days until all old servers shut down naturally
Shut Down All Servers (everyone gets kicked out)
Use the “Migrate to Latest Update” feature (players in old servers get moved to new servers)
This feature request is specifically about point 3. While it already curbs a lot of the pain of migrating players to new servers (since this process is automatic), certain games would benefit from being able to hook into this signal and delay the actual migration process on a per-server basis.
Take any round-based game for example. It is not a good experience for the players to be in the middle of a session only for that session to be interrupted so that they can be moved to a new version. Instead, the server could wait until that session finishes, and only then migrate to the latest version.
Therefore, I propose that Roblox exposes an engine API to handle this. This API should allow developers to:
React and apply custom logic (e.g. notify players of the upcoming migration, disable certain features from being used, prevent the next session from being started, other custom cleanup, etc.)
Delay the actual migration process for that server, ideally for as long as the developer deems appropriate for their experience/server.
Naturally this will increase the timeframe over which the servers are migrated, but it is likely an acceptable compromise.
Here is a prototype I can think of. They could probably come up with a better name for the signal:
game.OnMigrateToLatestServerSignal = function()
if *game is in intermission* then
return — This server can be migrated!
else
RoundService.RoundEnded:wait()
end
end
This is all game-specific logic of course. What or how you do it is up to you and will have to be implemented by yourself (I’m giving examples of what can be done in response to such a signal if it existed)
It could also offer a property UpdateService.ManuallyHandleMigration to tell the engine to wait for this function to be called when the developer migrates to the latest update. An option to force immediate migration would be given the developer when migrating to override this.
It could also offer other methods like :CheckForUpdate() and maybe even a way for developers to add changelogs with their updates, and a :GetChangelog() method that can enumerate versions in a similar fashion to DataStorePages
I would like this as a feature too, an API dedicated for this like @nuttolum demonstrated (my preffered) or something like @sata5pa3da have shown would really make update migrations pretty easier. I just wanted to make sure if you think that making a similar system yourself is not possible or do you just want a built-in feature / API for handling update migrations. I personally never tried or seen such a thing but even “migrating” servers individually might be possible actually, you can check if the servers outdated and (maybe?) teleport players to an up-to-date server on certain conditions like if the round has ended, also without forcing them to leave the game (shutting the server down).
FWIW when I was making this feature request I was thinking about something similar to what @sata5pa3da came up with (dev provides a callback that can yield until the server can be migrated, if no callback provided then migrate right away). Just didn’t want to specify a particular API because the engineering team would probably know the most suitable way for this.
Would love to see this! I fear I’m going to end up repeating what others have said, but us at Heroes Battlegrounds would benefit from this as well, despite not necessarily being round based.
We occasionally have a boss spawn in all public servers that gives rewards when killed. Users often complain after updates that the boss couldn’t be killed before the server restarted.
We have ranked 1v1/2v2 lobbies. People being torn out of their game isn’t very good UX, so would be nice to delay the server restart until their match is done.
It’d be nice if we could receive a signal that the servers are going to migrate, show all users a warning, and restart after X amount of time (in other words, tell Roblox this server is ready to migrate). This is already possible with MessagingService before running migration obviously, but consolidation would be very appreciated. We sometimes forget to warn users ahead of time of shutdowns.
an alternative is to let us ‘Close’ a server, so that no more new players can join into that server.
as a result, that server will be starved of players and eventually shut down by itself.
In my use case of developing Bloxy Bingo, it is totally unacceptable to knowingly shutdown servers mid-round while players are excitedly waiting to see if their numbers are lucky for the current round.
To work around this I usually wait for old servers to end naturally, however this will usually take 3-5 days - while delaying the enablement of updates through features switches/configs. Occasionally I will manually go into the old places (I have an externally hosted server listing service to know which are old) and shut them down manually during intervals using dev console which is time consuming.
If this was addressed I would be able to get new features out to players quicker and respond more timely to update related incidents.
My Possible Solution Ideation
Create APIs to allow servers to detect a signal from a Roblox that a migration/shutdown is required, give the game up to x minutes to respond with a ready signal, to allow the developer to program the game to prevent starting any new rounds and for the server to be shutdown by Roblox
Bonus points: If a dedicated/specified swap server could be pre-warmed with players teleported into the new server automatically.
More bonus points for further signals to the new server to tell it that it is a swap over server and to hold off starting rounds until the shutdown of the old server has been initiated.
Use the new custom server signals (as per Match Making API) with an associated config console similar to matchmaking to give hints/instructions to Roblox to best select & time servers to shutdown/migrate next over a prolonged period of time.
Allow a matchmaking option for a block on normal users joining old servers (unless they are following a friend or other player).**