Github user tdas commented on the pull request:

    https://github.com/apache/spark/pull/566#issuecomment-41611069
  
    Hey @tmalaska, I pondered about the code a bit more, especially about the 
lazy vals. The lazy val in this case is probably not a good idea. The receivers 
are now (after #300) are designed to be restartable multiple times. So 
onStart() + onStop() could be called multiple times if the receiver decides to 
restart itself (to handle exceptions). In which case, start() will be called on 
the netty server after it has been closed. I am not sure that is possible. So 
its best to create a new NettyServer every time a onStart() is called, rather 
than lazy initialize and use the netty server. 
    
    So its probably best to do something like this.
    ```
    FlumeReceiver .... {
       var server: NettyServer = null
    
       def onStart() {
           synchronized { 
               server = initServer()
               server.start()
           }
       }
    
       def onStop() {
          synchronized { 
             if (server != null) {
                server.stop()
             }
          }
       }
    ...
    }
    ```


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to