aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMic Bowman2012-05-10 09:08:40 -0700
committerMic Bowman2012-05-10 09:08:40 -0700
commitde44734fe9a0b31cd8cb78c0f58e61a35fe2a259 (patch)
tree6b6b50a0a4cdf493ec4c5b46ceaef8c01fe64dba
parentWhere necessary, rename OpenSim/Services/Connectors/*.cs files to reflect the... (diff)
downloadopensim-SC_OLD-de44734fe9a0b31cd8cb78c0f58e61a35fe2a259.zip
opensim-SC_OLD-de44734fe9a0b31cd8cb78c0f58e61a35fe2a259.tar.gz
opensim-SC_OLD-de44734fe9a0b31cd8cb78c0f58e61a35fe2a259.tar.bz2
opensim-SC_OLD-de44734fe9a0b31cd8cb78c0f58e61a35fe2a259.tar.xz
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.
-rw-r--r--OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs5
-rw-r--r--OpenSim/Region/Application/OpenSim.cs5
-rw-r--r--OpenSim/Region/Application/OpenSimBase.cs12
3 files changed, 13 insertions, 9 deletions
diff --git a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
index 45b8d6f..0065702 100644
--- a/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
+++ b/OpenSim/ApplicationPlugins/LoadRegions/LoadRegionsPlugin.cs
@@ -122,9 +122,10 @@ namespace OpenSim.ApplicationPlugins.LoadRegions
122 Thread.CurrentThread.ManagedThreadId.ToString() + 122 Thread.CurrentThread.ManagedThreadId.ToString() +
123 ")"); 123 ")");
124 124
125 m_openSim.PopulateRegionEstateInfo(regionsToLoad[i]); 125 bool changed = m_openSim.PopulateRegionEstateInfo(regionsToLoad[i]);
126 m_openSim.CreateRegion(regionsToLoad[i], true, out scene); 126 m_openSim.CreateRegion(regionsToLoad[i], true, out scene);
127 regionsToLoad[i].EstateSettings.Save(); 127 if (changed)
128 regionsToLoad[i].EstateSettings.Save();
128 129
129 if (scene != null) 130 if (scene != null)
130 { 131 {
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index 4ec64ee..6796f2b 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -618,10 +618,11 @@ namespace OpenSim
618 return; 618 return;
619 } 619 }
620 620
621 PopulateRegionEstateInfo(regInfo); 621 bool changed = PopulateRegionEstateInfo(regInfo);
622 IScene scene; 622 IScene scene;
623 CreateRegion(regInfo, true, out scene); 623 CreateRegion(regInfo, true, out scene);
624 regInfo.EstateSettings.Save(); 624 if (changed)
625 regInfo.EstateSettings.Save();
625 } 626 }
626 627
627 /// <summary> 628 /// <summary>
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index 79259d8..045e8d2 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -977,13 +977,13 @@ namespace OpenSim
977 /// Load the estate information for the provided RegionInfo object. 977 /// Load the estate information for the provided RegionInfo object.
978 /// </summary> 978 /// </summary>
979 /// <param name="regInfo"></param> 979 /// <param name="regInfo"></param>
980 public void PopulateRegionEstateInfo(RegionInfo regInfo) 980 public bool PopulateRegionEstateInfo(RegionInfo regInfo)
981 { 981 {
982 if (EstateDataService != null) 982 if (EstateDataService != null)
983 regInfo.EstateSettings = EstateDataService.LoadEstateSettings(regInfo.RegionID, false); 983 regInfo.EstateSettings = EstateDataService.LoadEstateSettings(regInfo.RegionID, false);
984 984
985 if (regInfo.EstateSettings.EstateID != 0) 985 if (regInfo.EstateSettings.EstateID != 0)
986 return; 986 return false; // estate info in the database did not change
987 987
988 m_log.WarnFormat("[ESTATE] Region {0} is not part of an estate.", regInfo.RegionName); 988 m_log.WarnFormat("[ESTATE] Region {0} is not part of an estate.", regInfo.RegionName);
989 989
@@ -1018,7 +1018,7 @@ namespace OpenSim
1018 } 1018 }
1019 1019
1020 if (defaultEstateJoined) 1020 if (defaultEstateJoined)
1021 return; 1021 return true; // need to update the database
1022 else 1022 else
1023 m_log.ErrorFormat( 1023 m_log.ErrorFormat(
1024 "[OPENSIM BASE]: Joining default estate {0} failed", defaultEstateName); 1024 "[OPENSIM BASE]: Joining default estate {0} failed", defaultEstateName);
@@ -1080,8 +1080,10 @@ namespace OpenSim
1080 MainConsole.Instance.Output("Joining the estate failed. Please try again."); 1080 MainConsole.Instance.Output("Joining the estate failed. Please try again.");
1081 } 1081 }
1082 } 1082 }
1083 } 1083 }
1084 } 1084
1085 return true; // need to update the database
1086 }
1085 } 1087 }
1086 1088
1087 public class OpenSimConfigSource 1089 public class OpenSimConfigSource