From 9bcf07279513294d58c3076e7d8a6eb5ee64c759 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Mon, 5 Aug 2013 23:44:48 +0100
Subject: Make it possible to switch whether we serialize osd requests per
endpoint or not, either via config (SerializeOSDRequests in [Network]) or via
the "debug comms set" console command.
For debug purposes to assess what impact this has on network response in a heavy test environment.
---
OpenSim/Framework/Console/ConsoleUtil.cs | 22 ++++++++++++++++++-
OpenSim/Framework/Servers/ServerBase.cs | 37 ++++++++++++++++++++++++++++++++
OpenSim/Framework/WebUtil.cs | 20 +++++++++++++----
3 files changed, 74 insertions(+), 5 deletions(-)
diff --git a/OpenSim/Framework/Console/ConsoleUtil.cs b/OpenSim/Framework/Console/ConsoleUtil.cs
index 97a86a8..c0ff454 100644
--- a/OpenSim/Framework/Console/ConsoleUtil.cs
+++ b/OpenSim/Framework/Console/ConsoleUtil.cs
@@ -156,7 +156,27 @@ namespace OpenSim.Framework.Console
}
///
- /// Convert a minimum vector input from the console to an OpenMetaverse.Vector3
+ /// Convert a console integer to an int, automatically complaining if a console is given.
+ ///
+ /// Can be null if no console is available.
+ /// /param>
+ ///
+ ///
+ public static bool TryParseConsoleBool(ICommandConsole console, string rawConsoleString, out bool b)
+ {
+ if (!bool.TryParse(rawConsoleString, out b))
+ {
+ if (console != null)
+ console.OutputFormat("ERROR: {0} is not a true or false value", rawConsoleString);
+
+ return false;
+ }
+
+ return true;
+ }
+
+ ///
+ /// Convert a console integer to an int, automatically complaining if a console is given.
///
/// Can be null if no console is available.
/// /param>
diff --git a/OpenSim/Framework/Servers/ServerBase.cs b/OpenSim/Framework/Servers/ServerBase.cs
index 0545bea..824c7e2 100644
--- a/OpenSim/Framework/Servers/ServerBase.cs
+++ b/OpenSim/Framework/Servers/ServerBase.cs
@@ -257,6 +257,12 @@ namespace OpenSim.Framework.Servers
(string module, string[] args) => Notice(GetThreadsReport()));
m_console.Commands.AddCommand (
+ "Debug", false, "debug comms set",
+ "debug comms set serialosdreq true|false",
+ "Set comms parameters. For debug purposes.",
+ HandleDebugCommsSet);
+
+ m_console.Commands.AddCommand (
"Debug", false, "debug threadpool set",
"debug threadpool set worker|iocp min|max ",
"Set threadpool parameters. For debug purposes.",
@@ -284,11 +290,42 @@ namespace OpenSim.Framework.Servers
public void RegisterCommonComponents(IConfigSource configSource)
{
+ IConfig networkConfig = configSource.Configs["Network"];
+
+ if (networkConfig != null)
+ {
+ WebUtil.SerializeOSDRequestsPerEndpoint = networkConfig.GetBoolean("SerializeOSDRequests", false);
+ }
+
m_serverStatsCollector = new ServerStatsCollector();
m_serverStatsCollector.Initialise(configSource);
m_serverStatsCollector.Start();
}
+ private void HandleDebugCommsSet(string module, string[] args)
+ {
+ if (args.Length != 5)
+ {
+ Notice("Usage: debug comms set serialosdreq true|false");
+ return;
+ }
+
+ if (args[3] != "serialosdreq")
+ {
+ Notice("Usage: debug comms set serialosdreq true|false");
+ return;
+ }
+
+ bool setSerializeOsdRequests;
+
+ if (!ConsoleUtil.TryParseConsoleBool(m_console, args[4], out setSerializeOsdRequests))
+ return;
+
+ WebUtil.SerializeOSDRequestsPerEndpoint = setSerializeOsdRequests;
+
+ Notice("serialosdreq is now {0}", setSerializeOsdRequests);
+ }
+
private void HandleDebugThreadpoolSet(string module, string[] args)
{
if (args.Length != 6)
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs
index 0e9de59..706b33f 100644
--- a/OpenSim/Framework/WebUtil.cs
+++ b/OpenSim/Framework/WebUtil.cs
@@ -67,6 +67,11 @@ namespace OpenSim.Framework
public static int RequestNumber { get; internal set; }
///
+ /// Control where OSD requests should be serialized per endpoint.
+ ///
+ public static bool SerializeOSDRequestsPerEndpoint { get; set; }
+
+ ///
/// this is the header field used to communicate the local request id
/// used for performance and debugging
///
@@ -145,10 +150,17 @@ namespace OpenSim.Framework
public static OSDMap ServiceOSDRequest(string url, OSDMap data, string method, int timeout, bool compressed)
{
- //lock (EndPointLock(url))
- //{
- return ServiceOSDRequestWorker(url,data,method,timeout,compressed);
- //}
+ if (SerializeOSDRequestsPerEndpoint)
+ {
+ lock (EndPointLock(url))
+ {
+ return ServiceOSDRequestWorker(url, data, method, timeout, compressed);
+ }
+ }
+ else
+ {
+ return ServiceOSDRequestWorker(url, data, method, timeout, compressed);
+ }
}
public static void LogOutgoingDetail(Stream outputStream)
--
cgit v1.1