You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by dr...@apache.org on 2010/10/06 19:10:55 UTC

svn commit: r1005171 - /incubator/thrift/trunk/lib/cpp/src/server/TSimpleServer.cpp

Author: dreiss
Date: Wed Oct  6 17:10:54 2010
New Revision: 1005171

URL: http://svn.apache.org/viewvc?rev=1005171&view=rev
Log:
THRIFT-926. cpp: Better exception handling in TSimpleServer

Move processing code out of main try block and created individual
try/catch's for closing down the client and it's transports (to avoid
issues with throwing exceptions from a catch block).

Also converted to using GlobalOutput instead of cerr.

Modified:
    incubator/thrift/trunk/lib/cpp/src/server/TSimpleServer.cpp

Modified: incubator/thrift/trunk/lib/cpp/src/server/TSimpleServer.cpp
URL: http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/cpp/src/server/TSimpleServer.cpp?rev=1005171&r1=1005170&r2=1005171&view=diff
==============================================================================
--- incubator/thrift/trunk/lib/cpp/src/server/TSimpleServer.cpp (original)
+++ incubator/thrift/trunk/lib/cpp/src/server/TSimpleServer.cpp Wed Oct  6 17:10:54 2010
@@ -46,7 +46,8 @@ void TSimpleServer::serve() {
     // Start the server listening
     serverTransport_->listen();
   } catch (TTransportException& ttx) {
-    cerr << "TSimpleServer::run() listen(): " << ttx.what() << endl;
+    string errStr = string("TSimpleServer::run() listen(): ") + ttx.what();
+    GlobalOutput(errStr.c_str());
     return;
   }
 
@@ -63,58 +64,83 @@ void TSimpleServer::serve() {
       outputTransport = outputTransportFactory_->getTransport(client);
       inputProtocol = inputProtocolFactory_->getProtocol(inputTransport);
       outputProtocol = outputProtocolFactory_->getProtocol(outputTransport);
-      void* connectionContext = NULL;
-      if (eventHandler_ != NULL) {
-        connectionContext = eventHandler_->createContext(inputProtocol, outputProtocol);
-      }
-      try {
-        for (;;) {
-          if (eventHandler_ != NULL) {
-            eventHandler_->processContext(connectionContext, client);
-          }
-          if (!processor_->process(inputProtocol, outputProtocol, connectionContext) ||
-              // Peek ahead, is the remote side closed?
-              !inputProtocol->getTransport()->peek()) {
-            break;
-          }
-        }
-      } catch (TTransportException& ttx) {
-        cerr << "TSimpleServer client died: " << ttx.what() << endl;
-      } catch (TException& tx) {
-        cerr << "TSimpleServer exception: " << tx.what() << endl;
-      }
-      if (eventHandler_ != NULL) {
-        eventHandler_->deleteContext(connectionContext, inputProtocol, outputProtocol);
-      }
-      inputTransport->close();
-      outputTransport->close();
-      client->close();
     } catch (TTransportException& ttx) {
       if (inputTransport != NULL) { inputTransport->close(); }
       if (outputTransport != NULL) { outputTransport->close(); }
       if (client != NULL) { client->close(); }
-      cerr << "TServerTransport died on accept: " << ttx.what() << endl;
+      string errStr = string("TServerTransport died on accept: ") + ttx.what();
+      GlobalOutput(errStr.c_str());
       continue;
     } catch (TException& tx) {
       if (inputTransport != NULL) { inputTransport->close(); }
       if (outputTransport != NULL) { outputTransport->close(); }
       if (client != NULL) { client->close(); }
-      cerr << "Some kind of accept exception: " << tx.what() << endl;
+      string errStr = string("Some kind of accept exception: ") + tx.what();
+      GlobalOutput(errStr.c_str());
       continue;
     } catch (string s) {
       if (inputTransport != NULL) { inputTransport->close(); }
       if (outputTransport != NULL) { outputTransport->close(); }
       if (client != NULL) { client->close(); }
-      cerr << "TThreadPoolServer: Unknown exception: " << s << endl;
+      string errStr = string("Some kind of accept exception: ") + s;
+      GlobalOutput(errStr.c_str());
       break;
     }
+
+    void* connectionContext = NULL;
+    if (eventHandler_ != NULL) {
+      connectionContext = eventHandler_->createContext(inputProtocol, outputProtocol);
+    }
+    try {
+      for (;;) {
+        if (eventHandler_ != NULL) {
+          eventHandler_->processContext(connectionContext, client);
+        }
+        if (!processor_->process(inputProtocol, outputProtocol, connectionContext) ||
+            // Peek ahead, is the remote side closed?
+            !inputProtocol->getTransport()->peek()) {
+          break;
+        }
+      }
+    } catch (TTransportException& ttx) {
+      string errStr = string("TSimpleServer client died: ") + ttx.what();
+      GlobalOutput(errStr.c_str());
+    } catch (TException& tx) {
+      string errStr = string("TSimpleServer exception: ") + tx.what();
+      GlobalOutput(errStr.c_str());
+    } catch (...) {
+      GlobalOutput("TSimpleServer uncaught exception.");
+    }
+    if (eventHandler_ != NULL) {
+      eventHandler_->deleteContext(connectionContext, inputProtocol, outputProtocol);
+    }
+
+    try {
+      inputTransport->close();
+    } catch (TTransportException& ttx) {
+      string errStr = string("TSimpleSimple input close failed: ") + ttx.what();
+      GlobalOutput(errStr.c_str());
+    }
+    try {
+      outputTransport->close();
+    } catch (TTransportException& ttx) {
+      string errStr = string("TSimpleSimple output close failed: ") + ttx.what();
+      GlobalOutput(errStr.c_str());
+    }
+    try {
+      client->close();
+    } catch (TTransportException& ttx) {
+      string errStr = string("TSimpleSimple client close failed: ") + ttx.what();
+      GlobalOutput(errStr.c_str());
+    }
   }
 
   if (stop_) {
     try {
       serverTransport_->close();
     } catch (TTransportException &ttx) {
-      cerr << "TServerTransport failed on close: " << ttx.what() << endl;
+      string errStr = string("TServerTransport failed on close: ") + ttx.what();
+      GlobalOutput(errStr.c_str());
     }
     stop_ = false;
   }



Re: svn commit: r1005171 - /incubator/thrift/trunk/lib/cpp/src/server/TSimpleServer.cpp

Posted by uncle mantis <un...@gmail.com>.
Dreiss,

PLEASE STOP!

Regards,

Michael






-------------------------------------
Domains for Sale
http://www.dariachick.com



On Wed, Oct 6, 2010 at 12:10 PM, <dr...@apache.org> wrote:

> Author: dreiss
> Date: Wed Oct  6 17:10:54 2010
> New Revision: 1005171
>
> URL: http://svn.apache.org/viewvc?rev=1005171&view=rev
> Log:
> THRIFT-926. cpp: Better exception handling in TSimpleServer
>
> Move processing code out of main try block and created individual
> try/catch's for closing down the client and it's transports (to avoid
> issues with throwing exceptions from a catch block).
>
> Also converted to using GlobalOutput instead of cerr.
>
> Modified:
>    incubator/thrift/trunk/lib/cpp/src/server/TSimpleServer.cpp
>
> Modified: incubator/thrift/trunk/lib/cpp/src/server/TSimpleServer.cpp
> URL:
> http://svn.apache.org/viewvc/incubator/thrift/trunk/lib/cpp/src/server/TSimpleServer.cpp?rev=1005171&r1=1005170&r2=1005171&view=diff
>
> ==============================================================================
> --- incubator/thrift/trunk/lib/cpp/src/server/TSimpleServer.cpp (original)
> +++ incubator/thrift/trunk/lib/cpp/src/server/TSimpleServer.cpp Wed Oct  6
> 17:10:54 2010
> @@ -46,7 +46,8 @@ void TSimpleServer::serve() {
>     // Start the server listening
>     serverTransport_->listen();
>   } catch (TTransportException& ttx) {
> -    cerr << "TSimpleServer::run() listen(): " << ttx.what() << endl;
> +    string errStr = string("TSimpleServer::run() listen(): ") +
> ttx.what();
> +    GlobalOutput(errStr.c_str());
>     return;
>   }
>
> @@ -63,58 +64,83 @@ void TSimpleServer::serve() {
>       outputTransport = outputTransportFactory_->getTransport(client);
>       inputProtocol = inputProtocolFactory_->getProtocol(inputTransport);
>       outputProtocol =
> outputProtocolFactory_->getProtocol(outputTransport);
> -      void* connectionContext = NULL;
> -      if (eventHandler_ != NULL) {
> -        connectionContext = eventHandler_->createContext(inputProtocol,
> outputProtocol);
> -      }
> -      try {
> -        for (;;) {
> -          if (eventHandler_ != NULL) {
> -            eventHandler_->processContext(connectionContext, client);
> -          }
> -          if (!processor_->process(inputProtocol, outputProtocol,
> connectionContext) ||
> -              // Peek ahead, is the remote side closed?
> -              !inputProtocol->getTransport()->peek()) {
> -            break;
> -          }
> -        }
> -      } catch (TTransportException& ttx) {
> -        cerr << "TSimpleServer client died: " << ttx.what() << endl;
> -      } catch (TException& tx) {
> -        cerr << "TSimpleServer exception: " << tx.what() << endl;
> -      }
> -      if (eventHandler_ != NULL) {
> -        eventHandler_->deleteContext(connectionContext, inputProtocol,
> outputProtocol);
> -      }
> -      inputTransport->close();
> -      outputTransport->close();
> -      client->close();
>     } catch (TTransportException& ttx) {
>       if (inputTransport != NULL) { inputTransport->close(); }
>       if (outputTransport != NULL) { outputTransport->close(); }
>       if (client != NULL) { client->close(); }
> -      cerr << "TServerTransport died on accept: " << ttx.what() << endl;
> +      string errStr = string("TServerTransport died on accept: ") +
> ttx.what();
> +      GlobalOutput(errStr.c_str());
>       continue;
>     } catch (TException& tx) {
>       if (inputTransport != NULL) { inputTransport->close(); }
>       if (outputTransport != NULL) { outputTransport->close(); }
>       if (client != NULL) { client->close(); }
> -      cerr << "Some kind of accept exception: " << tx.what() << endl;
> +      string errStr = string("Some kind of accept exception: ") +
> tx.what();
> +      GlobalOutput(errStr.c_str());
>       continue;
>     } catch (string s) {
>       if (inputTransport != NULL) { inputTransport->close(); }
>       if (outputTransport != NULL) { outputTransport->close(); }
>       if (client != NULL) { client->close(); }
> -      cerr << "TThreadPoolServer: Unknown exception: " << s << endl;
> +      string errStr = string("Some kind of accept exception: ") + s;
> +      GlobalOutput(errStr.c_str());
>       break;
>     }
> +
> +    void* connectionContext = NULL;
> +    if (eventHandler_ != NULL) {
> +      connectionContext = eventHandler_->createContext(inputProtocol,
> outputProtocol);
> +    }
> +    try {
> +      for (;;) {
> +        if (eventHandler_ != NULL) {
> +          eventHandler_->processContext(connectionContext, client);
> +        }
> +        if (!processor_->process(inputProtocol, outputProtocol,
> connectionContext) ||
> +            // Peek ahead, is the remote side closed?
> +            !inputProtocol->getTransport()->peek()) {
> +          break;
> +        }
> +      }
> +    } catch (TTransportException& ttx) {
> +      string errStr = string("TSimpleServer client died: ") + ttx.what();
> +      GlobalOutput(errStr.c_str());
> +    } catch (TException& tx) {
> +      string errStr = string("TSimpleServer exception: ") + tx.what();
> +      GlobalOutput(errStr.c_str());
> +    } catch (...) {
> +      GlobalOutput("TSimpleServer uncaught exception.");
> +    }
> +    if (eventHandler_ != NULL) {
> +      eventHandler_->deleteContext(connectionContext, inputProtocol,
> outputProtocol);
> +    }
> +
> +    try {
> +      inputTransport->close();
> +    } catch (TTransportException& ttx) {
> +      string errStr = string("TSimpleSimple input close failed: ") +
> ttx.what();
> +      GlobalOutput(errStr.c_str());
> +    }
> +    try {
> +      outputTransport->close();
> +    } catch (TTransportException& ttx) {
> +      string errStr = string("TSimpleSimple output close failed: ") +
> ttx.what();
> +      GlobalOutput(errStr.c_str());
> +    }
> +    try {
> +      client->close();
> +    } catch (TTransportException& ttx) {
> +      string errStr = string("TSimpleSimple client close failed: ") +
> ttx.what();
> +      GlobalOutput(errStr.c_str());
> +    }
>   }
>
>   if (stop_) {
>     try {
>       serverTransport_->close();
>     } catch (TTransportException &ttx) {
> -      cerr << "TServerTransport failed on close: " << ttx.what() << endl;
> +      string errStr = string("TServerTransport failed on close: ") +
> ttx.what();
> +      GlobalOutput(errStr.c_str());
>     }
>     stop_ = false;
>   }
>
>
>