diff options
Diffstat (limited to 'OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs')
-rw-r--r-- | OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs | 155 |
1 files changed, 137 insertions, 18 deletions
diff --git a/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs b/OpenSim/Region/OptionalModules/Scripting/JsonStore/JsonStoreModule.cs index e68764a..5fbfcc5 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,15 +93,19 @@ 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 | { |
96 | m_log.ErrorFormat("[JsonStore] initialization error: {0}",e.Message); | 103 | m_log.Error("[JsonStore]: initialization error: {0}", e); |
97 | return; | 104 | return; |
98 | } | 105 | } |
99 | 106 | ||
100 | if (m_enabled) | 107 | if (m_enabled) |
101 | m_log.DebugFormat("[JsonStore] module is enabled"); | 108 | m_log.DebugFormat("[JsonStore]: module is enabled"); |
102 | } | 109 | } |
103 | 110 | ||
104 | // ----------------------------------------------------------------- | 111 | // ----------------------------------------------------------------- |
@@ -175,6 +182,35 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore | |||
175 | /// | 182 | /// |
176 | /// </summary> | 183 | /// </summary> |
177 | // ----------------------------------------------------------------- | 184 | // ----------------------------------------------------------------- |
185 | public bool AttachObjectStore(UUID objectID) | ||
186 | { | ||
187 | if (! m_enabled) return false; | ||
188 | if (! m_enableObjectStore) return false; | ||
189 | |||
190 | SceneObjectPart sop = m_scene.GetSceneObjectPart(objectID); | ||
191 | if (sop == null) | ||
192 | { | ||
193 | m_log.ErrorFormat("[JsonStore] unable to attach to unknown object; {0}", objectID); | ||
194 | return false; | ||
195 | } | ||
196 | |||
197 | lock (m_JsonValueStore) | ||
198 | { | ||
199 | if (m_JsonValueStore.ContainsKey(objectID)) | ||
200 | return true; | ||
201 | |||
202 | JsonStore map = new JsonObjectStore(m_scene,objectID); | ||
203 | m_JsonValueStore.Add(objectID,map); | ||
204 | } | ||
205 | |||
206 | return true; | ||
207 | } | ||
208 | |||
209 | // ----------------------------------------------------------------- | ||
210 | /// <summary> | ||
211 | /// | ||
212 | /// </summary> | ||
213 | // ----------------------------------------------------------------- | ||
178 | public bool CreateStore(string value, ref UUID result) | 214 | public bool CreateStore(string value, ref UUID result) |
179 | { | 215 | { |
180 | if (result == UUID.Zero) | 216 | if (result == UUID.Zero) |
@@ -191,7 +227,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore | |||
191 | } | 227 | } |
192 | catch (Exception e) | 228 | catch (Exception e) |
193 | { | 229 | { |
194 | m_log.InfoFormat("[JsonStore] Unable to initialize store from {0}; {1}",value,e.Message); | 230 | m_log.ErrorFormat("[JsonStore]: Unable to initialize store from {0}", value); |
195 | return false; | 231 | return false; |
196 | } | 232 | } |
197 | 233 | ||
@@ -211,7 +247,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore | |||
211 | if (! m_enabled) return false; | 247 | if (! m_enabled) return false; |
212 | 248 | ||
213 | lock (m_JsonValueStore) | 249 | lock (m_JsonValueStore) |
214 | m_JsonValueStore.Remove(storeID); | 250 | return m_JsonValueStore.Remove(storeID); |
215 | 251 | ||
216 | return true; | 252 | return true; |
217 | } | 253 | } |
@@ -221,31 +257,76 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore | |||
221 | /// | 257 | /// |
222 | /// </summary> | 258 | /// </summary> |
223 | // ----------------------------------------------------------------- | 259 | // ----------------------------------------------------------------- |
224 | public bool TestPath(UUID storeID, string path, bool useJson) | 260 | public bool TestStore(UUID storeID) |
225 | { | 261 | { |
226 | if (! m_enabled) return false; | 262 | if (! m_enabled) return false; |
227 | 263 | ||
264 | lock (m_JsonValueStore) | ||
265 | return m_JsonValueStore.ContainsKey(storeID); | ||
266 | } | ||
267 | |||
268 | // ----------------------------------------------------------------- | ||
269 | /// <summary> | ||
270 | /// | ||
271 | /// </summary> | ||
272 | // ----------------------------------------------------------------- | ||
273 | public JsonStoreNodeType GetNodeType(UUID storeID, string path) | ||
274 | { | ||
275 | if (! m_enabled) return JsonStoreNodeType.Undefined; | ||
276 | |||
228 | JsonStore map = null; | 277 | JsonStore map = null; |
229 | lock (m_JsonValueStore) | 278 | lock (m_JsonValueStore) |
230 | { | 279 | { |
231 | if (! m_JsonValueStore.TryGetValue(storeID,out map)) | 280 | if (! m_JsonValueStore.TryGetValue(storeID,out map)) |
232 | { | 281 | { |
233 | m_log.InfoFormat("[JsonStore] Missing store {0}",storeID); | 282 | m_log.InfoFormat("[JsonStore] Missing store {0}",storeID); |
234 | return false; | 283 | return JsonStoreNodeType.Undefined; |
235 | } | 284 | } |
236 | } | 285 | } |
237 | 286 | ||
238 | try | 287 | try |
239 | { | 288 | { |
240 | lock (map) | 289 | lock (map) |
241 | return map.TestPath(path,useJson); | 290 | return map.GetNodeType(path); |
242 | } | 291 | } |
243 | catch (Exception e) | 292 | catch (Exception e) |
244 | { | 293 | { |
245 | m_log.InfoFormat("[JsonStore] Path test failed for {0} in {1}; {2}",path,storeID,e.Message); | 294 | m_log.Error(string.Format("[JsonStore]: Path test failed for {0} in {1}", path, storeID), e); |
246 | } | 295 | } |
247 | 296 | ||
248 | return false; | 297 | return JsonStoreNodeType.Undefined; |
298 | } | ||
299 | |||
300 | // ----------------------------------------------------------------- | ||
301 | /// <summary> | ||
302 | /// | ||
303 | /// </summary> | ||
304 | // ----------------------------------------------------------------- | ||
305 | public JsonStoreValueType GetValueType(UUID storeID, string path) | ||
306 | { | ||
307 | if (! m_enabled) return JsonStoreValueType.Undefined; | ||
308 | |||
309 | JsonStore map = null; | ||
310 | lock (m_JsonValueStore) | ||
311 | { | ||
312 | if (! m_JsonValueStore.TryGetValue(storeID,out map)) | ||
313 | { | ||
314 | m_log.InfoFormat("[JsonStore] Missing store {0}",storeID); | ||
315 | return JsonStoreValueType.Undefined; | ||
316 | } | ||
317 | } | ||
318 | |||
319 | try | ||
320 | { | ||
321 | lock (map) | ||
322 | return map.GetValueType(path); | ||
323 | } | ||
324 | catch (Exception e) | ||
325 | { | ||
326 | m_log.Error(string.Format("[JsonStore]: Path test failed for {0} in {1}", path, storeID), e); | ||
327 | } | ||
328 | |||
329 | return JsonStoreValueType.Undefined; | ||
249 | } | 330 | } |
250 | 331 | ||
251 | // ----------------------------------------------------------------- | 332 | // ----------------------------------------------------------------- |
@@ -270,12 +351,20 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore | |||
270 | try | 351 | try |
271 | { | 352 | { |
272 | lock (map) | 353 | lock (map) |
273 | if (map.SetValue(path,value,useJson)) | 354 | { |
274 | return true; | 355 | if (map.StringSpace > m_maxStringSpace) |
356 | { | ||
357 | m_log.WarnFormat("[JsonStore] {0} exceeded string size; {1} bytes used of {2} limit", | ||
358 | storeID,map.StringSpace,m_maxStringSpace); | ||
359 | return false; | ||
360 | } | ||
361 | |||
362 | return map.SetValue(path,value,useJson); | ||
363 | } | ||
275 | } | 364 | } |
276 | catch (Exception e) | 365 | catch (Exception e) |
277 | { | 366 | { |
278 | m_log.InfoFormat("[JsonStore] Unable to assign {0} to {1} in {2}; {3}",value,path,storeID,e.Message); | 367 | m_log.Error(string.Format("[JsonStore]: Unable to assign {0} to {1} in {2}", value, path, storeID), e); |
279 | } | 368 | } |
280 | 369 | ||
281 | return false; | 370 | return false; |
@@ -303,12 +392,11 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore | |||
303 | try | 392 | try |
304 | { | 393 | { |
305 | lock (map) | 394 | lock (map) |
306 | if (map.RemoveValue(path)) | 395 | return map.RemoveValue(path); |
307 | return true; | ||
308 | } | 396 | } |
309 | catch (Exception e) | 397 | catch (Exception e) |
310 | { | 398 | { |
311 | m_log.InfoFormat("[JsonStore] Unable to remove {0} in {1}; {2}",path,storeID,e.Message); | 399 | m_log.Error(string.Format("[JsonStore]: Unable to remove {0} in {1}", path, storeID), e); |
312 | } | 400 | } |
313 | 401 | ||
314 | return false; | 402 | return false; |
@@ -319,6 +407,37 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore | |||
319 | /// | 407 | /// |
320 | /// </summary> | 408 | /// </summary> |
321 | // ----------------------------------------------------------------- | 409 | // ----------------------------------------------------------------- |
410 | public int GetArrayLength(UUID storeID, string path) | ||
411 | { | ||
412 | if (! m_enabled) return -1; | ||
413 | |||
414 | JsonStore map = null; | ||
415 | lock (m_JsonValueStore) | ||
416 | { | ||
417 | if (! m_JsonValueStore.TryGetValue(storeID,out map)) | ||
418 | return -1; | ||
419 | } | ||
420 | |||
421 | try | ||
422 | { | ||
423 | lock (map) | ||
424 | { | ||
425 | return map.ArrayLength(path); | ||
426 | } | ||
427 | } | ||
428 | catch (Exception e) | ||
429 | { | ||
430 | m_log.Error("[JsonStore]: unable to retrieve value", e); | ||
431 | } | ||
432 | |||
433 | return -1; | ||
434 | } | ||
435 | |||
436 | // ----------------------------------------------------------------- | ||
437 | /// <summary> | ||
438 | /// | ||
439 | /// </summary> | ||
440 | // ----------------------------------------------------------------- | ||
322 | public bool GetValue(UUID storeID, string path, bool useJson, out string value) | 441 | public bool GetValue(UUID storeID, string path, bool useJson, out string value) |
323 | { | 442 | { |
324 | value = String.Empty; | 443 | value = String.Empty; |
@@ -341,7 +460,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore | |||
341 | } | 460 | } |
342 | catch (Exception e) | 461 | catch (Exception e) |
343 | { | 462 | { |
344 | m_log.InfoFormat("[JsonStore] unable to retrieve value; {0}",e.Message); | 463 | m_log.Error("[JsonStore]: unable to retrieve value", e); |
345 | } | 464 | } |
346 | 465 | ||
347 | return false; | 466 | return false; |
@@ -380,7 +499,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore | |||
380 | } | 499 | } |
381 | catch (Exception e) | 500 | catch (Exception e) |
382 | { | 501 | { |
383 | m_log.InfoFormat("[JsonStore] unable to retrieve value; {0}",e.ToString()); | 502 | m_log.Error("[JsonStore] unable to retrieve value", e); |
384 | } | 503 | } |
385 | 504 | ||
386 | cback(String.Empty); | 505 | cback(String.Empty); |
@@ -419,7 +538,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.JsonStore | |||
419 | } | 538 | } |
420 | catch (Exception e) | 539 | catch (Exception e) |
421 | { | 540 | { |
422 | m_log.InfoFormat("[JsonStore] unable to retrieve value; {0}",e.ToString()); | 541 | m_log.Error("[JsonStore]: unable to retrieve value", e); |
423 | } | 542 | } |
424 | 543 | ||
425 | cback(String.Empty); | 544 | cback(String.Empty); |