aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Framework/EntityTransfer
diff options
context:
space:
mode:
authorMelanie2013-03-26 03:26:02 +0000
committerMelanie2013-03-26 03:26:02 +0000
commit95d0a7d4faffd94199f49e2bd0d658d2d8333189 (patch)
tree639471bf99034d3209ca6b8496668d9e0fbdbe84 /OpenSim/Region/CoreModules/Framework/EntityTransfer
parentMerge branch 'master' into careminster (diff)
parentBulletSim: new algorithm for vertical attraction which uses quaternion (diff)
downloadopensim-SC-95d0a7d4faffd94199f49e2bd0d658d2d8333189.zip
opensim-SC-95d0a7d4faffd94199f49e2bd0d658d2d8333189.tar.gz
opensim-SC-95d0a7d4faffd94199f49e2bd0d658d2d8333189.tar.bz2
opensim-SC-95d0a7d4faffd94199f49e2bd0d658d2d8333189.tar.xz
Merge branch 'master' into careminster
Conflicts: OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework/EntityTransfer')
-rw-r--r--OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs119
1 files changed, 109 insertions, 10 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
index a30d8eb..974fd57 100644
--- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs
@@ -33,6 +33,7 @@ using System.Threading;
33using OpenSim.Framework; 33using OpenSim.Framework;
34using OpenSim.Framework.Capabilities; 34using OpenSim.Framework.Capabilities;
35using OpenSim.Framework.Client; 35using OpenSim.Framework.Client;
36using OpenSim.Framework.Monitoring;
36using OpenSim.Region.Framework.Interfaces; 37using OpenSim.Region.Framework.Interfaces;
37using OpenSim.Region.Framework.Scenes; 38using OpenSim.Region.Framework.Scenes;
38using OpenSim.Region.Physics.Manager; 39using OpenSim.Region.Physics.Manager;
@@ -77,6 +78,31 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
77 /// </remarks> 78 /// </remarks>
78 public bool DisableInterRegionTeleportCancellation { get; set; } 79 public bool DisableInterRegionTeleportCancellation { get; set; }
79 80
81 /// <summary>
82 /// Number of times inter-region teleport was attempted.
83 /// </summary>
84 private Stat m_interRegionTeleportAttempts;
85
86 /// <summary>
87 /// Number of times inter-region teleport was aborted (due to simultaneous client logout).
88 /// </summary>
89 private Stat m_interRegionTeleportAborts;
90
91 /// <summary>
92 /// Number of times inter-region teleport was successfully cancelled by the client.
93 /// </summary>
94 private Stat m_interRegionTeleportCancels;
95
96 /// <summary>
97 /// Number of times inter-region teleport failed due to server/client/network problems (e.g. viewer failed to
98 /// connect with destination region).
99 /// </summary>
100 /// <remarks>
101 /// This is not necessarily a problem for this simulator - in open-grid/hg conditions, viewer connectivity to
102 /// destination simulator is unknown.
103 /// </remarks>
104 private Stat m_interRegionTeleportFailures;
105
80 protected bool m_Enabled = false; 106 protected bool m_Enabled = false;
81 107
82 public Scene Scene { get; private set; } 108 public Scene Scene { get; private set; }
@@ -156,6 +182,60 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
156 182
157 Scene = scene; 183 Scene = scene;
158 184
185 m_interRegionTeleportAttempts =
186 new Stat(
187 "InterRegionTeleportAttempts",
188 "Number of inter-region teleports attempted.",
189 "This does not count attempts which failed due to pre-conditions (e.g. target simulator refused access).\n"
190 + "You can get successfully teleports by subtracting aborts, cancels and teleport failures from this figure.",
191 "",
192 "entitytransfer",
193 Scene.Name,
194 StatType.Push,
195 null,
196 StatVerbosity.Debug);
197
198 m_interRegionTeleportAborts =
199 new Stat(
200 "InterRegionTeleportAborts",
201 "Number of inter-region teleports aborted due to client actions.",
202 "The chief action is simultaneous logout whilst teleporting.",
203 "",
204 "entitytransfer",
205 Scene.Name,
206 StatType.Push,
207 null,
208 StatVerbosity.Debug);
209
210 m_interRegionTeleportCancels =
211 new Stat(
212 "InterRegionTeleportCancels",
213 "Number of inter-region teleports cancelled by the client.",
214 null,
215 "",
216 "entitytransfer",
217 Scene.Name,
218 StatType.Push,
219 null,
220 StatVerbosity.Debug);
221
222 m_interRegionTeleportFailures =
223 new Stat(
224 "InterRegionTeleportFailures",
225 "Number of inter-region teleports that failed due to server/client/network issues.",
226 "This number may not be very helpful in open-grid/hg situations as the network connectivity/quality of destinations is uncontrollable.",
227 "",
228 "entitytransfer",
229 Scene.Name,
230 StatType.Push,
231 null,
232 StatVerbosity.Debug);
233
234 StatsManager.RegisterStat(m_interRegionTeleportAttempts);
235 StatsManager.RegisterStat(m_interRegionTeleportAborts);
236 StatsManager.RegisterStat(m_interRegionTeleportCancels);
237 StatsManager.RegisterStat(m_interRegionTeleportFailures);
238
159 scene.RegisterModuleInterface<IEntityTransferModule>(this); 239 scene.RegisterModuleInterface<IEntityTransferModule>(this);
160 scene.EventManager.OnNewClient += OnNewClient; 240 scene.EventManager.OnNewClient += OnNewClient;
161 } 241 }
@@ -173,7 +253,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
173 253
174 public virtual void Close() {} 254 public virtual void Close() {}
175 255
176 public virtual void RemoveRegion(Scene scene) {} 256 public virtual void RemoveRegion(Scene scene)
257 {
258 StatsManager.DeregisterStat(m_interRegionTeleportAttempts);
259 StatsManager.DeregisterStat(m_interRegionTeleportAborts);
260 StatsManager.DeregisterStat(m_interRegionTeleportCancels);
261 StatsManager.DeregisterStat(m_interRegionTeleportFailures);
262 }
177 263
178 public virtual void RegionLoaded(Scene scene) 264 public virtual void RegionLoaded(Scene scene)
179 { 265 {
@@ -548,6 +634,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
548 return; 634 return;
549 } 635 }
550 636
637 // Before this point, teleport 'failure' is due to checkable pre-conditions such as whether the target
638 // simulator can be found and is explicitly prepared to allow access. Therefore, we will not count these
639 // as server attempts.
640 m_interRegionTeleportAttempts.Value++;
641
551 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Destination is running version {0}", version); 642 m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Destination is running version {0}", version);
552 643
553 // Fixing a bug where teleporting while sitting results in the avatar ending up removed from 644 // Fixing a bug where teleporting while sitting results in the avatar ending up removed from
@@ -600,6 +691,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
600 bool logout = false; 691 bool logout = false;
601 if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout)) 692 if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout))
602 { 693 {
694 m_interRegionTeleportFailures.Value++;
695
603 sp.ControllingClient.SendTeleportFailed(String.Format("Teleport refused: {0}", reason)); 696 sp.ControllingClient.SendTeleportFailed(String.Format("Teleport refused: {0}", reason));
604 697
605 m_log.DebugFormat( 698 m_log.DebugFormat(
@@ -611,6 +704,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
611 704
612 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Cancelling) 705 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Cancelling)
613 { 706 {
707 m_interRegionTeleportCancels.Value++;
708
614 m_log.DebugFormat( 709 m_log.DebugFormat(
615 "[ENTITY TRANSFER MODULE]: Cancelled teleport of {0} to {1} from {2} after CreateAgent on client request", 710 "[ENTITY TRANSFER MODULE]: Cancelled teleport of {0} to {1} from {2} after CreateAgent on client request",
616 sp.Name, finalDestination.RegionName, sp.Scene.Name); 711 sp.Name, finalDestination.RegionName, sp.Scene.Name);
@@ -619,6 +714,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
619 } 714 }
620 else if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting) 715 else if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting)
621 { 716 {
717 m_interRegionTeleportAborts.Value++;
718
622 m_log.DebugFormat( 719 m_log.DebugFormat(
623 "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} after CreateAgent due to previous client close.", 720 "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} after CreateAgent due to previous client close.",
624 sp.Name, finalDestination.RegionName, sp.Scene.Name); 721 sp.Name, finalDestination.RegionName, sp.Scene.Name);
@@ -688,6 +785,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
688 // establish th econnection to the destination which makes it return true. 785 // establish th econnection to the destination which makes it return true.
689 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting) 786 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting)
690 { 787 {
788 m_interRegionTeleportAborts.Value++;
789
691 m_log.DebugFormat( 790 m_log.DebugFormat(
692 "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} before UpdateAgent", 791 "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} before UpdateAgent",
693 sp.Name, finalDestination.RegionName, sp.Scene.Name); 792 sp.Name, finalDestination.RegionName, sp.Scene.Name);
@@ -703,6 +802,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
703 { 802 {
704 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting) 803 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting)
705 { 804 {
805 m_interRegionTeleportAborts.Value++;
806
706 m_log.DebugFormat( 807 m_log.DebugFormat(
707 "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} after UpdateAgent due to previous client close.", 808 "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} after UpdateAgent due to previous client close.",
708 sp.Name, finalDestination.RegionName, sp.Scene.Name); 809 sp.Name, finalDestination.RegionName, sp.Scene.Name);
@@ -720,6 +821,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
720 821
721 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Cancelling) 822 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Cancelling)
722 { 823 {
824 m_interRegionTeleportCancels.Value++;
825
723 m_log.DebugFormat( 826 m_log.DebugFormat(
724 "[ENTITY TRANSFER MODULE]: Cancelled teleport of {0} to {1} from {2} after UpdateAgent on client request", 827 "[ENTITY TRANSFER MODULE]: Cancelled teleport of {0} to {1} from {2} after UpdateAgent on client request",
725 sp.Name, finalDestination.RegionName, sp.Scene.Name); 828 sp.Name, finalDestination.RegionName, sp.Scene.Name);
@@ -755,6 +858,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
755 { 858 {
756 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting) 859 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting)
757 { 860 {
861 m_interRegionTeleportAborts.Value++;
862
758 m_log.DebugFormat( 863 m_log.DebugFormat(
759 "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} after WaitForAgentArrivedAtDestination due to previous client close.", 864 "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} after WaitForAgentArrivedAtDestination due to previous client close.",
760 sp.Name, finalDestination.RegionName, sp.Scene.Name); 865 sp.Name, finalDestination.RegionName, sp.Scene.Name);
@@ -767,6 +872,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
767 sp.Name, finalDestination.RegionName, sp.Scene.RegionInfo.RegionName); 872 sp.Name, finalDestination.RegionName, sp.Scene.RegionInfo.RegionName);
768 873
769 Fail(sp, finalDestination, logout, "Destination region did not signal teleport completion."); 874 Fail(sp, finalDestination, logout, "Destination region did not signal teleport completion.");
875
770 return; 876 return;
771 } 877 }
772 878
@@ -808,15 +914,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
808 // now we have a child agent in this region. 914 // now we have a child agent in this region.
809 sp.Reset(); 915 sp.Reset();
810 } 916 }
811
812 // Commented pending deletion since this method no longer appears to do anything at all
813// // REFACTORING PROBLEM. Well, not a problem, but this method is HORRIBLE!
814// if (sp.Scene.NeedSceneCacheClear(sp.UUID))
815// {
816// m_log.DebugFormat(
817// "[ENTITY TRANSFER MODULE]: User {0} is going to another region, profile cache removed",
818// sp.UUID);
819// }
820 } 917 }
821 918
822 /// <summary> 919 /// <summary>
@@ -852,6 +949,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
852 { 949 {
853 CleanupFailedInterRegionTeleport(sp, finalDestination); 950 CleanupFailedInterRegionTeleport(sp, finalDestination);
854 951
952 m_interRegionTeleportFailures.Value++;
953
855 sp.ControllingClient.SendTeleportFailed( 954 sp.ControllingClient.SendTeleportFailed(
856 string.Format( 955 string.Format(
857 "Problems connecting to destination {0}, reason: {1}", finalDestination.RegionName, reason)); 956 "Problems connecting to destination {0}, reason: {1}", finalDestination.RegionName, reason));