[jira] [Updated] (THRIFT-3083) C++ Consolidate server processing loops in TSimpleServer, TThreadedServer, TThreadPoolServer

2015-04-26 Thread James E. King, III (JIRA)

 [ 
https://issues.apache.org/jira/browse/THRIFT-3083?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James E. King, III updated THRIFT-3083:
---
Description: 
Currently the simple and threaded servers all share a very similar serve() 
workflow.  This improvement story is to consolidate them and extract out the 
specific differences to limit code duplication.

1. Add TServerFramework that implements serve() and stop() for TServer, but is 
abstract.

2. Add virtual methods onClientConnected, onClientDisconnected to 
TServerFramework and require subclasses to implement them.

3. TSimpleServer onClientConnected calls TConnectedClient().run() in the 
serve() thread.

4. TThreadedServer::serve() calls TServerFramework::serve() and then waits for 
the notification that all clients are gone.  ::onClientConnected adds a 
TConnectedClient to the task set and starts a thread for it.  
::onClientDisconnected removes the client from the task set.

5. TThreadPoolServer would have similar changes

The resulting classes will be much smaller, and the specific differences 
between the servers will be more obvious.  Further, the server processing loop 
which is common to all three will be in one place.


  was:
Currently the simple and threaded servers all share a very similar serve() 
workflow.  This improvement story is to consolidate them and extract out the 
specific differences to limit code duplication.

1. Add TServerFramework that implements serve() and stop() for TServer, but is 
abstract.

2. Add virtual methods onClientConnected, onClientDisconnected to 
TServerFramework and require subclasses to implement them.

3. TSimpleServer onClientConnected calls TConnectedClient().run() in the 
serve() thread.

4. TThreadedServer::serve() calls TServerFramework::serve() and then waits for 
the notification that all clients are gone.  ::onClientConnected adds a 
TConnectedClient to the task set and starts a thread for it.  
::onClientDisconnected removes the client from the task set.

5. TThreadPoolServer would have similar changes

The resulting classes will be much smaller, and the specific differences 
between the servers will be more obvious.  Further, the server processing loop 
which is common to all three will be in one place.

Also add TServerEventHandler::postServe to balance out the fact there is a 
preServe, and document the post-conditions of preServe (TServerTransport is 
being listened to).


 C++ Consolidate server processing loops in TSimpleServer, TThreadedServer, 
 TThreadPoolServer
 

 Key: THRIFT-3083
 URL: https://issues.apache.org/jira/browse/THRIFT-3083
 Project: Thrift
  Issue Type: Improvement
  Components: C++ - Library
Affects Versions: 0.8, 0.9, 0.9.1, 0.9.2
Reporter: James E. King, III
 Attachments: THRIFT-3083-server-files.tar, THRIFT-3083.patch


 Currently the simple and threaded servers all share a very similar serve() 
 workflow.  This improvement story is to consolidate them and extract out the 
 specific differences to limit code duplication.
 1. Add TServerFramework that implements serve() and stop() for TServer, but 
 is abstract.
 2. Add virtual methods onClientConnected, onClientDisconnected to 
 TServerFramework and require subclasses to implement them.
 3. TSimpleServer onClientConnected calls TConnectedClient().run() in the 
 serve() thread.
 4. TThreadedServer::serve() calls TServerFramework::serve() and then waits 
 for the notification that all clients are gone.  ::onClientConnected adds a 
 TConnectedClient to the task set and starts a thread for it.  
 ::onClientDisconnected removes the client from the task set.
 5. TThreadPoolServer would have similar changes
 The resulting classes will be much smaller, and the specific differences 
 between the servers will be more obvious.  Further, the server processing 
 loop which is common to all three will be in one place.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[jira] [Updated] (THRIFT-3083) C++ Consolidate server processing loops in TSimpleServer, TThreadedServer, TThreadPoolServer

2015-04-26 Thread James E. King, III (JIRA)

 [ 
https://issues.apache.org/jira/browse/THRIFT-3083?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James E. King, III updated THRIFT-3083:
---
Description: 
Currently the simple and threaded servers all share a very similar serve() 
workflow.  This improvement story is to consolidate them and extract out the 
specific differences to limit code duplication.

1. Add TServerFramework that implements serve() and stop() for TServer, but is 
abstract.

2. Add virtual methods onClientConnected, onClientDisconnected to 
TServerFramework and require subclasses to implement them.

3. TSimpleServer onClientConnected calls TConnectedClient().run() in the 
serve() thread, thus blocking the server thread until the client disconnects.

4. TThreadedServer::serve() calls TServerFramework::serve() and then waits for 
the notification that all clients are gone.  ::onClientConnected adds a 
TConnectedClient to the task set and starts a thread for it.  
::onClientDisconnected removes the client from the task set.

5. TThreadPoolServer would have similar changes.

The resulting classes will be much smaller, and the specific differences 
between the servers will be more obvious.  Further, the server processing loop 
which is common to all three will be in one place.  This improves the 
predictability of thrift and helps improve maintainability.


  was:
Currently the simple and threaded servers all share a very similar serve() 
workflow.  This improvement story is to consolidate them and extract out the 
specific differences to limit code duplication.

1. Add TServerFramework that implements serve() and stop() for TServer, but is 
abstract.

2. Add virtual methods onClientConnected, onClientDisconnected to 
TServerFramework and require subclasses to implement them.

3. TSimpleServer onClientConnected calls TConnectedClient().run() in the 
serve() thread.

4. TThreadedServer::serve() calls TServerFramework::serve() and then waits for 
the notification that all clients are gone.  ::onClientConnected adds a 
TConnectedClient to the task set and starts a thread for it.  
::onClientDisconnected removes the client from the task set.

5. TThreadPoolServer would have similar changes

The resulting classes will be much smaller, and the specific differences 
between the servers will be more obvious.  Further, the server processing loop 
which is common to all three will be in one place.



 C++ Consolidate server processing loops in TSimpleServer, TThreadedServer, 
 TThreadPoolServer
 

 Key: THRIFT-3083
 URL: https://issues.apache.org/jira/browse/THRIFT-3083
 Project: Thrift
  Issue Type: Improvement
  Components: C++ - Library
Affects Versions: 0.8, 0.9, 0.9.1, 0.9.2
Reporter: James E. King, III
 Attachments: THRIFT-3083-server-files.tar, THRIFT-3083.patch


 Currently the simple and threaded servers all share a very similar serve() 
 workflow.  This improvement story is to consolidate them and extract out the 
 specific differences to limit code duplication.
 1. Add TServerFramework that implements serve() and stop() for TServer, but 
 is abstract.
 2. Add virtual methods onClientConnected, onClientDisconnected to 
 TServerFramework and require subclasses to implement them.
 3. TSimpleServer onClientConnected calls TConnectedClient().run() in the 
 serve() thread, thus blocking the server thread until the client disconnects.
 4. TThreadedServer::serve() calls TServerFramework::serve() and then waits 
 for the notification that all clients are gone.  ::onClientConnected adds a 
 TConnectedClient to the task set and starts a thread for it.  
 ::onClientDisconnected removes the client from the task set.
 5. TThreadPoolServer would have similar changes.
 The resulting classes will be much smaller, and the specific differences 
 between the servers will be more obvious.  Further, the server processing 
 loop which is common to all three will be in one place.  This improves the 
 predictability of thrift and helps improve maintainability.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)