diff options
author | Justin Clarke Casey | 2008-03-21 19:16:29 +0000 |
---|---|---|
committer | Justin Clarke Casey | 2008-03-21 19:16:29 +0000 |
commit | 45ea15680444c3ebb009ebc7592c168707fbc0dd (patch) | |
tree | b021a2bb9233df61aa4176990e60f9b1e7b2a831 | |
parent | Implements llKey2Name(). (diff) | |
download | opensim-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
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); |