aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clarke Casey2008-03-21 19:16:29 +0000
committerJustin Clarke Casey2008-03-21 19:16:29 +0000
commit45ea15680444c3ebb009ebc7592c168707fbc0dd (patch)
treeb021a2bb9233df61aa4176990e60f9b1e7b2a831
parentImplements llKey2Name(). (diff)
downloadopensim-SC-45ea15680444c3ebb009ebc7592c168707fbc0dd.zip
opensim-SC-45ea15680444c3ebb009ebc7592c168707fbc0dd.tar.gz
opensim-SC-45ea15680444c3ebb009ebc7592c168707fbc0dd.tar.bz2
opensim-SC-45ea15680444c3ebb009ebc7592c168707fbc0dd.tar.xz
* If a client session requests the same texture more than n times (currently n=5), we now drop the subsequent requests
* This may improve region memory usage * This is a short-term response to a problem whereby some clients keep requesting the same texture even after we've sent it * This treats the symptom rather than the cause. * n can be adjusted by changing the constant at the top of UserTextureDownloadService if necessary
-rw-r--r--OpenSim/Framework/Communications/IGridServices.cs7
-rw-r--r--OpenSim/Region/Communications/OGS1/OGS1GridServices.cs6
-rw-r--r--OpenSim/Region/Environment/Modules/UserTextureDownloadService.cs30
3 files changed, 27 insertions, 16 deletions
diff --git a/OpenSim/Framework/Communications/IGridServices.cs b/OpenSim/Framework/Communications/IGridServices.cs
index 3e2a5da..daa43ac 100644
--- a/OpenSim/Framework/Communications/IGridServices.cs
+++ b/OpenSim/Framework/Communications/IGridServices.cs
@@ -32,7 +32,14 @@ namespace OpenSim.Framework.Communications
32 public interface IGridServices 32 public interface IGridServices
33 { 33 {
34 string gdebugRegionName { get; set; } 34 string gdebugRegionName { get; set; }
35
36 /// <summary>
37 /// Register a region with the grid service.
38 /// </summary>
39 /// <param name="regionInfos"> </param>
40 /// <returns></returns>
35 RegionCommsListener RegisterRegion(RegionInfo regionInfos); 41 RegionCommsListener RegisterRegion(RegionInfo regionInfos);
42
36 bool DeregisterRegion(RegionInfo regionInfo); 43 bool DeregisterRegion(RegionInfo regionInfo);
37 List<SimpleRegionInfo> RequestNeighbours(uint x, uint y); 44 List<SimpleRegionInfo> RequestNeighbours(uint x, uint y);
38 RegionInfo RequestNeighbourInfo(ulong regionHandle); 45 RegionInfo RequestNeighbourInfo(ulong regionHandle);
diff --git a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
index 432c3c2..f1542f5 100644
--- a/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
+++ b/OpenSim/Region/Communications/OGS1/OGS1GridServices.cs
@@ -89,11 +89,7 @@ namespace OpenSim.Region.Communications.OGS1
89 StartRemoting(); 89 StartRemoting();
90 } 90 }
91 91
92 /// <summary> 92 // see IGridServices
93 ///
94 /// </summary>
95 /// <param name="regionInfo"></param>
96 /// <returns></returns>
97 public RegionCommsListener RegisterRegion(RegionInfo regionInfo) 93 public RegionCommsListener RegisterRegion(RegionInfo regionInfo)
98 { 94 {
99 Hashtable GridParams = new Hashtable(); 95 Hashtable GridParams = new Hashtable();
diff --git a/OpenSim/Region/Environment/Modules/UserTextureDownloadService.cs b/OpenSim/Region/Environment/Modules/UserTextureDownloadService.cs
index aa17cec..06a5108 100644
--- a/OpenSim/Region/Environment/Modules/UserTextureDownloadService.cs
+++ b/OpenSim/Region/Environment/Modules/UserTextureDownloadService.cs
@@ -47,6 +47,11 @@ namespace OpenSim.Region.Environment.Modules
47 { 47 {
48 private static readonly log4net.ILog m_log 48 private static readonly log4net.ILog m_log
49 = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 49 = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
50
51 /// <summary>
52 /// We will allow the client to request the same texture n times before dropping further requests
53 /// </summary>
54 private static readonly int MAX_ALLOWED_TEXTURE_REQUESTS = 5;
50 55
51 /// <summary> 56 /// <summary>
52 /// Holds texture senders before they have received the appropriate texture from the asset cache. 57 /// Holds texture senders before they have received the appropriate texture from the asset cache.
@@ -116,7 +121,7 @@ namespace OpenSim.Region.Environment.Modules
116 if (requests % 20 == 0) 121 if (requests % 20 == 0)
117 { 122 {
118 m_log.WarnFormat( 123 m_log.WarnFormat(
119 "[USER TEXTURE DOWNLOAD SERVICE]: Received {0} requests for the missing texture {1} from client {2}", 124 "[USER TEXTURE DOWNLOAD SERVICE]: Received {0} requests for the already notified missing texture {1} from {2}",
120 requests, e.RequestedAssetID, m_client.AgentId); 125 requests, e.RequestedAssetID, m_client.AgentId);
121 } 126 }
122 127
@@ -124,22 +129,25 @@ namespace OpenSim.Region.Environment.Modules
124 } 129 }
125 else 130 else
126 { 131 {
127 // Warn the log if we're getting requests for textures we've already dispatched 132 // If we keep receiving requests for textures we've already served to the client,
133 // then stop sending them. This is a short term approach approach to the problem
134 // of clients which keep requesting the same texture - the long term approach
135 // will be to treat the cause (and possibly more generally cap the request
136 // queues as well/instead)
128 if (dispatchedTextureRequestCounts.ContainsKey(e.RequestedAssetID)) 137 if (dispatchedTextureRequestCounts.ContainsKey(e.RequestedAssetID))
129 { 138 {
130 int requests = dispatchedTextureRequestCounts[e.RequestedAssetID] + 1; 139 dispatchedTextureRequestCounts[e.RequestedAssetID] += 1;
131 140
132 if (requests % 20 == 0) 141 if (dispatchedTextureRequestCounts[e.RequestedAssetID] > MAX_ALLOWED_TEXTURE_REQUESTS)
133 { 142 {
134 m_log.WarnFormat( 143 m_log.WarnFormat(
135 "[USER TEXTURE DOWNLOAD SERVICE]: Received {0} requests for already dispatched texture {1} from client {2}", 144 "[USER TEXTURE DOWNLOAD SERVICE]: No longer sending already dispatched texture {0} to {1} since it has made more than {2} requests for it",
136 requests, e.RequestedAssetID, m_client.AgentId); 145 e.RequestedAssetID, m_client.AgentId, MAX_ALLOWED_TEXTURE_REQUESTS);
137 } 146
138 147 return;
139 dispatchedTextureRequestCounts[e.RequestedAssetID] = requests; 148 }
140 } 149 }
141 150
142 //m_log.DebugFormat("[USER TEXTURE DOWNLOAD]: Adding download stat {0}", e.RequestedAssetID);
143 m_scene.AddPendingDownloads(1); 151 m_scene.AddPendingDownloads(1);
144 152
145 TextureSender requestHandler = new TextureSender(m_client, e.DiscardLevel, e.PacketNumber); 153 TextureSender requestHandler = new TextureSender(m_client, e.DiscardLevel, e.PacketNumber);