aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDr Scofield2008-09-18 15:44:05 +0000
committerDr Scofield2008-09-18 15:44:05 +0000
commit03f246d6fea009f1812019f5f036987b96b47a2b (patch)
treef7194082d70c68a4cb64e92036d6613518fbd89c
parentadd some comments and some try blocks around object storage (diff)
downloadopensim-SC-03f246d6fea009f1812019f5f036987b96b47a2b.zip
opensim-SC-03f246d6fea009f1812019f5f036987b96b47a2b.tar.gz
opensim-SC-03f246d6fea009f1812019f5f036987b96b47a2b.tar.bz2
opensim-SC-03f246d6fea009f1812019f5f036987b96b47a2b.tar.xz
adds support to delete a region completely and offers that
functionality via the console command "delete-region" and also via RemoteAdminPlugin. minor typo fix.
Diffstat (limited to '')
-rw-r--r--OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs69
-rw-r--r--OpenSim/Data/RegionProfileData.cs1
-rw-r--r--OpenSim/Framework/RegionInfo.cs3
-rw-r--r--OpenSim/Region/Application/OpenSim.cs30
-rw-r--r--OpenSim/Region/Application/OpenSimBase.cs31
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs7
6 files changed, 118 insertions, 23 deletions
diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
index fc57386..1c924c0 100644
--- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
+++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs
@@ -86,6 +86,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
86 m_httpd = openSim.HttpServer; 86 m_httpd = openSim.HttpServer;
87 87
88 m_httpd.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod); 88 m_httpd.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod);
89 m_httpd.AddXmlRPCHandler("admin_delete_region", XmlRpcDeleteRegionMethod);
89 m_httpd.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod); 90 m_httpd.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod);
90 m_httpd.AddXmlRPCHandler("admin_broadcast", XmlRpcAlertMethod); 91 m_httpd.AddXmlRPCHandler("admin_broadcast", XmlRpcAlertMethod);
91 m_httpd.AddXmlRPCHandler("admin_restart", XmlRpcRestartMethod); 92 m_httpd.AddXmlRPCHandler("admin_restart", XmlRpcRestartMethod);
@@ -344,8 +345,6 @@ namespace OpenSim.ApplicationPlugins.RemoteController
344 /// <description>internal port (integer)</description></item> 345 /// <description>internal port (integer)</description></item>
345 /// <item><term>external_address</term> 346 /// <item><term>external_address</term>
346 /// <description>external IP address</description></item> 347 /// <description>external IP address</description></item>
347 /// <item><term>datastore</term>
348 /// <description>datastore parameter (?)</description></item>
349 /// <item><term>persist</term> 348 /// <item><term>persist</term>
350 /// <description>if true, persist the region info 349 /// <description>if true, persist the region info
351 /// ('true' or 'false')</description></item> 350 /// ('true' or 'false')</description></item>
@@ -378,7 +377,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
378 "region_master_first", "region_master_last", 377 "region_master_first", "region_master_last",
379 "region_master_password", 378 "region_master_password",
380 "listen_ip", "external_address"}); 379 "listen_ip", "external_address"});
381 checkIntegerParams(request, new string[] { "region_x", "region_y", "listen_port"}); 380 checkIntegerParams(request, new string[] {"region_x", "region_y", "listen_port"});
382 381
383 // check password 382 // check password
384 if (!String.IsNullOrEmpty(requiredPassword) && 383 if (!String.IsNullOrEmpty(requiredPassword) &&
@@ -390,7 +389,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
390 if (requestData.ContainsKey("region_id") && 389 if (requestData.ContainsKey("region_id") &&
391 !String.IsNullOrEmpty((string)requestData["region_id"])) 390 !String.IsNullOrEmpty((string)requestData["region_id"]))
392 { 391 {
393 regionID = (string) requestData["region_id"]; 392 regionID = (string)requestData["region_id"];
394 if (m_app.SceneManager.TryGetScene(regionID, out scene)) 393 if (m_app.SceneManager.TryGetScene(regionID, out scene))
395 throw new Exception(String.Format("region UUID already in use by region {0}, UUID {1}, <{2},{3}>", 394 throw new Exception(String.Format("region UUID already in use by region {0}, UUID {1}, <{2},{3}>",
396 scene.RegionInfo.RegionName, scene.RegionInfo.RegionID, 395 scene.RegionInfo.RegionName, scene.RegionInfo.RegionID,
@@ -493,6 +492,68 @@ namespace OpenSim.ApplicationPlugins.RemoteController
493 } 492 }
494 493
495 /// <summary> 494 /// <summary>
495 /// Delete a new region.
496 /// <summary>
497 /// <param name="request">incoming XML RPC request</param>
498 /// <remarks>
499 /// XmlRpcCreateRegionMethod takes the following XMLRPC
500 /// parameters
501 /// <list type="table">
502 /// <listheader><term>parameter name</term><description>description</description></listheader>
503 /// <item><term>password</term>
504 /// <description>admin password as set in OpenSim.ini</description></item>
505 /// <item><term>region_name</term>
506 /// <description>desired region name</description></item>
507 /// <item><term>region_id</term>
508 /// <description>(optional) desired region UUID</description></item>
509 /// </list>
510 ///
511 /// XmlRpcCreateRegionMethod returns
512 /// <list type="table">
513 /// <listheader><term>name</term><description>description</description></listheader>
514 /// <item><term>success</term>
515 /// <description>true or false</description></item>
516 /// <item><term>error</term>
517 /// <description>error message if success is false</description></item>
518 /// </list>
519 /// </remarks>
520 public XmlRpcResponse XmlRpcDeleteRegionMethod(XmlRpcRequest request)
521 {
522 m_log.Info("[RADMIN]: DeleteRegion: new request");
523 XmlRpcResponse response = new XmlRpcResponse();
524 Hashtable responseData = new Hashtable();
525
526 try {
527 Hashtable requestData = (Hashtable) request.Params[0];
528 checkStringParameters(request, new string[] {"password", "region_name"});
529
530 Scene scene = null;
531 string regionName = (string)requestData["region_name"];
532 if (!m_app.SceneManager.TryGetScene(regionName, out scene))
533 throw new Exception(String.Format("region \"{0}\" does not exist", regionName));
534
535 m_app.RemoveRegion(scene, true);
536
537 responseData["success"] = "true";
538 responseData["region_name"] = regionName;
539
540 response.Value = responseData;
541 }
542 catch (Exception e)
543 {
544 m_log.ErrorFormat("[RADMIN] DeleteRegion: failed {0}", e.Message);
545 m_log.DebugFormat("[RADMIN] DeleteRegion: failed {0}", e.ToString());
546
547 responseData["success"] = "false";
548 responseData["error"] = e.Message;
549
550 response.Value = responseData;
551 }
552
553 return response;
554 }
555
556 /// <summary>
496 /// Create a new user account. 557 /// Create a new user account.
497 /// <summary> 558 /// <summary>
498 /// <param name="request">incoming XML RPC request</param> 559 /// <param name="request">incoming XML RPC request</param>
diff --git a/OpenSim/Data/RegionProfileData.cs b/OpenSim/Data/RegionProfileData.cs
index b4c7b3c..b30fcf5 100644
--- a/OpenSim/Data/RegionProfileData.cs
+++ b/OpenSim/Data/RegionProfileData.cs
@@ -30,7 +30,6 @@ using System.Collections;
30using OpenMetaverse; 30using OpenMetaverse;
31using Nwc.XmlRpc; 31using Nwc.XmlRpc;
32using OpenSim.Framework; 32using OpenSim.Framework;
33using OpenMetaverse;
34 33
35namespace OpenSim.Data 34namespace OpenSim.Data
36{ 35{
diff --git a/OpenSim/Framework/RegionInfo.cs b/OpenSim/Framework/RegionInfo.cs
index 925c5be..5cbc776 100644
--- a/OpenSim/Framework/RegionInfo.cs
+++ b/OpenSim/Framework/RegionInfo.cs
@@ -196,6 +196,7 @@ namespace OpenSim.Framework
196 public bool commFailTF = false; 196 public bool commFailTF = false;
197 public ConfigurationMember configMember; 197 public ConfigurationMember configMember;
198 public string DataStore = String.Empty; 198 public string DataStore = String.Empty;
199 public string RegionFile = String.Empty;
199 public bool isSandbox = false; 200 public bool isSandbox = false;
200 private EstateSettings m_estateSettings; 201 private EstateSettings m_estateSettings;
201 private RegionSettings m_regionSettings; 202 private RegionSettings m_regionSettings;
@@ -221,6 +222,7 @@ namespace OpenSim.Framework
221 configMember = 222 configMember =
222 new ConfigurationMember(filename, description, loadConfigurationOptions, handleIncomingConfiguration, !skipConsoleConfig); 223 new ConfigurationMember(filename, description, loadConfigurationOptions, handleIncomingConfiguration, !skipConsoleConfig);
223 configMember.performConfigurationRetrieve(); 224 configMember.performConfigurationRetrieve();
225 RegionFile = filename;
224 } 226 }
225 227
226 public RegionInfo(string description, XmlNode xmlNode, bool skipConsoleConfig) 228 public RegionInfo(string description, XmlNode xmlNode, bool skipConsoleConfig)
@@ -364,6 +366,7 @@ namespace OpenSim.Framework
364 configMember = new ConfigurationMember(filename, description, loadConfigurationOptionsFromMe, 366 configMember = new ConfigurationMember(filename, description, loadConfigurationOptionsFromMe,
365 ignoreIncomingConfiguration, false); 367 ignoreIncomingConfiguration, false);
366 configMember.performConfigurationRetrieve(); 368 configMember.performConfigurationRetrieve();
369 RegionFile = filename;
367 } 370 }
368 371
369 public void loadConfigurationOptionsFromMe() 372 public void loadConfigurationOptionsFromMe()
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index e48df81..9f313eb 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -311,22 +311,23 @@ namespace OpenSim
311 break; 311 break;
312 312
313 case "remove-region": 313 case "remove-region":
314 string regName = CombineParams(cmdparams, 0); 314 string regRemoveName = CombineParams(cmdparams, 0);
315 315
316 Scene killScene; 316 Scene removeScene;
317 if (m_sceneManager.TryGetScene(regName, out killScene)) 317 if (m_sceneManager.TryGetScene(regRemoveName, out removeScene))
318 { 318 RemoveRegion(removeScene, false);
319 // only need to check this if we are not at the 319 else
320 // root level 320 m_console.Error("no region with that name");
321 if ((m_sceneManager.CurrentScene != null) && 321 break;
322 (m_sceneManager.CurrentScene.RegionInfo.RegionID == killScene.RegionInfo.RegionID))
323 {
324 m_sceneManager.TrySetCurrentScene("..");
325 }
326 322
327 m_regionData.Remove(killScene.RegionInfo); 323 case "delete-region":
328 m_sceneManager.CloseScene(killScene); 324 string regDeleteName = CombineParams(cmdparams, 0);
329 } 325
326 Scene killScene;
327 if (m_sceneManager.TryGetScene(regDeleteName, out killScene))
328 RemoveRegion(killScene, true);
329 else
330 m_console.Error("no region with that name");
330 break; 331 break;
331 332
332 case "restart": 333 case "restart":
@@ -610,6 +611,7 @@ namespace OpenSim
610 m_console.Notice("force-update - force an update of prims in the scene"); 611 m_console.Notice("force-update - force an update of prims in the scene");
611 m_console.Notice("restart - disconnects all clients and restarts the sims in the instance."); 612 m_console.Notice("restart - disconnects all clients and restarts the sims in the instance.");
612 m_console.Notice("remove-region [name] - remove a region"); 613 m_console.Notice("remove-region [name] - remove a region");
614 m_console.Notice("delete-region [name] - delete a region");
613 m_console.Notice("load-xml [filename] - load prims from XML (DEPRECATED)"); 615 m_console.Notice("load-xml [filename] - load prims from XML (DEPRECATED)");
614 m_console.Notice("save-xml [filename] - save prims to XML (DEPRECATED)"); 616 m_console.Notice("save-xml [filename] - save prims to XML (DEPRECATED)");
615 m_console.Notice("save-xml2 [filename] - save prims to XML using version 2 format"); 617 m_console.Notice("save-xml2 [filename] - save prims to XML using version 2 format");
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index 4a02264..e5cf07a 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -589,6 +589,37 @@ namespace OpenSim
589 return clientServer; 589 return clientServer;
590 } 590 }
591 591
592 public void RemoveRegion(Scene scene, bool cleanup)
593 {
594 // only need to check this if we are not at the
595 // root level
596 if ((m_sceneManager.CurrentScene != null) &&
597 (m_sceneManager.CurrentScene.RegionInfo.RegionID == scene.RegionInfo.RegionID))
598 {
599 m_sceneManager.TrySetCurrentScene("..");
600 }
601
602 scene.DeleteAllSceneObjects();
603 m_regionData.Remove(scene.RegionInfo);
604 m_sceneManager.CloseScene(scene);
605
606 if (!cleanup)
607 return;
608
609 if (!String.IsNullOrEmpty(scene.RegionInfo.RegionFile))
610 {
611 File.Delete(scene.RegionInfo.RegionFile);
612 m_log.InfoFormat("[OPENSIM MAIN] deleting region file \"{0}\"", scene.RegionInfo.RegionFile);
613 }
614 }
615
616 public void RemoveRegion(string name, bool cleanUp)
617 {
618 Scene target;
619 if (m_sceneManager.TryGetScene(name, out target))
620 RemoveRegion(target, cleanUp);
621 }
622
592 protected override StorageManager CreateStorageManager(string connectionstring, string estateconnectionstring) 623 protected override StorageManager CreateStorageManager(string connectionstring, string estateconnectionstring)
593 { 624 {
594 return new StorageManager(m_storageDll, connectionstring, estateconnectionstring); 625 return new StorageManager(m_storageDll, connectionstring, estateconnectionstring);
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index 8ee2179..88f2928 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -624,7 +624,7 @@ namespace OpenSim.Region.Environment.Scenes
624 // close the inner scene 624 // close the inner scene
625 m_innerScene.Close(); 625 m_innerScene.Close();
626 // De-register with region communications (events cleanup) 626 // De-register with region communications (events cleanup)
627 UnRegisterReginWithComms(); 627 UnRegisterRegionWithComms();
628 628
629 // Shut down all non shared modules. 629 // Shut down all non shared modules.
630 foreach (IRegionModule module in Modules.Values) 630 foreach (IRegionModule module in Modules.Values)
@@ -1775,10 +1775,9 @@ namespace OpenSim.Region.Environment.Scenes
1775 /// <returns>true if the object was in the scene, false if it was not</returns> 1775 /// <returns>true if the object was in the scene, false if it was not</returns>
1776 public bool UnlinkSceneObject(UUID uuid, bool resultOfLinkingObjects) 1776 public bool UnlinkSceneObject(UUID uuid, bool resultOfLinkingObjects)
1777 { 1777 {
1778 if (m_innerScene.DeleteSceneObject(uuid,resultOfLinkingObjects)) 1778 if (m_innerScene.DeleteSceneObject(uuid, resultOfLinkingObjects))
1779 { 1779 {
1780 m_storageManager.DataStore.RemoveObject(uuid, m_regInfo.RegionID); 1780 m_storageManager.DataStore.RemoveObject(uuid, m_regInfo.RegionID);
1781
1782 return true; 1781 return true;
1783 } 1782 }
1784 1783
@@ -2568,7 +2567,7 @@ namespace OpenSim.Region.Environment.Scenes
2568 /// <summary> 2567 /// <summary>
2569 /// 2568 ///
2570 /// </summary> 2569 /// </summary>
2571 public void UnRegisterReginWithComms() 2570 public void UnRegisterRegionWithComms()
2572 { 2571 {
2573 m_sceneGridService.KiPrimitive -= SendKiPrimitive; 2572 m_sceneGridService.KiPrimitive -= SendKiPrimitive;
2574 m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid; 2573 m_sceneGridService.OnLogOffUser -= HandleLogOffUserFromGrid;