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.