aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules/Scripting/JsonStore
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2013-02-09 01:11:41 +0000
committerJustin Clark-Casey (justincc)2013-02-09 01:11:41 +0000
commit6935bec0ab83f25f69ad08e9bbc4b8d98aac1b1b (patch)
tree647e2ce5747ad8992111e9e89aefa825bffbbef2 /OpenSim/Region/OptionalModules/Scripting/JsonStore
parentChange TestDestroyStore() and TestJsonRemoveValue() to reflect the fact that ... (diff)
parentBulletSim: add parameter to set global contact breaking threshold. Update DLL... (diff)
downloadopensim-SC_OLD-6935bec0ab83f25f69ad08e9bbc4b8d98aac1b1b.zip
opensim-SC_OLD-6935bec0ab83f25f69ad08e9bbc4b8d98aac1b1b.tar.gz
opensim-SC_OLD-6935bec0ab83f25f69ad08e9bbc4b8d98aac1b1b.tar.bz2
opensim-SC_OLD-6935bec0ab83f25f69ad08e9bbc4b8d98aac1b1b.tar.xz
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
Diffstat (limited to 'OpenSim/Region/OptionalModules/Scripting/JsonStore')
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs82
-rw-r--r--OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs17
2 files changed, 95 insertions, 4 deletions
diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs
index c7f0001..5c89717 100644
--- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStore.cs
@@ -95,6 +95,15 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
95 95
96 // ----------------------------------------------------------------- 96 // -----------------------------------------------------------------
97 /// <summary> 97 /// <summary>
98 /// This is a simple estimator for the size of the stored data, it
99 /// is not precise, but should be close enough to implement reasonable
100 /// limits on the storage space used
101 /// </summary>
102 // -----------------------------------------------------------------
103 public int StringSpace { get; set; }
104
105 // -----------------------------------------------------------------
106 /// <summary>
98 /// 107 ///
99 /// </summary> 108 /// </summary>
100 // ----------------------------------------------------------------- 109 // -----------------------------------------------------------------
@@ -110,6 +119,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
110 // ----------------------------------------------------------------- 119 // -----------------------------------------------------------------
111 public JsonStore() 120 public JsonStore()
112 { 121 {
122 StringSpace = 0;
113 m_TakeStore = new List<TakeValueCallbackClass>(); 123 m_TakeStore = new List<TakeValueCallbackClass>();
114 m_ReadStore = new List<TakeValueCallbackClass>(); 124 m_ReadStore = new List<TakeValueCallbackClass>();
115 } 125 }
@@ -135,7 +145,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
135 if (result == null) 145 if (result == null)
136 return false; 146 return false;
137 147
138 if (useJson || result.Type == OSDType.String) 148 if (useJson || OSDBaseType(result.Type))
139 return true; 149 return true;
140 150
141 return false; 151 return false;
@@ -247,6 +257,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
247 if (path.Count == 0) 257 if (path.Count == 0)
248 { 258 {
249 ValueStore = ovalue; 259 ValueStore = ovalue;
260 StringSpace = 0;
250 return true; 261 return true;
251 } 262 }
252 263
@@ -278,8 +289,13 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
278 { 289 {
279 string npkey = String.Format("[{0}]",amap.Count); 290 string npkey = String.Format("[{0}]",amap.Count);
280 291
281 amap.Add(ovalue); 292 if (ovalue != null)
282 InvokeNextCallback(pexpr + npkey); 293 {
294 StringSpace += ComputeSizeOf(ovalue);
295
296 amap.Add(ovalue);
297 InvokeNextCallback(pexpr + npkey);
298 }
283 return true; 299 return true;
284 } 300 }
285 301
@@ -287,9 +303,14 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
287 if (0 <= aval && aval < amap.Count) 303 if (0 <= aval && aval < amap.Count)
288 { 304 {
289 if (ovalue == null) 305 if (ovalue == null)
306 {
307 StringSpace -= ComputeSizeOf(amap[aval]);
290 amap.RemoveAt(aval); 308 amap.RemoveAt(aval);
309 }
291 else 310 else
292 { 311 {
312 StringSpace -= ComputeSizeOf(amap[aval]);
313 StringSpace += ComputeSizeOf(ovalue);
293 amap[aval] = ovalue; 314 amap[aval] = ovalue;
294 InvokeNextCallback(pexpr + pkey); 315 InvokeNextCallback(pexpr + pkey);
295 } 316 }
@@ -313,6 +334,9 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
313 OSDMap hmap = result as OSDMap; 334 OSDMap hmap = result as OSDMap;
314 if (ovalue != null) 335 if (ovalue != null)
315 { 336 {
337 StringSpace -= ComputeSizeOf(hmap[hkey]);
338 StringSpace += ComputeSizeOf(ovalue);
339
316 hmap[hkey] = ovalue; 340 hmap[hkey] = ovalue;
317 InvokeNextCallback(pexpr + pkey); 341 InvokeNextCallback(pexpr + pkey);
318 return true; 342 return true;
@@ -321,6 +345,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
321 // this is the remove case 345 // this is the remove case
322 if (hmap.ContainsKey(hkey)) 346 if (hmap.ContainsKey(hkey))
323 { 347 {
348 StringSpace -= ComputeSizeOf(hmap[hkey]);
324 hmap.Remove(hkey); 349 hmap.Remove(hkey);
325 return true; 350 return true;
326 } 351 }
@@ -506,7 +531,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
506 return true; 531 return true;
507 } 532 }
508 533
509 if (result.Type == OSDType.String) 534 if (OSDBaseType(result.Type))
510 { 535 {
511 value = result.AsString(); 536 value = result.AsString();
512 return true; 537 return true;
@@ -531,8 +556,54 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
531 556
532 return pkey; 557 return pkey;
533 } 558 }
559
560 // -----------------------------------------------------------------
561 /// <summary>
562 ///
563 /// </summary>
564 // -----------------------------------------------------------------
565 protected static bool OSDBaseType(OSDType type)
566 {
567 // Should be the list of base types for which AsString() returns
568 // something useful
569 if (type == OSDType.Boolean)
570 return true;
571 if (type == OSDType.Integer)
572 return true;
573 if (type == OSDType.Real)
574 return true;
575 if (type == OSDType.String)
576 return true;
577 if (type == OSDType.UUID)
578 return true;
579 if (type == OSDType.Date)
580 return true;
581 if (type == OSDType.URI)
582 return true;
583
584 return false;
585 }
586
587 // -----------------------------------------------------------------
588 /// <summary>
589 ///
590 /// </summary>
591 // -----------------------------------------------------------------
592 protected static int ComputeSizeOf(OSD value)
593 {
594 string sval;
595
596 if (ConvertOutputValue(value,out sval,true))
597 return sval.Length;
598
599 return 0;
600 }
534 } 601 }
535 602
603 // -----------------------------------------------------------------
604 /// <summary>
605 /// </summary>
606 // -----------------------------------------------------------------
536 public class JsonObjectStore : JsonStore 607 public class JsonObjectStore : JsonStore
537 { 608 {
538 private static readonly ILog m_log = 609 private static readonly ILog m_log =
@@ -566,6 +637,9 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
566 { 637 {
567 m_scene = scene; 638 m_scene = scene;
568 m_objectID = oid; 639 m_objectID = oid;
640
641 // the size limit is imposed on whatever is already in the store
642 StringSpace = ComputeSizeOf(ValueStore);
569 } 643 }
570 } 644 }
571 645
diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs
index 3249aa3..f1ce856 100644
--- a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs
+++ b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs
@@ -54,6 +54,9 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
54 54
55 private IConfig m_config = null; 55 private IConfig m_config = null;
56 private bool m_enabled = false; 56 private bool m_enabled = false;
57 private bool m_enableObjectStore = false;
58 private int m_maxStringSpace = Int32.MaxValue;
59
57 private Scene m_scene = null; 60 private Scene m_scene = null;
58 61
59 private Dictionary<UUID,JsonStore> m_JsonValueStore; 62 private Dictionary<UUID,JsonStore> m_JsonValueStore;
@@ -90,6 +93,10 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
90 } 93 }
91 94
92 m_enabled = m_config.GetBoolean("Enabled", m_enabled); 95 m_enabled = m_config.GetBoolean("Enabled", m_enabled);
96 m_enableObjectStore = m_config.GetBoolean("EnableObjectStore", m_enableObjectStore);
97 m_maxStringSpace = m_config.GetInt("MaxStringSpace", m_maxStringSpace);
98 if (m_maxStringSpace == 0)
99 m_maxStringSpace = Int32.MaxValue;
93 } 100 }
94 catch (Exception e) 101 catch (Exception e)
95 { 102 {
@@ -178,6 +185,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
178 public bool AttachObjectStore(UUID objectID) 185 public bool AttachObjectStore(UUID objectID)
179 { 186 {
180 if (! m_enabled) return false; 187 if (! m_enabled) return false;
188 if (! m_enableObjectStore) return false;
181 189
182 SceneObjectPart sop = m_scene.GetSceneObjectPart(objectID); 190 SceneObjectPart sop = m_scene.GetSceneObjectPart(objectID);
183 if (sop == null) 191 if (sop == null)
@@ -311,7 +319,16 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore
311 try 319 try
312 { 320 {
313 lock (map) 321 lock (map)
322 {
323 if (map.StringSpace > m_maxStringSpace)
324 {
325 m_log.WarnFormat("[JsonStore] {0} exceeded string size; {1} bytes used of {2} limit",
326 storeID,map.StringSpace,m_maxStringSpace);
327 return false;
328 }
329
314 return map.SetValue(path,value,useJson); 330 return map.SetValue(path,value,useJson);
331 }
315 } 332 }
316 catch (Exception e) 333 catch (Exception e)
317 { 334 {