We have to ask data using the following telnet call:
get_all statistics.by_encapsulator_name.encap0.by_modcod.*.encapsulated_symbol_rate
This is in fact 1 thread for which I use a multithreading config, because I could not manage it to use another technic because of the get_all. The other technics support only get, but in multithreading there is more freedom.
Correct me, if I am wrong : if we can use another technic than multithreading : it would be very welcome.
While this get_all call works perfectly outside DMA, even under stress, inside the DMA (in the multhitreading setup) it causes the CPU of our gateway virtual machine (only proxies) to increase followed by a crash (+/- every 30 minutes)
That is why we want to know what method DMA uses in a multithreading setup to launch this call, so that we can mimic it, simulate it, and fix it.
The multithreading setup =
<Timer id="5" options="ip:4050,1;each:30000;pollingrate:200,10,10;threadPool:100,5,900,901,902,903,904,15000;dynamicthreadpool:905;qactionBefore:4000">
<Name>Modcods timer</Name>
<Time>1000</Time>
<Interval>0</Interval>
<Content>
<Group>4000</Group>
</Content>
</Timer>
Hi,
Would it be possible to share some more details on the setup, as currently the timer is only displayed?
To explain a bit more info from what is currently visible:
-There is a table 4050, for every row in that table there will be a thread launched. Spread over 30s all rows will be executed (and then it repeats again).
-A thread starts with executing QAction with ID 4000.
What happens then is not visible from the provided info:
-It could be that the protocol.xml is a serial or HTTP, in that case the return object from the QAction 4000 contains the commands to be executed. A QAction that triggers on group 4000 will then process the response.
-It could be that the protocol is SNMP and group 4000 contains SNMP parameters to be executed
-It could be that it is neither from the above (e.g. virtual type) and then QAction 4000 launches something by itself.
There is something mentioned about a telnet call that is executed. That would make me think that either it is a serial type that is being executed (with commands being present in the return object, responses being processed with the QAction that triggers on group 4000), or QAction 4000 starts a cmd process where the commands are send from. Looking at QAction 4000 will provide some more insights.
It's not really clear to me what is mentioned with the telnet call and then the combination of multi-threading while in fact it should be one thread. I assume that the multi-threaded timer should be executing the telnet call. If this should be one thread then this could potentially be a serial type with classic pairs with command-response.
Regards,
Sorry for the late response, this was a P1 prio thing.
In the mean time we found the root cause.
MTU of our DMA was set to 2000, and the HMGW did not handle that correctly when under pressure. HMGW has a MTU of 1500.
But I surely want to improve that protocol, and hope indeed that I can manage to configure it as a single thread (instead of configuring it as a multi-thread for 1 thread)
<![CDATA[
using Skyline.DataMiner.Scripting;
using System;
public class QAction
{
///
/// Connection – Data
///
/// Link with Skyline DataMiner
public static object[] Run(SLProtocolExt protocol)
{
ShaperrequestsQActionRow row = protocol.shaperrequests.GetRow(protocol.RowKey());
if (row == null || String.IsNullOrEmpty(row.Modcodcommand as string))
{
protocol.Log(string.Format(“QAction_4000: no command found in Shaper Requests table”), LogType.Allways, LogLevel.LogEverything);
return null;
}
if (String.IsNullOrEmpty(row.Shaperipaddress as string))
{
if (!String.IsNullOrEmpty(protocol.Shaperipport as string))
{
protocol.Log(string.Format(“QAction_4000: connection address to Shaper in Shaper Requests table is copied.”), LogType.Allways, LogLevel.LogEverything);
row.Shaperipaddress = protocol.Shaperipport;
protocol.shaperrequests.SetRow(row, true);
}
else
{
protocol.Log(string.Format(“QAction_4000: connection address to Shaper in Shaper Requests table is missing.”), LogType.Allways, LogLevel.LogEverything);
return null;
}
}
string[] saCommands = new string[1] { row.Modcodcommand.ToString() + “n” }; //added newline to ensure all data being sent : Needed ! Without n the response is empty
protocol.Log(string.Format(“QAction_4000: On {0} we ask: ‘{1}'”, row.Shaperipaddress, saCommands[0]), LogType.DebugInfo, LogLevel.Level1);
object[] oaRequestInfo = new Object[3] { “serial”, new string[2] { “1500”, “1000” }, saCommands };//10000 = 10000ms = 10s timeout, 1000 = response id
return oaRequestInfo;
}
}
]]>
So basicaly QAction 4000 returns:
new Object[3] { “serial”, new string[2] { “1500”, “1000” }, saCommands };
with saCommands = “get_all statistics.by_encapsulator_name.encap0.by_modcod.*.encapsulated_symbol_rate”;
I tried to make a single thread with the config:
(at that time I did not know that the get_all call was a telnet call)
But this did not work.
I have also asked Skyline when configuring this new get_all, whether I could change GET into GET_ALL and they said I could not, and that I should use multithreading config, as there is more flexibility in multithreading config
Sorry for some reason the xml code that I enter in the comment is stripped away by this tool
I see that this question has been inactive for some time. Do you still need help with this? If not, could you select the answer to indicate that the question is resolved?