aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework
diff options
context:
space:
mode:
authorDiva Canto2012-09-20 15:51:27 -0700
committerDiva Canto2012-09-20 15:51:27 -0700
commit33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7 (patch)
tree55a191ba66b585e7cb1531257e4326529779702f /OpenSim/Framework
parentMore HG2.0: Added permission policies in HGAsset Service based on asset types... (diff)
parentInsert a new log level 4 for HTTP IN and HTTP OUT that will log how long the ... (diff)
downloadopensim-SC_OLD-33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7.zip
opensim-SC_OLD-33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7.tar.gz
opensim-SC_OLD-33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7.tar.bz2
opensim-SC_OLD-33aa6d172f29a8d34ae1d1f75e506b2e5eb681d7.tar.xz
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r--OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs47
-rw-r--r--OpenSim/Framework/Servers/MainServer.cs101
-rw-r--r--OpenSim/Framework/WebUtil.cs65
3 files changed, 168 insertions, 45 deletions
diff --git a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
index 43a19fa..4e04dd8 100644
--- a/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
+++ b/OpenSim/Framework/Servers/HttpServer/BaseHttpServer.cs
@@ -54,6 +54,12 @@ namespace OpenSim.Framework.Servers.HttpServer
54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
55 private HttpServerLogWriter httpserverlog = new HttpServerLogWriter(); 55 private HttpServerLogWriter httpserverlog = new HttpServerLogWriter();
56 56
57 /// <summary>
58 /// Gets or sets the debug level.
59 /// </summary>
60 /// <value>
61 /// See MainServer.DebugLevel.
62 /// </value>
57 public int DebugLevel { get; set; } 63 public int DebugLevel { get; set; }
58 64
59 private volatile int NotSocketErrors = 0; 65 private volatile int NotSocketErrors = 0;
@@ -529,8 +535,8 @@ namespace OpenSim.Framework.Servers.HttpServer
529 535
530 if (DebugLevel >= 3) 536 if (DebugLevel >= 3)
531 m_log.DebugFormat( 537 m_log.DebugFormat(
532 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", 538 "[BASE HTTP SERVER]: HTTP IN {0} content type handler {1} {2} from {3}",
533 request.ContentType, request.HttpMethod, request.Url.PathAndQuery); 539 request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
534 540
535 buffer = HandleHTTPRequest(request, response); 541 buffer = HandleHTTPRequest(request, response);
536 break; 542 break;
@@ -541,8 +547,8 @@ namespace OpenSim.Framework.Servers.HttpServer
541 547
542 if (DebugLevel >= 3) 548 if (DebugLevel >= 3)
543 m_log.DebugFormat( 549 m_log.DebugFormat(
544 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", 550 "[BASE HTTP SERVER]: HTTP IN {0} content type handler {1} {2} from {3}",
545 request.ContentType, request.HttpMethod, request.Url.PathAndQuery); 551 request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
546 552
547 buffer = HandleLLSDRequests(request, response); 553 buffer = HandleLLSDRequests(request, response);
548 break; 554 break;
@@ -640,7 +646,18 @@ namespace OpenSim.Framework.Servers.HttpServer
640 uriString, 646 uriString,
641 requestHandler != null ? requestHandler.Name : "", 647 requestHandler != null ? requestHandler.Name : "",
642 requestHandler != null ? requestHandler.Description : "", 648 requestHandler != null ? requestHandler.Description : "",
643 request.RemoteIPEndPoint.ToString(), 649 request.RemoteIPEndPoint,
650 tickdiff);
651 }
652 else if (DebugLevel >= 4)
653 {
654 m_log.DebugFormat(
655 "[BASE HTTP SERVER]: HTTP IN {0} {1} {2} {3} from {4} took {5}ms",
656 requestMethod,
657 uriString,
658 requestHandler != null ? requestHandler.Name : "",
659 requestHandler != null ? requestHandler.Description : "",
660 request.RemoteIPEndPoint,
644 tickdiff); 661 tickdiff);
645 } 662 }
646 } 663 }
@@ -649,30 +666,30 @@ namespace OpenSim.Framework.Servers.HttpServer
649 private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler) 666 private void LogIncomingToStreamHandler(OSHttpRequest request, IRequestHandler requestHandler)
650 { 667 {
651 m_log.DebugFormat( 668 m_log.DebugFormat(
652 "[BASE HTTP SERVER]: Found stream handler for {0} {1} {2} {3}", 669 "[BASE HTTP SERVER]: HTTP IN stream handler {0} {1} {2} {3} from {4}",
653 request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description); 670 request.HttpMethod, request.Url.PathAndQuery, requestHandler.Name, requestHandler.Description, request.RemoteIPEndPoint);
654 671
655 if (DebugLevel >= 4) 672 if (DebugLevel >= 5)
656 LogIncomingInDetail(request); 673 LogIncomingInDetail(request);
657 } 674 }
658 675
659 private void LogIncomingToContentTypeHandler(OSHttpRequest request) 676 private void LogIncomingToContentTypeHandler(OSHttpRequest request)
660 { 677 {
661 m_log.DebugFormat( 678 m_log.DebugFormat(
662 "[BASE HTTP SERVER]: Found a {0} content type handler for {1} {2}", 679 "[BASE HTTP SERVER]: HTTP IN {0} content type handler {1} {2} from {3}",
663 request.ContentType, request.HttpMethod, request.Url.PathAndQuery); 680 request.ContentType, request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
664 681
665 if (DebugLevel >= 4) 682 if (DebugLevel >= 5)
666 LogIncomingInDetail(request); 683 LogIncomingInDetail(request);
667 } 684 }
668 685
669 private void LogIncomingToXmlRpcHandler(OSHttpRequest request) 686 private void LogIncomingToXmlRpcHandler(OSHttpRequest request)
670 { 687 {
671 m_log.DebugFormat( 688 m_log.DebugFormat(
672 "[BASE HTTP SERVER]: Assuming a generic XMLRPC request for {0} {1}", 689 "[BASE HTTP SERVER]: HTTP IN assumed generic XMLRPC request {0} {1} from {2}",
673 request.HttpMethod, request.Url.PathAndQuery); 690 request.HttpMethod, request.Url.PathAndQuery, request.RemoteIPEndPoint);
674 691
675 if (DebugLevel >= 4) 692 if (DebugLevel >= 5)
676 LogIncomingInDetail(request); 693 LogIncomingInDetail(request);
677 } 694 }
678 695
@@ -682,7 +699,7 @@ namespace OpenSim.Framework.Servers.HttpServer
682 { 699 {
683 string output; 700 string output;
684 701
685 if (DebugLevel == 4) 702 if (DebugLevel == 5)
686 { 703 {
687 const int sampleLength = 80; 704 const int sampleLength = 80;
688 char[] sampleChars = new char[sampleLength]; 705 char[] sampleChars = new char[sampleLength];
diff --git a/OpenSim/Framework/Servers/MainServer.cs b/OpenSim/Framework/Servers/MainServer.cs
index 7402c73..72f9cce 100644
--- a/OpenSim/Framework/Servers/MainServer.cs
+++ b/OpenSim/Framework/Servers/MainServer.cs
@@ -48,9 +48,12 @@ namespace OpenSim.Framework.Servers
48 /// Control the printing of certain debug messages. 48 /// Control the printing of certain debug messages.
49 /// </summary> 49 /// </summary>
50 /// <remarks> 50 /// <remarks>
51 /// If DebugLevel >= 1, then short warnings are logged when receiving bad input data. 51 /// If DebugLevel >= 1 then short warnings are logged when receiving bad input data.
52 /// If DebugLevel >= 2, then long warnings are logged when receiving bad input data. 52 /// If DebugLevel >= 2 then long warnings are logged when receiving bad input data.
53 /// If DebugLevel >= 3, then short notices about all incoming non-poll HTTP requests are logged. 53 /// If DebugLevel >= 3 then short notices about all incoming non-poll HTTP requests are logged.
54 /// If DebugLevel >= 4 then the time taken to fulfill the request is logged.
55 /// If DebugLevel >= 5 then the start of the body of incoming non-poll HTTP requests will be logged.
56 /// If DebugLevel >= 6 then the entire body of incoming non-poll HTTP requests will be logged.
54 /// </remarks> 57 /// </remarks>
55 public static int DebugLevel 58 public static int DebugLevel
56 { 59 {
@@ -102,7 +105,6 @@ namespace OpenSim.Framework.Servers
102 get { return new Dictionary<uint, BaseHttpServer>(m_Servers); } 105 get { return new Dictionary<uint, BaseHttpServer>(m_Servers); }
103 } 106 }
104 107
105
106 public static void RegisterHttpConsoleCommands(ICommandConsole console) 108 public static void RegisterHttpConsoleCommands(ICommandConsole console)
107 { 109 {
108 console.Commands.AddCommand( 110 console.Commands.AddCommand(
@@ -111,15 +113,20 @@ namespace OpenSim.Framework.Servers
111 "Show all registered http handlers", HandleShowHttpHandlersCommand); 113 "Show all registered http handlers", HandleShowHttpHandlersCommand);
112 114
113 console.Commands.AddCommand( 115 console.Commands.AddCommand(
114 "Debug", false, "debug http", "debug http [<level>]", 116 "Debug", false, "debug http", "debug http <in|out|all> [<level>]",
115 "Turn on inbound non-poll http request debugging.", 117 "Turn on http request logging.",
116 "If level <= 0, then no extra logging is done.\n" 118 "If in or all and\n"
117 + "If level >= 1, then short warnings are logged when receiving bad input data.\n" 119 + " level <= 0 then no extra logging is done.\n"
118 + "If level >= 2, then long warnings are logged when receiving bad input data.\n" 120 + " level >= 1 then short warnings are logged when receiving bad input data.\n"
119 + "If level >= 3, then short notices about all incoming non-poll HTTP requests are logged.\n" 121 + " level >= 2 then long warnings are logged when receiving bad input data.\n"
120 + "If level >= 4, then a sample from the beginning of the incoming data is logged.\n" 122 + " level >= 3 then short notices about all incoming non-poll HTTP requests are logged.\n"
121 + "If level >= 5, then the entire incoming data is logged.\n" 123 + " level >= 4 then the time taken to fulfill the request is logged.\n"
122 + "If no level is specified then the current level is returned.", 124 + " level >= 5 then a sample from the beginning of the incoming data is logged.\n"
125 + " level >= 6 then the entire incoming data is logged.\n"
126 + " no level is specified then the current level is returned.\n\n"
127 + "If out or all and\n"
128 + " level >= 3 then short notices about all outgoing requests going through WebUtil are logged.\n"
129 + " level >= 4 then the time taken to fulfill the request is logged.\n",
123 HandleDebugHttpCommand); 130 HandleDebugHttpCommand);
124 } 131 }
125 132
@@ -127,24 +134,74 @@ namespace OpenSim.Framework.Servers
127 /// Turn on some debugging values for OpenSim. 134 /// Turn on some debugging values for OpenSim.
128 /// </summary> 135 /// </summary>
129 /// <param name="args"></param> 136 /// <param name="args"></param>
130 private static void HandleDebugHttpCommand(string module, string[] args) 137 private static void HandleDebugHttpCommand(string module, string[] cmdparams)
131 { 138 {
132 if (args.Length == 3) 139 if (cmdparams.Length < 3)
140 {
141 MainConsole.Instance.Output("Usage: debug http <in|out|all> 0..6");
142 return;
143 }
144
145 bool inReqs = false;
146 bool outReqs = false;
147 bool allReqs = false;
148
149 string subCommand = cmdparams[2];
150
151 if (subCommand.ToLower() == "in")
152 {
153 inReqs = true;
154 }
155 else if (subCommand.ToLower() == "out")
156 {
157 outReqs = true;
158 }
159 else if (subCommand.ToLower() == "all")
160 {
161 allReqs = true;
162 }
163 else
133 { 164 {
165 MainConsole.Instance.Output("You must specify in, out or all");
166 return;
167 }
168
169 if (cmdparams.Length >= 4)
170 {
171 string rawNewDebug = cmdparams[3];
134 int newDebug; 172 int newDebug;
135 if (int.TryParse(args[2], out newDebug)) 173
174 if (!int.TryParse(rawNewDebug, out newDebug))
175 {
176 MainConsole.Instance.OutputFormat("{0} is not a valid debug level", rawNewDebug);
177 return;
178 }
179
180 if (newDebug < 0 || newDebug > 5)
181 {
182 MainConsole.Instance.OutputFormat("{0} is outside the valid debug level range of 0..5", newDebug);
183 return;
184 }
185
186 if (allReqs || inReqs)
136 { 187 {
137 MainServer.DebugLevel = newDebug; 188 MainServer.DebugLevel = newDebug;
138 MainConsole.Instance.OutputFormat("Debug http level set to {0}", newDebug); 189 MainConsole.Instance.OutputFormat("IN debug level set to {0}", newDebug);
190 }
191
192 if (allReqs || outReqs)
193 {
194 WebUtil.DebugLevel = newDebug;
195 MainConsole.Instance.OutputFormat("OUT debug level set to {0}", newDebug);
139 } 196 }
140 }
141 else if (args.Length == 2)
142 {
143 MainConsole.Instance.OutputFormat("Current debug http level is {0}", MainServer.DebugLevel);
144 } 197 }
145 else 198 else
146 { 199 {
147 MainConsole.Instance.Output("Usage: debug http 0..5"); 200 if (allReqs || inReqs)
201 MainConsole.Instance.OutputFormat("Current IN debug level is {0}", MainServer.DebugLevel);
202
203 if (allReqs || outReqs)
204 MainConsole.Instance.OutputFormat("Current OUT debug level is {0}", WebUtil.DebugLevel);
148 } 205 }
149 } 206 }
150 207
diff --git a/OpenSim/Framework/WebUtil.cs b/OpenSim/Framework/WebUtil.cs
index 2aa4af5..64d61f1 100644
--- a/OpenSim/Framework/WebUtil.cs
+++ b/OpenSim/Framework/WebUtil.cs
@@ -54,6 +54,14 @@ namespace OpenSim.Framework
54 MethodBase.GetCurrentMethod().DeclaringType); 54 MethodBase.GetCurrentMethod().DeclaringType);
55 55
56 /// <summary> 56 /// <summary>
57 /// Control the printing of certain debug messages.
58 /// </summary>
59 /// <remarks>
60 /// If DebugLevel >= 3 then short notices about outgoing HTTP requests are logged.
61 /// </remarks>
62 public static int DebugLevel { get; set; }
63
64 /// <summary>
57 /// Request number for diagnostic purposes. 65 /// Request number for diagnostic purposes.
58 /// </summary> 66 /// </summary>
59 public static int RequestNumber = 0; 67 public static int RequestNumber = 0;
@@ -146,7 +154,11 @@ namespace OpenSim.Framework
146 private static OSDMap ServiceOSDRequestWorker(string url, OSDMap data, string method, int timeout, bool compressed) 154 private static OSDMap ServiceOSDRequestWorker(string url, OSDMap data, string method, int timeout, bool compressed)
147 { 155 {
148 int reqnum = RequestNumber++; 156 int reqnum = RequestNumber++;
149 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 157
158 if (DebugLevel >= 3)
159 m_log.DebugFormat(
160 "[WEB UTIL]: HTTP OUT {0} ServiceOSD {1} {2} (timeout {3}, compressed {4})",
161 reqnum, method, url, timeout, compressed);
150 162
151 string errorMessage = "unknown error"; 163 string errorMessage = "unknown error";
152 int tickstart = Util.EnvironmentTickCount(); 164 int tickstart = Util.EnvironmentTickCount();
@@ -238,6 +250,10 @@ namespace OpenSim.Framework
238 strBuffer != null 250 strBuffer != null
239 ? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer) 251 ? (strBuffer.Length > MaxRequestDiagLength ? strBuffer.Remove(MaxRequestDiagLength) : strBuffer)
240 : ""); 252 : "");
253 else if (DebugLevel >= 4)
254 m_log.DebugFormat(
255 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
256 reqnum, tickdiff, tickdata);
241 } 257 }
242 258
243 m_log.DebugFormat( 259 m_log.DebugFormat(
@@ -317,7 +333,11 @@ namespace OpenSim.Framework
317 { 333 {
318 int reqnum = RequestNumber++; 334 int reqnum = RequestNumber++;
319 string method = (data != null && data["RequestMethod"] != null) ? data["RequestMethod"] : "unknown"; 335 string method = (data != null && data["RequestMethod"] != null) ? data["RequestMethod"] : "unknown";
320 // m_log.DebugFormat("[WEB UTIL]: <{0}> start form request for {1}, method {2}",reqnum,url,method); 336
337 if (DebugLevel >= 3)
338 m_log.DebugFormat(
339 "[WEB UTIL]: HTTP OUT {0} ServiceForm {1} {2} (timeout {3})",
340 reqnum, method, url, timeout);
321 341
322 string errorMessage = "unknown error"; 342 string errorMessage = "unknown error";
323 int tickstart = Util.EnvironmentTickCount(); 343 int tickstart = Util.EnvironmentTickCount();
@@ -389,6 +409,10 @@ namespace OpenSim.Framework
389 queryString != null 409 queryString != null
390 ? (queryString.Length > MaxRequestDiagLength) ? queryString.Remove(MaxRequestDiagLength) : queryString 410 ? (queryString.Length > MaxRequestDiagLength) ? queryString.Remove(MaxRequestDiagLength) : queryString
391 : ""); 411 : "");
412 else if (DebugLevel >= 4)
413 m_log.DebugFormat(
414 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
415 reqnum, tickdiff, tickdata);
392 } 416 }
393 417
394 m_log.WarnFormat("[SERVICE FORM]: <{0}> form request to {1} failed: {2}", reqnum, url, errorMessage); 418 m_log.WarnFormat("[SERVICE FORM]: <{0}> form request to {1} failed: {2}", reqnum, url, errorMessage);
@@ -643,7 +667,6 @@ namespace OpenSim.Framework
643 /// <returns></returns> 667 /// <returns></returns>
644 public static string[] GetPreferredImageTypes(string accept) 668 public static string[] GetPreferredImageTypes(string accept)
645 { 669 {
646
647 if (accept == null || accept == string.Empty) 670 if (accept == null || accept == string.Empty)
648 return new string[0]; 671 return new string[0];
649 672
@@ -695,13 +718,15 @@ namespace OpenSim.Framework
695 string requestUrl, TRequest obj, Action<TResponse> action) 718 string requestUrl, TRequest obj, Action<TResponse> action)
696 { 719 {
697 int reqnum = WebUtil.RequestNumber++; 720 int reqnum = WebUtil.RequestNumber++;
698 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 721
722 if (WebUtil.DebugLevel >= 3)
723 m_log.DebugFormat(
724 "[WEB UTIL]: HTTP OUT {0} AsynchronousRequestObject {1} {2}",
725 reqnum, verb, requestUrl);
699 726
700 int tickstart = Util.EnvironmentTickCount(); 727 int tickstart = Util.EnvironmentTickCount();
701 int tickdata = 0; 728 int tickdata = 0;
702 729
703 // m_log.DebugFormat("[ASYNC REQUEST]: Starting {0} {1}", verb, requestUrl);
704
705 Type type = typeof(TRequest); 730 Type type = typeof(TRequest);
706 731
707 WebRequest request = WebRequest.Create(requestUrl); 732 WebRequest request = WebRequest.Create(requestUrl);
@@ -862,6 +887,12 @@ namespace OpenSim.Framework
862 tickdata, 887 tickdata,
863 originalRequest); 888 originalRequest);
864 } 889 }
890 else if (WebUtil.DebugLevel >= 4)
891 {
892 m_log.DebugFormat(
893 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
894 reqnum, tickdiff, tickdata);
895 }
865 } 896 }
866 } 897 }
867 898
@@ -882,7 +913,11 @@ namespace OpenSim.Framework
882 public static string MakeRequest(string verb, string requestUrl, string obj) 913 public static string MakeRequest(string verb, string requestUrl, string obj)
883 { 914 {
884 int reqnum = WebUtil.RequestNumber++; 915 int reqnum = WebUtil.RequestNumber++;
885 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 916
917 if (WebUtil.DebugLevel >= 3)
918 m_log.DebugFormat(
919 "[WEB UTIL]: HTTP OUT {0} SynchronousRestForms {1} {2}",
920 reqnum, verb, requestUrl);
886 921
887 int tickstart = Util.EnvironmentTickCount(); 922 int tickstart = Util.EnvironmentTickCount();
888 int tickdata = 0; 923 int tickdata = 0;
@@ -974,6 +1009,10 @@ namespace OpenSim.Framework
974 tickdiff, 1009 tickdiff,
975 tickdata, 1010 tickdata,
976 obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj); 1011 obj.Length > WebUtil.MaxRequestDiagLength ? obj.Remove(WebUtil.MaxRequestDiagLength) : obj);
1012 else if (WebUtil.DebugLevel >= 4)
1013 m_log.DebugFormat(
1014 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
1015 reqnum, tickdiff, tickdata);
977 1016
978 return respstring; 1017 return respstring;
979 } 1018 }
@@ -998,7 +1037,11 @@ namespace OpenSim.Framework
998 public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj) 1037 public static TResponse MakeRequest<TRequest, TResponse>(string verb, string requestUrl, TRequest obj)
999 { 1038 {
1000 int reqnum = WebUtil.RequestNumber++; 1039 int reqnum = WebUtil.RequestNumber++;
1001 // m_log.DebugFormat("[WEB UTIL]: <{0}> start osd request for {1}, method {2}",reqnum,url,method); 1040
1041 if (WebUtil.DebugLevel >= 3)
1042 m_log.DebugFormat(
1043 "[WEB UTIL]: HTTP OUT {0} SynchronousRestObject {1} {2}",
1044 reqnum, verb, requestUrl);
1002 1045
1003 int tickstart = Util.EnvironmentTickCount(); 1046 int tickstart = Util.EnvironmentTickCount();
1004 int tickdata = 0; 1047 int tickdata = 0;
@@ -1119,6 +1162,12 @@ namespace OpenSim.Framework
1119 tickdata, 1162 tickdata,
1120 originalRequest); 1163 originalRequest);
1121 } 1164 }
1165 else if (WebUtil.DebugLevel >= 4)
1166 {
1167 m_log.DebugFormat(
1168 "[WEB UTIL]: HTTP OUT {0} took {1}ms, {2}ms writing",
1169 reqnum, tickdiff, tickdata);
1170 }
1122 1171
1123 return deserial; 1172 return deserial;
1124 } 1173 }