Saving estate state is really slow (relatively) and it gets

completely rewritten every time a region starts up. This
makes the data write only when the data was not already
read from the database.

There is a still a major race condition whenever two regions
share the same estate data, but at least it won't be triggered
on startup.
0.7.4.1
Mic Bowman 2012-05-10 09:08:40 -07:00
parent d8a78374aa
commit de44734fe9
3 changed files with 13 additions and 9 deletions

View File

@ -122,9 +122,10 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
Thread.CurrentThread.ManagedThreadId.ToString() + Thread.CurrentThread.ManagedThreadId.ToString() +
")"); ")");
m_openSim.PopulateRegionEstateInfo(regionsToLoad[i]); bool changed = m_openSim.PopulateRegionEstateInfo(regionsToLoad[i]);
m_openSim.CreateRegion(regionsToLoad[i], true, out scene); m_openSim.CreateRegion(regionsToLoad[i], true, out scene);
regionsToLoad[i].EstateSettings.Save(); if (changed)
regionsToLoad[i].EstateSettings.Save();
if (scene != null) if (scene != null)
{ {

View File

@ -618,10 +618,11 @@ namespace OpenSim
return; return;
} }
PopulateRegionEstateInfo(regInfo); bool changed = PopulateRegionEstateInfo(regInfo);
IScene scene; IScene scene;
CreateRegion(regInfo, true, out scene); CreateRegion(regInfo, true, out scene);
regInfo.EstateSettings.Save(); if (changed)
regInfo.EstateSettings.Save();
} }
/// <summary> /// <summary>

View File

@ -977,13 +977,13 @@ namespace OpenSim
/// Load the estate information for the provided RegionInfo object. /// Load the estate information for the provided RegionInfo object.
/// </summary> /// </summary>
/// <param name="regInfo"></param> /// <param name="regInfo"></param>
public void PopulateRegionEstateInfo(RegionInfo regInfo) public bool PopulateRegionEstateInfo(RegionInfo regInfo)
{ {
if (EstateDataService != null) if (EstateDataService != null)
regInfo.EstateSettings = EstateDataService.LoadEstateSettings(regInfo.RegionID, false); regInfo.EstateSettings = EstateDataService.LoadEstateSettings(regInfo.RegionID, false);
if (regInfo.EstateSettings.EstateID != 0) if (regInfo.EstateSettings.EstateID != 0)
return; return false; // estate info in the database did not change
m_log.WarnFormat("[ESTATE] Region {0} is not part of an estate.", regInfo.RegionName); m_log.WarnFormat("[ESTATE] Region {0} is not part of an estate.", regInfo.RegionName);
@ -1018,7 +1018,7 @@ namespace OpenSim
} }
if (defaultEstateJoined) if (defaultEstateJoined)
return; return true; // need to update the database
else else
m_log.ErrorFormat( m_log.ErrorFormat(
"[OPENSIM BASE]: Joining default estate {0} failed", defaultEstateName); "[OPENSIM BASE]: Joining default estate {0} failed", defaultEstateName);
@ -1080,8 +1080,10 @@ namespace OpenSim
MainConsole.Instance.Output("Joining the estate failed. Please try again."); MainConsole.Instance.Output("Joining the estate failed. Please try again.");
} }
} }
} }
}
return true; // need to update the database
}
} }
public class OpenSimConfigSource public class OpenSimConfigSource