Potential data loss?

Hello! I am making an obby with saving checkpoints. Sometimes when i leave the game i get this error:
“DataStore request was added to queue. If request queue fills, further requests will be dropped. Try sending fewer requests.Key = 144683389”
I am aware that this error can be a sign for potential data loss. Should i worry about this?
Here is the code:

local Players = game:GetService("Players")
local DataStoreService = game:GetService("DataStoreService")
local SaveDataStore = DataStoreService:GetDataStore("SaveData")


local function SavePlayerData(player)

	local success,errormsg = pcall(function()

		local SaveData = {}

		for i,stats in pairs(player.leaderstats:GetChildren()) do

			SaveData[stats.Name] = stats.Value
		end 
		SaveDataStore:SetAsync(player.UserId,SaveData)
	end)

	if not success then 
		return errormsg
	end   
end 


Players.PlayerAdded:Connect(function(player)

	local Stats = Instance.new("Folder")
	Stats.Name = "leaderstats"
	Stats.Parent = player

	local Stage = Instance.new("StringValue")
	Stage.Name = "Stage"
	Stage.Parent = Stats
	Stage.Value = 1

	local Data = SaveDataStore:GetAsync(player.UserId)

	if Data then

		print(Data.Stage)

		for i,stats in pairs(Stats:GetChildren()) do

			stats.Value = Data[stats.Name]  
		end   
	else  
		print(player.Name .. " has no data.")   
	end


	player.CharacterAdded:Connect(function(character)

		local Humanoid = character:WaitForChild("Humanoid")
		local Torso = character:WaitForChild("HumanoidRootPart")

		wait()

		if Torso and Humanoid then
			if Stage.Value ~= 0 then

				local StagePart = workspace.Stages:FindFirstChild(Stage.Value)
				Torso.CFrame = StagePart.CFrame + Vector3.new(0,1,0)     
			end 
		end 
	end)  
end)


Players.PlayerRemoving:Connect(function(player)

	local errormsg = SavePlayerData(player)

	if errormsg then 
		warn(errormsg)  
	end 
end)

game:BindToClose(function(player)
	for i,player in pairs(Players:GetPlayers()) do 

		local errormsg = SavePlayerData(player)
		if errormsg then
			warn(errormsg)
		end   
	end
	wait(2) 
end)
1 Like

I would recommend creating your own queuing system, rate limiting each player. For example waiting for 5 seconds till sending a new request. I dont think it would cause data loss though, unless your obby contains 2 second stages. I would also recommend adding server shutdown handler, so it can save all the data before shutting down.

game:BindToClose(function()
	task.wait(5) -- Will wait for 5 seconds before shutting down.
end)
2 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.