Change run() to serve() in all Thrift server interfaces
authorMark Slee <mcslee@apache.org>
Wed, 20 Sep 2006 01:56:10 +0000 (01:56 +0000)
committerMark Slee <mcslee@apache.org>
Wed, 20 Sep 2006 01:56:10 +0000 (01:56 +0000)
git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664799 13f79535-47bb-0310-9956-ffa450edef68

compiler/cpp/src/generate/t_php_generator.cc
lib/cpp/src/server/TServer.h
lib/cpp/src/server/TSimpleServer.cc
lib/cpp/src/server/TSimpleServer.h
lib/cpp/src/server/TThreadPoolServer.cc
lib/cpp/src/server/TThreadPoolServer.h
lib/php/src/transport/TSocket.php
lib/py/src/server/TServer.py
test/cpp/src/TestServer.cc
test/py/TestServer.py

index 6ac0b33..1ed599c 100644 (file)
@@ -341,7 +341,7 @@ void t_php_generator::generate_service(t_service* tservice) {
     php_includes();
 
   f_service_ <<
-    "require_once dirname(__FILE__).'/" << program_name_ << "_types.php';" << endl << endl;
+    "require_once $GLOBALS['THRIFT_ROOT'].'/packages/" << program_name_ << "/" << program_name << "_types.php';" << endl << endl;
 
   // Generate the three main parts of the service (well, two for now in PHP)
   generate_service_interface(tservice);
@@ -624,12 +624,12 @@ void t_php_generator::generate_service_client(t_service* tservice) {
         f_service_ <<
           indent() << "throw new Exception(\"" << (*f_iter)->get_name() << " failed: unknown result\");" << endl;
       }     
-    }      
 
     // Close function
     scope_down(f_service_);
     f_service_ << endl;
-    
+
+    }   
   }
 
   indent_down();
index c19302f..ddb320d 100644 (file)
@@ -21,10 +21,10 @@ class TServerOptions;
  *
  * @author Mark Slee <mcslee@facebook.com>
  */
-class TServer : public concurrency::Runnable {
+class TServer {
 public:
   virtual ~TServer() {}
-  virtual void run() = 0;
+  virtual void serve() = 0;
   
 protected:
   TServer(shared_ptr<TProcessor> processor,
index 041a52f..63b6c6b 100644 (file)
@@ -11,7 +11,7 @@ namespace facebook { namespace thrift { namespace server {
  *
  * @author Mark Slee <mcslee@facebook.com>
  */
-void TSimpleServer::run() {
+void TSimpleServer::serve() {
 
   shared_ptr<TTransport> client;
   pair<shared_ptr<TTransport>,shared_ptr<TTransport> > io;
index 973ba30..a0d22a7 100644 (file)
@@ -24,7 +24,7 @@ class TSimpleServer : public TServer {
     
   ~TSimpleServer() {}
 
-  void run();
+  void serve();
 
 };
 
index 1eab53d..4285b05 100644 (file)
@@ -55,7 +55,7 @@ TThreadPoolServer::TThreadPoolServer(shared_ptr<TProcessor> processor,
 
 TThreadPoolServer::~TThreadPoolServer() {}
 
-void TThreadPoolServer::run() {
+void TThreadPoolServer::serve() {
 
   shared_ptr<TTransport> client;
   pair<shared_ptr<TTransport>,shared_ptr<TTransport> > io;
index 34b216c..b8f8b47 100644 (file)
@@ -26,7 +26,7 @@ public:
 
   virtual ~TThreadPoolServer();
 
-  virtual void run();
+  virtual void serve();
 
 protected:
 
index 74ef01f..5ecd874 100644 (file)
@@ -165,12 +165,28 @@ class TSocket extends TTransport {
       stream_set_timeout($this->handle_, 0, $this->recvTimeout_*1000);
       $this->sendTimeoutSet_ = FALSE;
     }
-    $buf = @stream_get_contents($this->handle_, $len);
-    if ($buf === FALSE || strlen($buf) !== $len) {
-      throw new Exception('TSocket: Could not read '.$len.' bytes from '.
-                          $this->host_.':'.$this->port_);
+    // This call does not obey stream_set_timeout values!
+    // $buf = @stream_get_contents($this->handle_, $len);
+
+    $pre = null;
+    while (true) {
+      $buf = @fread($this->handle_, $len);
+      if ($buf === FALSE) {
+        throw new Exception('TSocket: Could not read '.$len.' bytes from '.
+                            $this->host_.':'.$this->port_);
+      } else if (($sz = strlen($buf)) < $len) {
+        $md = stream_get_meta_data($this->handle_);
+        if ($md['timed_out']) {
+          throw new Exception('TSocket: timed out reading '.$len.' bytes from '.
+                              $this->host_.':'.$this->port_);
+        } else {
+          $pre .= $buf;
+          $len -= $sz;
+        }
+      } else {
+        return $pre.$buf;
+      }
     }
-    return $buf;
   }
 
   /**
@@ -184,7 +200,7 @@ class TSocket extends TTransport {
       stream_set_timeout($this->handle_, 0, $this->recvTimeout_*1000);
       $this->sendTimeoutSet_ = FALSE;
     }
-    $data = @fread($this->handle_, 1);
+    $data = @fread($this->handle_, $len);
     if ($data === FALSE) {
       throw new Exception('TSocket: Could not read '.$len.' bytes from '.
                           $this->host_.':'.$this->port_);
index 53f6846..c9a701e 100644 (file)
@@ -6,7 +6,7 @@ from thrift.transport import TTransport
 
 class TServer:
 
-  """Base interface for a server, which must have a run method."""
+  """Base interface for a server, which must have a serve method."""
 
   def __init__(self, processor, serverTransport, transportFactory=None):
     self.processor = processor
@@ -16,7 +16,7 @@ class TServer:
     else:
       self.transportFactory = transportFactory
 
-  def run(self):
+  def serve(self):
     pass
 
 class TSimpleServer(TServer):
@@ -26,7 +26,7 @@ class TSimpleServer(TServer):
   def __init__(self, processor, serverTransport, transportFactory=None):
     TServer.__init__(self, processor, serverTransport, transportFactory)
 
-  def run(self):
+  def serve(self):
     self.serverTransport.listen()
     while True:
       client = self.serverTransport.accept()
index f2f9eca..db41b79 100644 (file)
@@ -353,7 +353,7 @@ int main(int argc, char **argv) {
                                );
 
     printf("Starting the server on port %d...\n", port);
-    simpleServer.run();
+    simpleServer.serve();
 
   } else if (serverType == "thread-pool") {
 
@@ -374,7 +374,7 @@ int main(int argc, char **argv) {
                                       serverOptions);
 
     printf("Starting the server on port %d...\n", port);
-    threadPoolServer.run();
+    threadPoolServer.serve();
   }
 
   printf("done.\n");
index f0f9ba1..96312c5 100755 (executable)
@@ -57,4 +57,4 @@ handler = TestHandler()
 processor = ThriftTest.Processor(handler, protocol)
 factory = TTransport.TBufferedTransportFactory()
 server = TServer.TSimpleServer(processor, transport, factory)
-server.run()
+server.serve()