From af3cd00048fb6476eb5140bcfccda926627363f2 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 9 Dec 2011 23:07:53 +0000 Subject: [PATCH 1/6] Get rid of IScene.PresenceChildStatus() which always had to execute a lookup in favour of IClientAPI.ISceneAgent.IsChildAgent instead. --- OpenSim/Framework/IScene.cs | 13 ------------- OpenSim/Framework/ISceneAgent.cs | 7 +++++++ .../ClientStack/Linden/UDP/LLClientView.cs | 16 ++++------------ OpenSim/Region/Framework/Scenes/Scene.cs | 11 ----------- OpenSim/Region/Framework/Scenes/SceneBase.cs | 5 ----- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 15 ++------------- .../Agent/UDP/Linden/LindenUDPInfoModule.cs | 6 +++--- 7 files changed, 16 insertions(+), 57 deletions(-) diff --git a/OpenSim/Framework/IScene.cs b/OpenSim/Framework/IScene.cs index e0e023d76c..b2604f4a39 100644 --- a/OpenSim/Framework/IScene.cs +++ b/OpenSim/Framework/IScene.cs @@ -89,19 +89,6 @@ namespace OpenSim.Framework string GetSimulatorVersion(); - /// - /// Is the agent denoted by the given agentID a child presence in this scene? - /// - /// - /// Used by ClientView when a 'kick everyone' or 'estate message' occurs - /// - /// AvatarID to lookup - /// true if the presence is a child agent, false if the presence is a root exception - /// - /// Thrown if the agent does not exist. - /// - bool PresenceChildStatus(UUID agentId); - bool TryGetScenePresence(UUID agentID, out object scenePresence); /// diff --git a/OpenSim/Framework/ISceneAgent.cs b/OpenSim/Framework/ISceneAgent.cs index 69e91edfa7..824172d58a 100644 --- a/OpenSim/Framework/ISceneAgent.cs +++ b/OpenSim/Framework/ISceneAgent.cs @@ -47,6 +47,13 @@ namespace OpenSim.Framework /// PresenceType PresenceType { get; } + /// + /// If true, then the agent has no avatar in the scene. + /// The agent exists to relay data from a region that neighbours the current position of the user's avatar. + /// Occasionally data is relayed, such as which a user clicks an item in a neighbouring region. + /// + bool IsChildAgent { get; } + /// /// Avatar appearance data. /// diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index f2466377f0..1d4be8a444 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -525,7 +525,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP public void Kick(string message) { - if (!ChildAgentStatus()) + if (!SceneAgent.IsChildAgent) { KickUserPacket kupack = (KickUserPacket)PacketPool.Instance.GetPacket(PacketType.KickUser); kupack.UserInfo.AgentID = AgentId; @@ -2448,7 +2448,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// public void SendBlueBoxMessage(UUID FromAvatarID, String FromAvatarName, String Message) { - if (!ChildAgentStatus()) + if (!SceneAgent.IsChildAgent) SendInstantMessage(new GridInstantMessage(null, FromAvatarID, FromAvatarName, AgentId, 1, Message, false, new Vector3())); //SendInstantMessage(FromAvatarID, fromSessionID, Message, AgentId, SessionId, FromAvatarName, (byte)21,(uint) Util.UnixTimeSinceEpoch()); @@ -5054,14 +5054,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP return 0; } - /// - /// This is a utility method used by single states to not duplicate kicks and blue card of death messages. - /// - public bool ChildAgentStatus() - { - return m_scene.PresenceChildStatus(AgentId); - } - #endregion /// @@ -11625,7 +11617,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (logPacket) m_log.DebugFormat( "[CLIENT]: PACKET OUT to {0} ({1}) in {2} - {3}", - Name, ChildAgentStatus() ? "child" : "root ", m_scene.RegionInfo.RegionName, packet.Type); + Name, SceneAgent.IsChildAgent ? "child" : "root ", m_scene.RegionInfo.RegionName, packet.Type); } m_udpServer.SendPacket(m_udpClient, packet, throttlePacketType, doAutomaticSplitting, method); @@ -11682,7 +11674,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (logPacket) m_log.DebugFormat( "[CLIENT]: PACKET IN from {0} ({1}) in {2} - {3}", - Name, ChildAgentStatus() ? "child" : "root ", m_scene.RegionInfo.RegionName, packet.Type); + Name, SceneAgent.IsChildAgent ? "child" : "root ", m_scene.RegionInfo.RegionName, packet.Type); } if (!ProcessPacketMethod(packet)) diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 11505cc040..9fdf395f42 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -4192,17 +4192,6 @@ namespace OpenSim.Region.Framework.Scenes return m_sceneGraph.GetScenePresence(localID); } - /// - /// Returns true if scene presence is a child (no avatar in this scene) - /// - /// - /// - public override bool PresenceChildStatus(UUID avatarID) - { - ScenePresence sp; - return TryGetScenePresence(avatarID, out sp) && sp.IsChildAgent; - } - /// /// Performs action on all avatars in the scene (root scene presences) /// Avatars may be an NPC or a 'real' client. diff --git a/OpenSim/Region/Framework/Scenes/SceneBase.cs b/OpenSim/Region/Framework/Scenes/SceneBase.cs index da15491e20..712e094b2a 100644 --- a/OpenSim/Region/Framework/Scenes/SceneBase.cs +++ b/OpenSim/Region/Framework/Scenes/SceneBase.cs @@ -211,11 +211,6 @@ namespace OpenSim.Region.Framework.Scenes } #region admin stuff - - public virtual bool PresenceChildStatus(UUID avatarID) - { - return false; - } public abstract void OtherRegionUp(GridRegion otherRegion); diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index cebf51b803..fa731a7038 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -612,19 +612,7 @@ namespace OpenSim.Region.Framework.Scenes } } - /// - /// If this is true, agent doesn't have a representation in this scene. - /// this is an agent 'looking into' this scene from a nearby scene(region) - /// - /// if False, this agent has a representation in this scene - /// - private bool m_isChildAgent = true; - - public bool IsChildAgent - { - get { return m_isChildAgent; } - set { m_isChildAgent = value; } - } + public bool IsChildAgent { get; set; } public uint ParentID { @@ -741,6 +729,7 @@ namespace OpenSim.Region.Framework.Scenes { AttachmentsSyncLock = new Object(); + IsChildAgent = true; m_sendCourseLocationsMethod = SendCoarseLocationsDefault; Animator = new ScenePresenceAnimator(this); PresenceType = type; diff --git a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs index 8f8124e6f6..c754019b1e 100644 --- a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs +++ b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs @@ -219,7 +219,7 @@ namespace OpenSim.Region.CoreModules.UDP.Linden { if (client is LLClientView) { - bool isChild = scene.PresenceChildStatus(client.AgentId); + bool isChild = client.SceneAgent.IsChildAgent; if (isChild && !showChildren) return; @@ -308,7 +308,7 @@ namespace OpenSim.Region.CoreModules.UDP.Linden { if (client is IStatsCollector) { - bool isChild = scene.PresenceChildStatus(client.AgentId); + bool isChild = client.SceneAgent.IsChildAgent; if (isChild && !showChildren) return; @@ -404,7 +404,7 @@ namespace OpenSim.Region.CoreModules.UDP.Linden firstClient = false; } - bool isChild = scene.PresenceChildStatus(client.AgentId); + bool isChild = client.SceneAgent.IsChildAgent; if (isChild && !showChildren) return; From 13b1c8c1730147a0c7cf1a0a0039ed493e1cbb29 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 9 Dec 2011 23:21:54 +0000 Subject: [PATCH 2/6] Do some clean up Scene.cs log messages. This prints out both exception message and stacktrace (Exception.ToString()) isn't enough on Windows. This also uses m_log.*Format() which is more efficient than string concat. --- OpenSim/Region/Framework/Scenes/Scene.cs | 62 +++++++++++++++--------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 9fdf395f42..85debc4f94 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -760,7 +760,7 @@ namespace OpenSim.Region.Framework.Scenes } } - m_log.Info("[SCENE]: Using the " + m_priorityScheme + " prioritization scheme"); + m_log.InfoFormat("[SCENE]: Using the {0} prioritization scheme", m_priorityScheme); #endregion Interest Management @@ -891,9 +891,9 @@ namespace OpenSim.Region.Framework.Scenes } else { - m_log.Info("[INTERGRID]: Got notice about far away Region: " + otherRegion.RegionName.ToString() + - " at (" + otherRegion.RegionLocX.ToString() + ", " + - otherRegion.RegionLocY.ToString() + ")"); + m_log.InfoFormat( + "[INTERGRID]: Got notice about far away Region: {0} at ({1}, {2})", + otherRegion.RegionName, otherRegion.RegionLocX, otherRegion.RegionLocY); } } } @@ -1368,7 +1368,9 @@ namespace OpenSim.Region.Framework.Scenes } catch (AccessViolationException e) { - m_log.Error("[REGION]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); + m_log.ErrorFormat( + "[REGION]: Failed on region {0} with exception {1}{2}", + RegionInfo.RegionName, e.Message, e.StackTrace); } //catch (NullReferenceException e) //{ @@ -1376,11 +1378,15 @@ namespace OpenSim.Region.Framework.Scenes //} catch (InvalidOperationException e) { - m_log.Error("[REGION]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); + m_log.ErrorFormat( + "[REGION]: Failed on region {0} with exception {1}{2}", + RegionInfo.RegionName, e.Message, e.StackTrace); } catch (Exception e) { - m_log.Error("[REGION]: Failed with exception " + e.ToString() + " On Region: " + RegionInfo.RegionName); + m_log.ErrorFormat( + "[REGION]: Failed on region {0} with exception {1}{2}", + RegionInfo.RegionName, e.Message, e.StackTrace); } maintc = Util.EnvironmentTickCountSubtract(maintc); @@ -1602,7 +1608,9 @@ namespace OpenSim.Region.Framework.Scenes } catch (IOException e) { - m_log.Warn("[TERRAIN]: Scene.cs: LoadWorldMap() - Failed with exception " + e.ToString() + " Regenerating"); + m_log.WarnFormat( + "[TERRAIN]: Scene.cs: LoadWorldMap() - Regenerating as failed with exception {0}{1}", + e.Message, e.StackTrace); // Non standard region size. If there's an old terrain in the database, it might read past the buffer #pragma warning disable 0162 @@ -1615,7 +1623,8 @@ namespace OpenSim.Region.Framework.Scenes } catch (Exception e) { - m_log.Warn("[TERRAIN]: Scene.cs: LoadWorldMap() - Failed with exception " + e.ToString()); + m_log.WarnFormat( + "[TERRAIN]: Scene.cs: LoadWorldMap() - Failed with exception {0}{1}", e.Message, e.StackTrace); } } @@ -1689,7 +1698,7 @@ namespace OpenSim.Region.Framework.Scenes List PrimsFromDB = SimulationDataService.LoadObjects(regionID); - m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count + " objects from the datastore"); + m_log.InfoFormat("[SCENE]: Loaded {0} objects from the datastore", PrimsFromDB.Count); foreach (SceneObjectGroup group in PrimsFromDB) { @@ -1703,7 +1712,6 @@ namespace OpenSim.Region.Framework.Scenes // group.CheckSculptAndLoad(); } - m_log.Info("[SCENE]: Loaded " + PrimsFromDB.Count.ToString() + " SceneObject(s)"); LoadingPrims = false; EventManager.TriggerPrimsLoaded(this); } @@ -2326,7 +2334,7 @@ namespace OpenSim.Region.Framework.Scenes } catch (Exception e) { - m_log.WarnFormat("[SCENE]: Problem casting object: " + e.ToString()); + m_log.WarnFormat("[SCENE]: Problem casting object, exception {0}{1}", e.Message, e.StackTrace); return false; } @@ -2402,8 +2410,7 @@ namespace OpenSim.Region.Framework.Scenes // if (m_regInfo.EstateSettings.IsBanned(sceneObject.OwnerID)) { - m_log.Info("[INTERREGION]: Denied prim crossing for " + - "banned avatar"); + m_log.InfoFormat("[INTERREGION]: Denied prim crossing for banned avatar {0}", sceneObject.OwnerID); return false; } @@ -2460,8 +2467,7 @@ namespace OpenSim.Region.Framework.Scenes { // Deny non attachments based on parcel settings // - m_log.Info("[INTERREGION]: Denied prim crossing " + - "because of parcel settings"); + m_log.Info("[INTERREGION]: Denied prim crossing because of parcel settings"); DeleteSceneObject(sceneObject, false); @@ -2505,7 +2511,8 @@ namespace OpenSim.Region.Framework.Scenes // connected. if (sp == null) { - m_log.Debug("[SCENE]: Adding new child scene presence " + client.Name + " to scene " + RegionInfo.RegionName); + m_log.DebugFormat( + "[SCENE]: Adding new child scene presence {0} to scene {1}", client.Name, RegionInfo.RegionName); m_clientManager.Add(client); SubscribeToClientEvents(client); @@ -3141,7 +3148,7 @@ namespace OpenSim.Region.Framework.Scenes } catch (Exception e) { - m_log.Error("[SCENE] Scene.cs:RemoveClient exception: " + e.ToString()); + m_log.ErrorFormat("[SCENE] Scene.cs:RemoveClient exception {0}{1}", e.Message, e.StackTrace); } m_authenticateHandler.RemoveCircuit(avatar.ControllingClient.CircuitCode); @@ -3286,7 +3293,8 @@ namespace OpenSim.Region.Framework.Scenes } catch (Exception e) { - m_log.ErrorFormat("[CONNECTION BEGIN]: Exception verifying presence " + e.ToString()); + m_log.ErrorFormat( + "[CONNECTION BEGIN]: Exception verifying presence {0}{1}", e.Message, e.StackTrace); return false; } } @@ -3298,7 +3306,8 @@ namespace OpenSim.Region.Framework.Scenes } catch (Exception e) { - m_log.ErrorFormat("[CONNECTION BEGIN]: Exception authorizing user " + e.ToString()); + m_log.ErrorFormat( + "[CONNECTION BEGIN]: Exception authorizing user {0}{1}", e.Message, e.StackTrace); return false; } @@ -3509,7 +3518,9 @@ namespace OpenSim.Region.Framework.Scenes } } else + { m_log.ErrorFormat("[CONNECTION BEGIN]: Estate Settings is null!"); + } IGroupsModule groupsModule = RequestModuleInterface(); @@ -3527,7 +3538,9 @@ namespace OpenSim.Region.Framework.Scenes agentGroups.Add(GroupMembership[i].GroupID); } else + { m_log.ErrorFormat("[CONNECTION BEGIN]: GroupMembership is null!"); + } } bool groupAccess = false; @@ -3545,7 +3558,9 @@ namespace OpenSim.Region.Framework.Scenes } } else + { m_log.ErrorFormat("[CONNECTION BEGIN]: EstateGroups is null!"); + } if (!m_regInfo.EstateSettings.PublicAccess && !m_regInfo.EstateSettings.HasAccess(agent.AgentID) && @@ -3662,7 +3677,7 @@ namespace OpenSim.Region.Framework.Scenes } catch (Exception e) { - m_log.ErrorFormat("[SCENE]: Unable to do agent crossing, exception {0}", e); + m_log.ErrorFormat("[SCENE]: Unable to do agent crossing, exception {0}{1}", e.Message, e.StackTrace); } } else @@ -3968,7 +3983,7 @@ namespace OpenSim.Region.Framework.Scenes /// public void HandleEditCommand(string[] cmdparams) { - m_log.Debug("Searching for Primitive: '" + cmdparams[2] + "'"); + m_log.DebugFormat("Searching for Primitive: '{0}'", cmdparams[2]); EntityBase[] entityList = GetEntities(); foreach (EntityBase ent in entityList) @@ -3984,7 +3999,7 @@ namespace OpenSim.Region.Framework.Scenes new Vector3(Convert.ToSingle(cmdparams[3]), Convert.ToSingle(cmdparams[4]), Convert.ToSingle(cmdparams[5]))); - m_log.Debug("Edited scale of Primitive: " + part.Name); + m_log.DebugFormat("Edited scale of Primitive: {0}", part.Name); } } } @@ -4013,7 +4028,6 @@ namespace OpenSim.Region.Framework.Scenes return LandChannel.GetLandObject((int)x, (int)y).LandData; } - #endregion #region Script Engine From f24898d04945a6962deb7fc28aedb2280a908167 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 9 Dec 2011 23:24:52 +0000 Subject: [PATCH 3/6] Comment out ChildAgentDataUpdate.Pack() "Pack data" message for now. --- OpenSim/Framework/ChildAgentDataUpdate.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Framework/ChildAgentDataUpdate.cs b/OpenSim/Framework/ChildAgentDataUpdate.cs index 5a4811e408..1f2213657d 100644 --- a/OpenSim/Framework/ChildAgentDataUpdate.cs +++ b/OpenSim/Framework/ChildAgentDataUpdate.cs @@ -335,7 +335,7 @@ namespace OpenSim.Framework public virtual OSDMap Pack() { - m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Pack data"); +// m_log.InfoFormat("[CHILDAGENTDATAUPDATE] Pack data"); OSDMap args = new OSDMap(); args["message_type"] = OSD.FromString("AgentData"); From 0daa5d8b4d2127437b079c089a680dcbcf1c5268 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 9 Dec 2011 23:44:34 +0000 Subject: [PATCH 4/6] minor: comment out "unpacked appearance" log mesasge for now --- OpenSim/Framework/AgentCircuitData.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Framework/AgentCircuitData.cs b/OpenSim/Framework/AgentCircuitData.cs index 12c8ac0c15..54e1bf7667 100644 --- a/OpenSim/Framework/AgentCircuitData.cs +++ b/OpenSim/Framework/AgentCircuitData.cs @@ -311,7 +311,7 @@ namespace OpenSim.Framework if (args.ContainsKey("packed_appearance") && (args["packed_appearance"].Type == OSDType.Map)) { Appearance.Unpack((OSDMap)args["packed_appearance"]); - m_log.InfoFormat("[AGENTCIRCUITDATA] unpacked appearance"); +// m_log.InfoFormat("[AGENTCIRCUITDATA] unpacked appearance"); } else { From 5f276c3212cd0e5385e62d0607c5adeec29b76d7 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 9 Dec 2011 23:54:39 +0000 Subject: [PATCH 5/6] Print out one log message for every missing baked texture, rather than two. --- .../AvatarFactory/AvatarFactoryModule.cs | 26 +++---------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index 07d1cb3581..f06fb14a61 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs @@ -320,14 +320,14 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory defonly = false; // found a non-default texture reference - if (!CheckBakedTextureAsset(sp, face.TextureID, idx)) + if (m_scene.AssetService.Get(face.TextureID.ToString()) == null) { - // the asset didn't exist if we are only checking, then we found a bad - // one and we're done otherwise, ask for a rebake if (checkonly) return false; - m_log.InfoFormat("[AVFACTORY]: missing baked texture {0}, requesting rebake", face.TextureID); + m_log.DebugFormat( + "[AVFACTORY]: Missing baked texture {0} ({1}) for {2}, requesting rebake.", + face.TextureID, idx, sp.Name); sp.ControllingClient.SendRebakeAvatarTextures(face.TextureID); } @@ -339,24 +339,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory return (defonly ? false : true); } - /// - /// Checks for the existance of a baked texture asset and - /// requests the viewer rebake if the asset is not found - /// - /// - /// - /// - private bool CheckBakedTextureAsset(IScenePresence sp, UUID textureID, int idx) - { - if (m_scene.AssetService.Get(textureID.ToString()) == null) - { - m_log.WarnFormat("[AVFACTORY]: Missing baked texture {0} ({1}) for avatar {2}", - textureID, idx, sp.Name); - return false; - } - return true; - } - private Dictionary GetBakedTextureFaces(ScenePresence sp) { if (sp.IsChildAgent) From e88ad5aab99886eb70caf37627e8a6e3fc840e6e Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Fri, 9 Dec 2011 23:55:54 +0000 Subject: [PATCH 6/6] minor: remove a mono compiler warning --- .../OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs b/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs index 89704d5b25..40cbc606a1 100644 --- a/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/Appearance/AppearanceInfoModule.cs @@ -53,7 +53,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Appearance public const string SHOW_APPEARANCE_FORMAT = "{0,-9} {1}"; private Dictionary m_scenes = new Dictionary(); - private IAvatarFactoryModule m_avatarFactory; +// private IAvatarFactoryModule m_avatarFactory; public string Name { get { return "Appearance Information Module"; } }