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
parent
d8a78374aa
commit
de44734fe9
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue