diff options
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs | 79 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs | 24 |
2 files changed, 87 insertions, 16 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs index 9fd347e..72115a8 100644 --- a/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/PrimCountModule.cs | |||
@@ -51,8 +51,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
51 | 51 | ||
52 | public class PrimCountModule : IPrimCountModule, INonSharedRegionModule | 52 | public class PrimCountModule : IPrimCountModule, INonSharedRegionModule |
53 | { | 53 | { |
54 | // private static readonly ILog m_log = | 54 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
55 | // LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
56 | 55 | ||
57 | private Scene m_Scene; | 56 | private Scene m_Scene; |
58 | private Dictionary<UUID, PrimCounts> m_PrimCounts = | 57 | private Dictionary<UUID, PrimCounts> m_PrimCounts = |
@@ -123,6 +122,11 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
123 | { | 122 | { |
124 | if (!m_Tainted) | 123 | if (!m_Tainted) |
125 | AddObject(obj); | 124 | AddObject(obj); |
125 | else | ||
126 | m_log.DebugFormat( | ||
127 | "[PRIM COUNT MODULE]: Ignoring OnParcelPrimCountAdd() for {0} on {1} since count is tainted", | ||
128 | obj.Name, m_Scene.RegionInfo.RegionName); | ||
129 | |||
126 | } | 130 | } |
127 | } | 131 | } |
128 | 132 | ||
@@ -133,11 +137,18 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
133 | { | 137 | { |
134 | if (!m_Tainted) | 138 | if (!m_Tainted) |
135 | RemoveObject(obj); | 139 | RemoveObject(obj); |
140 | else | ||
141 | m_log.DebugFormat( | ||
142 | "[PRIM COUNT MODULE]: Ignoring OnObjectBeingRemovedFromScene() for {0} on {1} since count is tainted", | ||
143 | obj.Name, m_Scene.RegionInfo.RegionName); | ||
136 | } | 144 | } |
137 | } | 145 | } |
138 | 146 | ||
139 | private void OnParcelPrimCountTainted() | 147 | private void OnParcelPrimCountTainted() |
140 | { | 148 | { |
149 | m_log.DebugFormat( | ||
150 | "[PRIM COUNT MODULE]: OnParcelPrimCountTainted() called on {0}", m_Scene.RegionInfo.RegionName); | ||
151 | |||
141 | lock (m_TaintLock) | 152 | lock (m_TaintLock) |
142 | m_Tainted = true; | 153 | m_Tainted = true; |
143 | } | 154 | } |
@@ -163,7 +174,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
163 | // NOTE: Call under Taint Lock | 174 | // NOTE: Call under Taint Lock |
164 | private void AddObject(SceneObjectGroup obj) | 175 | private void AddObject(SceneObjectGroup obj) |
165 | { | 176 | { |
166 | // m_log.DebugFormat("[PRIM COUNT MODULE]: Adding object {0} to prim count", obj.Name); | 177 | m_log.DebugFormat("[PRIM COUNT MODULE]: Adding object {0} {1} to prim count", obj.Name, obj.UUID); |
167 | 178 | ||
168 | if (obj.IsAttachment) | 179 | if (obj.IsAttachment) |
169 | return; | 180 | return; |
@@ -214,10 +225,14 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
214 | // NOTE: Call under Taint Lock | 225 | // NOTE: Call under Taint Lock |
215 | private void RemoveObject(SceneObjectGroup obj) | 226 | private void RemoveObject(SceneObjectGroup obj) |
216 | { | 227 | { |
228 | m_log.DebugFormat("[PRIM COUNT MODULE]: Removing object {0} {1} from prim count", obj.Name, obj.UUID); | ||
217 | } | 229 | } |
218 | 230 | ||
219 | public IPrimCounts GetPrimCounts(UUID parcelID) | 231 | public IPrimCounts GetPrimCounts(UUID parcelID) |
220 | { | 232 | { |
233 | m_log.DebugFormat( | ||
234 | "[PRIM COUNT MODULE]: GetPrimCounts for parcel {0} in {1}", parcelID, m_Scene.RegionInfo.RegionName); | ||
235 | |||
221 | PrimCounts primCounts; | 236 | PrimCounts primCounts; |
222 | 237 | ||
223 | lock (m_PrimCounts) | 238 | lock (m_PrimCounts) |
@@ -239,7 +254,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
239 | /// <returns></returns> | 254 | /// <returns></returns> |
240 | public int GetOwnerCount(UUID parcelID) | 255 | public int GetOwnerCount(UUID parcelID) |
241 | { | 256 | { |
242 | // m_log.DebugFormat("[PRIM COUNT MODULE]: GetOwnerCount for {0}", parcelID); | 257 | int count = 0; |
243 | 258 | ||
244 | lock (m_TaintLock) | 259 | lock (m_TaintLock) |
245 | { | 260 | { |
@@ -248,9 +263,14 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
248 | 263 | ||
249 | ParcelCounts counts; | 264 | ParcelCounts counts; |
250 | if (m_ParcelCounts.TryGetValue(parcelID, out counts)) | 265 | if (m_ParcelCounts.TryGetValue(parcelID, out counts)) |
251 | return counts.Owner; | 266 | count = counts.Owner; |
252 | } | 267 | } |
253 | return 0; | 268 | |
269 | m_log.DebugFormat( | ||
270 | "[PRIM COUNT MODULE]: GetOwnerCount for parcel {0} in {1} returning {2}", | ||
271 | parcelID, m_Scene.RegionInfo.RegionName, count); | ||
272 | |||
273 | return count; | ||
254 | } | 274 | } |
255 | 275 | ||
256 | /// <summary> | 276 | /// <summary> |
@@ -260,6 +280,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
260 | /// <returns></returns> | 280 | /// <returns></returns> |
261 | public int GetGroupCount(UUID parcelID) | 281 | public int GetGroupCount(UUID parcelID) |
262 | { | 282 | { |
283 | int count = 0; | ||
284 | |||
263 | lock (m_TaintLock) | 285 | lock (m_TaintLock) |
264 | { | 286 | { |
265 | if (m_Tainted) | 287 | if (m_Tainted) |
@@ -267,9 +289,14 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
267 | 289 | ||
268 | ParcelCounts counts; | 290 | ParcelCounts counts; |
269 | if (m_ParcelCounts.TryGetValue(parcelID, out counts)) | 291 | if (m_ParcelCounts.TryGetValue(parcelID, out counts)) |
270 | return counts.Group; | 292 | count = counts.Group; |
271 | } | 293 | } |
272 | return 0; | 294 | |
295 | m_log.DebugFormat( | ||
296 | "[PRIM COUNT MODULE]: GetGroupCount for parcel {0} in {1} returning {2}", | ||
297 | parcelID, m_Scene.RegionInfo.RegionName, count); | ||
298 | |||
299 | return count; | ||
273 | } | 300 | } |
274 | 301 | ||
275 | /// <summary> | 302 | /// <summary> |
@@ -279,6 +306,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
279 | /// <returns></returns> | 306 | /// <returns></returns> |
280 | public int GetOthersCount(UUID parcelID) | 307 | public int GetOthersCount(UUID parcelID) |
281 | { | 308 | { |
309 | int count = 0; | ||
310 | |||
282 | lock (m_TaintLock) | 311 | lock (m_TaintLock) |
283 | { | 312 | { |
284 | if (m_Tainted) | 313 | if (m_Tainted) |
@@ -286,9 +315,14 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
286 | 315 | ||
287 | ParcelCounts counts; | 316 | ParcelCounts counts; |
288 | if (m_ParcelCounts.TryGetValue(parcelID, out counts)) | 317 | if (m_ParcelCounts.TryGetValue(parcelID, out counts)) |
289 | return counts.Others; | 318 | count = counts.Others; |
290 | } | 319 | } |
291 | return 0; | 320 | |
321 | m_log.DebugFormat( | ||
322 | "[PRIM COUNT MODULE]: GetOthersCount for parcel {0} in {1} returning {2}", | ||
323 | parcelID, m_Scene.RegionInfo.RegionName, count); | ||
324 | |||
325 | return count; | ||
292 | } | 326 | } |
293 | 327 | ||
294 | /// <summary> | 328 | /// <summary> |
@@ -298,6 +332,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
298 | /// <returns></returns> | 332 | /// <returns></returns> |
299 | public int GetSimulatorCount(UUID parcelID) | 333 | public int GetSimulatorCount(UUID parcelID) |
300 | { | 334 | { |
335 | int count = 0; | ||
336 | |||
301 | lock (m_TaintLock) | 337 | lock (m_TaintLock) |
302 | { | 338 | { |
303 | if (m_Tainted) | 339 | if (m_Tainted) |
@@ -308,10 +344,15 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
308 | { | 344 | { |
309 | int val; | 345 | int val; |
310 | if (m_SimwideCounts.TryGetValue(owner, out val)) | 346 | if (m_SimwideCounts.TryGetValue(owner, out val)) |
311 | return val; | 347 | count = val; |
312 | } | 348 | } |
313 | } | 349 | } |
314 | return 0; | 350 | |
351 | m_log.DebugFormat( | ||
352 | "[PRIM COUNT MODULE]: GetOthersCount for parcel {0} in {1} returning {2}", | ||
353 | parcelID, m_Scene.RegionInfo.RegionName, count); | ||
354 | |||
355 | return count; | ||
315 | } | 356 | } |
316 | 357 | ||
317 | /// <summary> | 358 | /// <summary> |
@@ -322,6 +363,8 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
322 | /// <returns></returns> | 363 | /// <returns></returns> |
323 | public int GetUserCount(UUID parcelID, UUID userID) | 364 | public int GetUserCount(UUID parcelID, UUID userID) |
324 | { | 365 | { |
366 | int count = 0; | ||
367 | |||
325 | lock (m_TaintLock) | 368 | lock (m_TaintLock) |
326 | { | 369 | { |
327 | if (m_Tainted) | 370 | if (m_Tainted) |
@@ -332,16 +375,21 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
332 | { | 375 | { |
333 | int val; | 376 | int val; |
334 | if (counts.Users.TryGetValue(userID, out val)) | 377 | if (counts.Users.TryGetValue(userID, out val)) |
335 | return val; | 378 | count = val; |
336 | } | 379 | } |
337 | } | 380 | } |
338 | return 0; | 381 | |
382 | m_log.DebugFormat( | ||
383 | "[PRIM COUNT MODULE]: GetUserCount for user {0} in parcel {1} in region {2} returning {3}", | ||
384 | userID, parcelID, m_Scene.RegionInfo.RegionName, count); | ||
385 | |||
386 | return count; | ||
339 | } | 387 | } |
340 | 388 | ||
341 | // NOTE: This method MUST be called while holding the taint lock! | 389 | // NOTE: This method MUST be called while holding the taint lock! |
342 | private void Recount() | 390 | private void Recount() |
343 | { | 391 | { |
344 | // m_log.DebugFormat("[PRIM COUNT MODULE]: Recounting prims on {0}", m_Scene.RegionInfo.RegionName); | 392 | m_log.DebugFormat("[PRIM COUNT MODULE]: Recounting prims on {0}", m_Scene.RegionInfo.RegionName); |
345 | 393 | ||
346 | m_OwnerMap.Clear(); | 394 | m_OwnerMap.Clear(); |
347 | m_SimwideCounts.Clear(); | 395 | m_SimwideCounts.Clear(); |
@@ -367,6 +415,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
367 | if (!m_OwnerMap.ContainsKey(k)) | 415 | if (!m_OwnerMap.ContainsKey(k)) |
368 | m_PrimCounts.Remove(k); | 416 | m_PrimCounts.Remove(k); |
369 | } | 417 | } |
418 | |||
370 | m_Tainted = false; | 419 | m_Tainted = false; |
371 | } | 420 | } |
372 | } | 421 | } |
diff --git a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs index c9d393f..80b2859 100644 --- a/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs +++ b/OpenSim/Region/CoreModules/World/Land/Tests/PrimCountModuleTests.cs | |||
@@ -126,6 +126,28 @@ namespace OpenSim.Region.CoreModules.World.Land.Tests | |||
126 | Assert.That(pc.Users[m_userId], Is.EqualTo(1)); | 126 | Assert.That(pc.Users[m_userId], Is.EqualTo(1)); |
127 | Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0)); | 127 | Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0)); |
128 | Assert.That(pc.Simulator, Is.EqualTo(1)); | 128 | Assert.That(pc.Simulator, Is.EqualTo(1)); |
129 | } | 129 | } |
130 | |||
131 | /// <summary> | ||
132 | /// Test the count is correct after is has been tainted. | ||
133 | /// </summary> | ||
134 | [Test] | ||
135 | public void TestTaint() | ||
136 | { | ||
137 | TestHelper.InMethod(); | ||
138 | IPrimCounts pc = m_lo.PrimCounts; | ||
139 | |||
140 | SceneObjectGroup sog = SceneSetupHelpers.CreateSceneObject(3, m_userId, 0x01); | ||
141 | m_scene.AddNewSceneObject(sog, false); | ||
142 | |||
143 | m_pcm.TaintPrimCount(); | ||
144 | |||
145 | Assert.That(pc.Owner, Is.EqualTo(3)); | ||
146 | Assert.That(pc.Group, Is.EqualTo(0)); | ||
147 | Assert.That(pc.Others, Is.EqualTo(0)); | ||
148 | Assert.That(pc.Users[m_userId], Is.EqualTo(3)); | ||
149 | Assert.That(pc.Users[m_dummyUserId], Is.EqualTo(0)); | ||
150 | Assert.That(pc.Simulator, Is.EqualTo(3)); | ||
151 | } | ||
130 | } | 152 | } |
131 | } \ No newline at end of file | 153 | } \ No newline at end of file |