Start recording inter-region teleport attempts, aborts, cancels and failures in statistics for monitoring/debugging purposes
These are recorded as 'entitytransfer' stats as seen by the "show stats entitytransfer" console command.0.7.4-extended
							parent
							
								
									f6a0294bbc
								
							
						
					
					
						commit
						0f569d2359
					
				|  | @ -33,6 +33,7 @@ using System.Threading; | ||||||
| using OpenSim.Framework; | using OpenSim.Framework; | ||||||
| using OpenSim.Framework.Capabilities; | using OpenSim.Framework.Capabilities; | ||||||
| using OpenSim.Framework.Client; | using OpenSim.Framework.Client; | ||||||
|  | using OpenSim.Framework.Monitoring; | ||||||
| using OpenSim.Region.Framework.Interfaces; | using OpenSim.Region.Framework.Interfaces; | ||||||
| using OpenSim.Region.Framework.Scenes; | using OpenSim.Region.Framework.Scenes; | ||||||
| using OpenSim.Region.Physics.Manager; | using OpenSim.Region.Physics.Manager; | ||||||
|  | @ -75,6 +76,31 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|         /// </remarks> |         /// </remarks> | ||||||
|         public bool DisableInterRegionTeleportCancellation { get; set; } |         public bool DisableInterRegionTeleportCancellation { get; set; } | ||||||
| 
 | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// Number of times inter-region teleport was attempted. | ||||||
|  |         /// </summary> | ||||||
|  |         private Stat m_interRegionTeleportAttempts; | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// Number of times inter-region teleport was aborted (due to simultaneous client logout). | ||||||
|  |         /// </summary> | ||||||
|  |         private Stat m_interRegionTeleportAborts; | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// Number of times inter-region teleport was successfully cancelled by the client. | ||||||
|  |         /// </summary> | ||||||
|  |         private Stat m_interRegionTeleportCancels; | ||||||
|  | 
 | ||||||
|  |         /// <summary> | ||||||
|  |         /// Number of times inter-region teleport failed due to server/client/network problems (e.g. viewer failed to | ||||||
|  |         /// connect with destination region). | ||||||
|  |         /// </summary> | ||||||
|  |         /// <remarks> | ||||||
|  |         /// This is not necessarily a problem for this simulator - in open-grid/hg conditions, viewer connectivity to | ||||||
|  |         /// destination simulator is unknown. | ||||||
|  |         /// </remarks> | ||||||
|  |         private Stat m_interRegionTeleportFailures; | ||||||
|  | 
 | ||||||
|         protected bool m_Enabled = false; |         protected bool m_Enabled = false; | ||||||
| 
 | 
 | ||||||
|         public Scene Scene { get; private set; } |         public Scene Scene { get; private set; } | ||||||
|  | @ -154,6 +180,60 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
| 
 | 
 | ||||||
|             Scene = scene; |             Scene = scene; | ||||||
| 
 | 
 | ||||||
|  |             m_interRegionTeleportAttempts =  | ||||||
|  |                 new Stat( | ||||||
|  |                     "InterRegionTeleportAttempts", | ||||||
|  |                     "Number of inter-region teleports attempted.", | ||||||
|  |                     "This does not count attempts which failed due to pre-conditions (e.g. target simulator refused access).\n" | ||||||
|  |                         + "You can get successfully teleports by subtracting aborts, cancels and teleport failures from this figure.", | ||||||
|  |                     "", | ||||||
|  |                     "entitytransfer", | ||||||
|  |                     Scene.Name, | ||||||
|  |                     StatType.Push, | ||||||
|  |                     null, | ||||||
|  |                     StatVerbosity.Debug); | ||||||
|  | 
 | ||||||
|  |             m_interRegionTeleportAborts =  | ||||||
|  |                 new Stat( | ||||||
|  |                     "InterRegionTeleportAborts", | ||||||
|  |                     "Number of inter-region teleports aborted due to client actions.", | ||||||
|  |                     "The chief action is simultaneous logout whilst teleporting.", | ||||||
|  |                     "", | ||||||
|  |                     "entitytransfer", | ||||||
|  |                     Scene.Name, | ||||||
|  |                     StatType.Push, | ||||||
|  |                     null, | ||||||
|  |                     StatVerbosity.Debug); | ||||||
|  | 
 | ||||||
|  |             m_interRegionTeleportCancels =  | ||||||
|  |                 new Stat( | ||||||
|  |                     "InterRegionTeleportCancels", | ||||||
|  |                     "Number of inter-region teleports cancelled by the client.", | ||||||
|  |                     null, | ||||||
|  |                     "", | ||||||
|  |                     "entitytransfer", | ||||||
|  |                     Scene.Name, | ||||||
|  |                     StatType.Push, | ||||||
|  |                     null, | ||||||
|  |                     StatVerbosity.Debug); | ||||||
|  | 
 | ||||||
|  |             m_interRegionTeleportFailures =  | ||||||
|  |                 new Stat( | ||||||
|  |                     "InterRegionTeleportFailures", | ||||||
|  |                     "Number of inter-region teleports that failed due to server/client/network issues.", | ||||||
|  |                     "This number may not be very helpful in open-grid/hg situations as the network connectivity/quality of destinations is uncontrollable.", | ||||||
|  |                     "", | ||||||
|  |                     "entitytransfer", | ||||||
|  |                     Scene.Name, | ||||||
|  |                     StatType.Push, | ||||||
|  |                     null, | ||||||
|  |                     StatVerbosity.Debug); | ||||||
|  | 
 | ||||||
|  |             StatsManager.RegisterStat(m_interRegionTeleportAttempts); | ||||||
|  |             StatsManager.RegisterStat(m_interRegionTeleportAborts); | ||||||
|  |             StatsManager.RegisterStat(m_interRegionTeleportCancels); | ||||||
|  |             StatsManager.RegisterStat(m_interRegionTeleportFailures); | ||||||
|  | 
 | ||||||
|             scene.RegisterModuleInterface<IEntityTransferModule>(this); |             scene.RegisterModuleInterface<IEntityTransferModule>(this); | ||||||
|             scene.EventManager.OnNewClient += OnNewClient; |             scene.EventManager.OnNewClient += OnNewClient; | ||||||
|         } |         } | ||||||
|  | @ -171,7 +251,13 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
| 
 | 
 | ||||||
|         public virtual void Close() {} |         public virtual void Close() {} | ||||||
| 
 | 
 | ||||||
|         public virtual void RemoveRegion(Scene scene) {} |         public virtual void RemoveRegion(Scene scene)  | ||||||
|  |         { | ||||||
|  |             StatsManager.DeregisterStat(m_interRegionTeleportAttempts); | ||||||
|  |             StatsManager.DeregisterStat(m_interRegionTeleportAborts); | ||||||
|  |             StatsManager.DeregisterStat(m_interRegionTeleportCancels); | ||||||
|  |             StatsManager.DeregisterStat(m_interRegionTeleportFailures); | ||||||
|  |         } | ||||||
| 
 | 
 | ||||||
|         public virtual void RegionLoaded(Scene scene) |         public virtual void RegionLoaded(Scene scene) | ||||||
|         { |         { | ||||||
|  | @ -528,6 +614,11 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             // Before this point, teleport 'failure' is due to checkable pre-conditions such as whether the target | ||||||
|  |             // simulator can be found and is explicitly prepared to allow access.  Therefore, we will not count these | ||||||
|  |             // as server attempts. | ||||||
|  |             m_interRegionTeleportAttempts.Value++; | ||||||
|  | 
 | ||||||
|             m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Destination is running version {0}", version); |             m_log.DebugFormat("[ENTITY TRANSFER MODULE]: Destination is running version {0}", version); | ||||||
| 
 | 
 | ||||||
|             // Fixing a bug where teleporting while sitting results in the avatar ending up removed from |             // Fixing a bug where teleporting while sitting results in the avatar ending up removed from | ||||||
|  | @ -578,6 +669,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|             bool logout = false; |             bool logout = false; | ||||||
|             if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout)) |             if (!CreateAgent(sp, reg, finalDestination, agentCircuit, teleportFlags, out reason, out logout)) | ||||||
|             { |             { | ||||||
|  |                 m_interRegionTeleportFailures.Value++; | ||||||
|  | 
 | ||||||
|                 sp.ControllingClient.SendTeleportFailed(String.Format("Teleport refused: {0}", reason)); |                 sp.ControllingClient.SendTeleportFailed(String.Format("Teleport refused: {0}", reason)); | ||||||
| 
 | 
 | ||||||
|                 m_log.DebugFormat( |                 m_log.DebugFormat( | ||||||
|  | @ -589,6 +682,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
| 
 | 
 | ||||||
|             if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Cancelling) |             if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Cancelling) | ||||||
|             { |             { | ||||||
|  |                 m_interRegionTeleportCancels.Value++; | ||||||
|  | 
 | ||||||
|                 m_log.DebugFormat( |                 m_log.DebugFormat( | ||||||
|                     "[ENTITY TRANSFER MODULE]: Cancelled teleport of {0} to {1} from {2} after CreateAgent on client request",  |                     "[ENTITY TRANSFER MODULE]: Cancelled teleport of {0} to {1} from {2} after CreateAgent on client request",  | ||||||
|                     sp.Name, finalDestination.RegionName, sp.Scene.Name); |                     sp.Name, finalDestination.RegionName, sp.Scene.Name); | ||||||
|  | @ -597,6 +692,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|             } |             } | ||||||
|             else if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting) |             else if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting) | ||||||
|             { |             { | ||||||
|  |                 m_interRegionTeleportAborts.Value++; | ||||||
|  | 
 | ||||||
|                 m_log.DebugFormat( |                 m_log.DebugFormat( | ||||||
|                     "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} after CreateAgent due to previous client close.", |                     "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} after CreateAgent due to previous client close.", | ||||||
|                     sp.Name, finalDestination.RegionName, sp.Scene.Name); |                     sp.Name, finalDestination.RegionName, sp.Scene.Name); | ||||||
|  | @ -666,6 +763,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|             // establish th econnection to the destination which makes it return true. |             // establish th econnection to the destination which makes it return true. | ||||||
|             if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting) |             if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting) | ||||||
|             { |             { | ||||||
|  |                 m_interRegionTeleportAborts.Value++; | ||||||
|  | 
 | ||||||
|                 m_log.DebugFormat( |                 m_log.DebugFormat( | ||||||
|                     "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} before UpdateAgent", |                     "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} before UpdateAgent", | ||||||
|                     sp.Name, finalDestination.RegionName, sp.Scene.Name); |                     sp.Name, finalDestination.RegionName, sp.Scene.Name); | ||||||
|  | @ -681,6 +780,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|             { |             { | ||||||
|                 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting) |                 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting) | ||||||
|                 { |                 { | ||||||
|  |                     m_interRegionTeleportAborts.Value++; | ||||||
|  | 
 | ||||||
|                     m_log.DebugFormat( |                     m_log.DebugFormat( | ||||||
|                         "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} after UpdateAgent due to previous client close.", |                         "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} after UpdateAgent due to previous client close.", | ||||||
|                         sp.Name, finalDestination.RegionName, sp.Scene.Name); |                         sp.Name, finalDestination.RegionName, sp.Scene.Name); | ||||||
|  | @ -698,6 +799,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
| 
 | 
 | ||||||
|             if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Cancelling) |             if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Cancelling) | ||||||
|             { |             { | ||||||
|  |                 m_interRegionTeleportCancels.Value++; | ||||||
|  | 
 | ||||||
|                 m_log.DebugFormat( |                 m_log.DebugFormat( | ||||||
|                     "[ENTITY TRANSFER MODULE]: Cancelled teleport of {0} to {1} from {2} after UpdateAgent on client request",  |                     "[ENTITY TRANSFER MODULE]: Cancelled teleport of {0} to {1} from {2} after UpdateAgent on client request",  | ||||||
|                     sp.Name, finalDestination.RegionName, sp.Scene.Name); |                     sp.Name, finalDestination.RegionName, sp.Scene.Name); | ||||||
|  | @ -733,6 +836,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|             { |             { | ||||||
|                 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting) |                 if (m_entityTransferStateMachine.GetAgentTransferState(sp.UUID) == AgentTransferState.Aborting) | ||||||
|                 { |                 { | ||||||
|  |                     m_interRegionTeleportAborts.Value++; | ||||||
|  | 
 | ||||||
|                     m_log.DebugFormat( |                     m_log.DebugFormat( | ||||||
|                         "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} after WaitForAgentArrivedAtDestination due to previous client close.", |                         "[ENTITY TRANSFER MODULE]: Aborted teleport of {0} to {1} from {2} after WaitForAgentArrivedAtDestination due to previous client close.", | ||||||
|                         sp.Name, finalDestination.RegionName, sp.Scene.Name); |                         sp.Name, finalDestination.RegionName, sp.Scene.Name); | ||||||
|  | @ -745,6 +850,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|                     sp.Name, finalDestination.RegionName, sp.Scene.RegionInfo.RegionName); |                     sp.Name, finalDestination.RegionName, sp.Scene.RegionInfo.RegionName); | ||||||
|                  |                  | ||||||
|                 Fail(sp, finalDestination, logout, "Destination region did not signal teleport completion."); |                 Fail(sp, finalDestination, logout, "Destination region did not signal teleport completion."); | ||||||
|  | 
 | ||||||
|                 return; |                 return; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  | @ -786,15 +892,6 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|                 // now we have a child agent in this region.  |                 // now we have a child agent in this region.  | ||||||
|                 sp.Reset(); |                 sp.Reset(); | ||||||
|             } |             } | ||||||
| 
 |  | ||||||
|             // Commented pending deletion since this method no longer appears to do anything at all |  | ||||||
| //            // REFACTORING PROBLEM. Well, not a problem, but this method is HORRIBLE! |  | ||||||
| //            if (sp.Scene.NeedSceneCacheClear(sp.UUID)) |  | ||||||
| //            { |  | ||||||
| //                m_log.DebugFormat( |  | ||||||
| //                    "[ENTITY TRANSFER MODULE]: User {0} is going to another region, profile cache removed", |  | ||||||
| //                    sp.UUID); |  | ||||||
| //            } |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         /// <summary> |         /// <summary> | ||||||
|  | @ -830,6 +927,8 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | ||||||
|         { |         { | ||||||
|             CleanupFailedInterRegionTeleport(sp, finalDestination); |             CleanupFailedInterRegionTeleport(sp, finalDestination); | ||||||
| 
 | 
 | ||||||
|  |             m_interRegionTeleportFailures.Value++; | ||||||
|  | 
 | ||||||
|             sp.ControllingClient.SendTeleportFailed( |             sp.ControllingClient.SendTeleportFailed( | ||||||
|                 string.Format( |                 string.Format( | ||||||
|                     "Problems connecting to destination {0}, reason: {1}", finalDestination.RegionName, reason)); |                     "Problems connecting to destination {0}, reason: {1}", finalDestination.RegionName, reason)); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Justin Clark-Casey (justincc)
						Justin Clark-Casey (justincc)