Application hangs when calling an appserver that have been r

Posted by TorbjornJonson on 02-Dec-2009 05:58

We have an issue where the calling application, using Open4GL, Hangs wen it calls an appserver if the apserver have been restarted since the connection was established.

To reproduce the issue follow the steps below.

Teproduce:

  • Start the .NET application (Creating a Progress.Open4GL.Proxy.Connection, Instansiate an instance of resproxy ( proxy class generated by Proxygen)
  • Make some appserver calls
  • The Appserver crashes and is restarted ( the user might not even know that it hav happend) (this is emulated by restarting the appserver on the Linux computer)
  • Make a call to the appserver.

Result

  • It seems like the system hangs it is consume quite a bit of CPU resources and the only way ( if not in a debugger ) to close the application is to use the Processes tab in task manager.
  • After the first kill there is still about 50% of CPU consumed, If one  is lucky there is a process called progress.exe that you can kill and then you regain memory and CPU. If you cant find that process.. the only cure is Reboot.

When using a debugger where one can turn on the ability to break on an exception thrown ( before they are handled) One can se that Open4gl api has got in to some sort of infinite loop with 2 exeption beeing thrown and handled all the time.

We have tried to use the RuntimeParameters to tell the proxy to stop retrying but with no success.

  • Progress.Open4GL.RunTimeProperties.TcpClientRetry
  • Progress.Open4GL.RunTimeProperties.TcpClientRetryInterval
  • Progress.Open4GL.RunTimeProperties.SocketTimeout
  • Progress.Open4GL.RunTimeProperties.RequestWaitTimeout

Is there any way to check the status before we call the appserver, are there some properties that can be used to stop the infinite loop of exceptions. ( we have tried to wait for something like 4 hours hoping that there is some time out or so but with no luck) or is there any event we can listen for?

Please we nned some help or ideas .......

Below is the exeptions that is repeated and the call stack when inspecting the exception in Visual Studio.

We are using OpenEdge 10.2A and VB.NET and Visual Studio 2008 with .NetFramework 3.5.

Resproxy.dll is the result of Proxygen that exposes a number of Procedures on an appserver.

System.Net.Sockets.SocketException occurred

  ErrorCode=10053

  Message="En etablerad anslutning avbröts av programvaran i värddatorn"

  NativeErrorCode=10053

  Source="System"

  StackTrace:

       vid System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)

  InnerException:

CallStack in VS2008

System.dll!System.Net.Sockets.Socket.Receive(byte[] buffer, int offset, int size, System.Net.Sockets.SocketFlags socketFlags) + 0x4a bytes

System.dll!System.Net.Sockets.NetworkStream.Read(byte[] buffer, int offset, int size) + 0x84 bytes

Progress.o4glrt.dll!Progress.Common.Extra.BufferedInputStream.Read(byte[] buffer, int offset, int count) + 0x3e bytes

Progress.o4glrt.dll!Progress.UBroker.Client.TcpClientMsgInputStream.readstream(byte[] msgbuf, int ofst = 0, int len = 2) + 0x55 bytes

Progress.o4glrt.dll!Progress.UBroker.Client.TcpClientMsgInputStream.readubhdr() + 0x25 bytes

Progress.o4glrt.dll!Progress.UBroker.Client.TcpClientMsgInputStream.readMsg() + 0x77 bytes

Progress.o4glrt.dll!Progress.UBroker.Client.BrokerSystem.readMsg() + 0x29 bytes

Progress.o4glrt.dll!Progress.UBroker.Client.BrokerSystem.readPacket() + 0x7f bytes

Progress.o4glrt.dll!Progress.UBroker.Client.BrokerSystem.read(byte[] msgbuf = {byte[25000]}, int offset = 0, int len = 25000) + 0x17c bytes

Progress.o4glrt.dll!Progress.UBroker.Client.BrokerSystem.read(byte[] msgbuf) + 0x5f bytes

Progress.o4glrt.dll!Progress.Open4GL.DynamicAPI.SinkInputStream.ReadByte() + 0x95 bytes

Progress.o4glrt.dll!Progress.Open4GL.DynamicAPI.OutputParamReader.OutputParamReader(System.IO.Stream s, Progress.Open4GL.DynamicAPI.Session session) + 0x72 bytes

Progress.o4glrt.dll!Progress.Open4GL.DynamicAPI.Session.runProcedure0(string requestID, string procedureName = "SokResKund.p", Progress.Open4GL.DynamicAPI.ParameterSet parms = {Progress.Open4GL.DynamicAPI.ParameterSet}, bool persistent, bool internal_Renamed, long procId = 0, Progress.Open4GL.DynamicAPI.MetaSchema localSchema = {Progress.Open4GL.DynamicAPI.MetaSchema}, int stateModel) + 0xa5c bytes

Progress.o4glrt.dll!Progress.Open4GL.DynamicAPI.Session.runProcedure(string requestID, string procedureName, Progress.Open4GL.DynamicAPI.ParameterSet parms, bool persistent, bool internal_Renamed, long procId, Progress.Open4GL.DynamicAPI.MetaSchema localSchema, int stateModel) + 0x10a bytes

Progress.o4glrt.dll!Progress.Open4GL.DynamicAPI.Session.runProcedure(string requestID, string procedureName, Progress.Open4GL.DynamicAPI.ParameterSet parms, Progress.Open4GL.DynamicAPI.MetaSchema schema) + 0x1c bytes

Progress.o4glrt.dll!Progress.Open4GL.Proxy.ProObject.runProcedure(string requestID = "<REQ|O4GL-000010>", string procName = "SokResKund.p", Progress.Open4GL.DynamicAPI.ParameterSet params_Renamed = {Progress.Open4GL.DynamicAPI.ParameterSet}, Progress.Open4GL.DynamicAPI.MetaSchema schema) + 0x169 bytes

Progress.o4glrt.dll!Progress.Open4GL.Proxy.ProObject.runProcedure(string procName, Progress.Open4GL.DynamicAPI.ParameterSet params_Renamed, Progress.Open4GL.DynamicAPI.MetaSchema schema) + 0x22 bytes

resproxy.dll!planit.planet.resproxy.SokResKund(string pcEntityName, string pcOperationName, ref planit.planet.StrongTypesNS.dsContextDataSet dsContext = {planit.planet.StrongTypesNS.dsContextDataSet}, out planit.planet.StrongTypesNS.dsResKundDataSet dsResKund = {planit.planet.StrongTypesNS.dsResKundDataSet}, ref System.Data.DataSet phIODataSet = {System.Data.DataSet}, out string pcExcStatus = "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ") + 0x109 bytes

System.IO.IOException occurred

  Message="Det gick inte att läsa data från transportanslutningen: En etablerad anslutning avbröts av programvaran i värddatorn."

  Source="System"

  StackTrace:

       vid System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)

  InnerException: System.Net.Sockets.SocketException

       ErrorCode=10053

       Message="En etablerad anslutning avbröts av programvaran i värddatorn"

       NativeErrorCode=10053

       Source="System"

       StackTrace:

            vid System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)

            vid System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)

       InnerException:

CallStack in VS2008

System.dll!System.Net.Sockets.NetworkStream.Read(byte[] buffer, int offset, int size) + 0x127 bytes

Progress.o4glrt.dll!Progress.Common.Extra.BufferedInputStream.Read(byte[] buffer, int offset, int count) + 0x3e bytes

Progress.o4glrt.dll!Progress.UBroker.Client.TcpClientMsgInputStream.readstream(byte[] msgbuf, int ofst = 0, int len = 2) + 0x55 bytes

Progress.o4glrt.dll!Progress.UBroker.Client.TcpClientMsgInputStream.readubhdr() + 0x25 bytes

Progress.o4glrt.dll!Progress.UBroker.Client.TcpClientMsgInputStream.readMsg() + 0x77 bytes

Progress.o4glrt.dll!Progress.UBroker.Client.BrokerSystem.readMsg() + 0x29 bytes

Progress.o4glrt.dll!Progress.UBroker.Client.BrokerSystem.readPacket() + 0x7f bytes

Progress.o4glrt.dll!Progress.UBroker.Client.BrokerSystem.read(byte[] msgbuf = {byte[25000]}, int offset = 0, int len = 25000) + 0x17c bytes

Progress.o4glrt.dll!Progress.UBroker.Client.BrokerSystem.read(byte[] msgbuf) + 0x5f bytes

Progress.o4glrt.dll!Progress.Open4GL.DynamicAPI.SinkInputStream.ReadByte() + 0x95 bytes

Progress.o4glrt.dll!Progress.Open4GL.DynamicAPI.OutputParamReader.OutputParamReader(System.IO.Stream s, Progress.Open4GL.DynamicAPI.Session session) + 0x72 bytes

Progress.o4glrt.dll!Progress.Open4GL.DynamicAPI.Session.runProcedure0(string requestID, string procedureName = "SokResKund.p", Progress.Open4GL.DynamicAPI.ParameterSet parms = {Progress.Open4GL.DynamicAPI.ParameterSet}, bool persistent, bool internal_Renamed, long procId = 0, Progress.Open4GL.DynamicAPI.MetaSchema localSchema = {Progress.Open4GL.DynamicAPI.MetaSchema}, int stateModel) + 0xa5c bytes

Progress.o4glrt.dll!Progress.Open4GL.DynamicAPI.Session.runProcedure(string requestID, string procedureName, Progress.Open4GL.DynamicAPI.ParameterSet parms, bool persistent, bool internal_Renamed, long procId, Progress.Open4GL.DynamicAPI.MetaSchema localSchema, int stateModel) + 0x10a bytes

Progress.o4glrt.dll!Progress.Open4GL.DynamicAPI.Session.runProcedure(string requestID, string procedureName, Progress.Open4GL.DynamicAPI.ParameterSet parms, Progress.Open4GL.DynamicAPI.MetaSchema schema) + 0x1c bytes

Progress.o4glrt.dll!Progress.Open4GL.Proxy.ProObject.runProcedure(string requestID = "<REQ|O4GL-000010>", string procName = "SokResKund.p", Progress.Open4GL.DynamicAPI.ParameterSet params_Renamed = {Progress.Open4GL.DynamicAPI.ParameterSet}, Progress.Open4GL.DynamicAPI.MetaSchema schema) + 0x169 bytes

Progress.o4glrt.dll!Progress.Open4GL.Proxy.ProObject.runProcedure(string procName, Progress.Open4GL.DynamicAPI.ParameterSet params_Renamed, Progress.Open4GL.DynamicAPI.MetaSchema schema) + 0x22 bytes

resproxy.dll!planit.planet.resproxy.SokResKund(string pcEntityName, string pcOperationName, ref planit.planet.StrongTypesNS.dsContextDataSet dsContext = {planit.planet.StrongTypesNS.dsContextDataSet}, out planit.planet.StrongTypesNS.dsResKundDataSet dsResKund = {planit.planet.StrongTypesNS.dsResKundDataSet}, ref System.Data.DataSet phIODataSet = {System.Data.DataSet}, out string pcExcStatus = "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ") + 0x109 bytes

All Replies

Posted by Michael Jacobs on 03-Dec-2009 14:56

Our resident network expert looked at the information you posted.  They confirmed the socket read exception is expected after a connected AppServers is stopped.  But the consumption of system resources, and needing to stop the process using the task manager, is not the correct behavior.  We ask that you contact OpenEdge technical support and file a bug.

Posted by TorbjornJonson on 04-Dec-2009 08:05

Issue taken to Tech support

Posted by Admin on 14-Sep-2010 04:35

Hi Torbjörn, we are experiencing the same problem, with the same stack trace. Did you get an answer from tech support on this issue?

This thread is closed