> On Dec. 15, 2016, 3:04 p.m., Jonathan Hurley wrote:
> > ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LogSearchDataRetrievalService.java,
> >  lines 73-74
> > <https://reviews.apache.org/r/54756/diff/1/?file=1584729#file1584729line73>
> >
> >     This is a little odd; you're injecting an injector to be able to get an 
> > instance of LoggingRequestHelperFactory from the injector...
> >     
> >     Why not just @Inject the LoggingREquestHelperFactory?
> 
> Robert Nettleton wrote:
>     Yes, this does look a little strange.  I chose this approach because this 
> service handles some LogSearch REST requests on a separate thread, and so I 
> wanted to inject a separate factory instance to the new task.  The injected 
> factory helper impl is used on the main thread, to handle some 
> non-network-related URI calculations that can be returned to the caller 
> immediately.  
>     
>     In this case, the intent was to have the DI handle the creation of the 
> object used on the main thread, and to use the injector for creating new 
> instances for the network-related requests.  It seemed awkward to use the 
> injector to create the data member instance, but we could do that if it is 
> clearer.  
>     
>     In the future, it would be nice to ensure the thread-safety of the 
> factory object, and just pass around a single injected instance, but my 
> thinking was that this would be out of scope for this bug fix.  
>     
>     I'm thinking that I could just add some javadoc to clarify this further.  
> Would that be sufficient?
> 
> Jonathan Hurley wrote:
>     Javadoc would be sufficient, yes. One thing I'm not clear on still is the 
> multi-threaded aspect. Isn't a new service instantiated per REST request? If 
> so, it's it bound to the thread from Jetty anyway?
> 
> Robert Nettleton wrote:
>     As I understood it, any services annotated with "@AmbariService" are 
> singletons, and so my understanding is that the instance is not paired with 
> the bound thread. 
>     
>     The usage of the injector is to create a new factory instance for each 
> new task launched in a separate thread.  Here's the usage:
>     
>     {code}
>     private void startLogSearchFileNameRequest(String host, String component, 
> String cluster) {
>         executor.execute(new LogSearchFileNameRequestRunnable(host, 
> component, cluster, logFileNameCache, currentRequests,
>                                                               
> injector.getInstance(LoggingRequestHelperFactory.class)));
>       }
>     {code}
>     
>     In the future, it might be better to have the Runnable instances 
> themselves created by the injector, and just specify the dependencies there.  
>     
>     I'll add some javadoc to make this clearer, and update the patch in this 
> review.  
>     
>     Thanks.
> 
> Jonathan Hurley wrote:
>     Ah, I confused this "Service" with "LoggingService" which is instantiated 
> each time it's asked for. Yes, this service is a singleton by nature of it 
> being an AmbariService. At the end of the day, you need a new instance each 
> time - I get that, no problem. I think the right way would be to inject a 
> factory into this class and have the factory give you your instances. 
>     
>     With that said, if you need this in sooner rather than later, you can doc 
> this and then create a new Jira to track the addition of the factory.

I've just updated an updated patch to add javadoc to clarify this in the 
short-term, and I've created a JIRA to track this refactoring in the long-term: 
 

https://issues.apache.org/jira/browse/AMBARI-19217

Thanks.


- Robert


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/54756/#review159298
-----------------------------------------------------------


On Dec. 15, 2016, 7:54 p.m., Robert Nettleton wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/54756/
> -----------------------------------------------------------
> 
> (Updated Dec. 15, 2016, 7:54 p.m.)
> 
> 
> Review request for Ambari, Jonathan Hurley, Miklos Gergely, Oliver Szabo, and 
> Sumit Mohanty.
> 
> 
> Bugs: AMBARI-19105
>     https://issues.apache.org/jira/browse/AMBARI-19105
> 
> 
> Repository: ambari
> 
> 
> Description
> -------
> 
> This patch resolves AMBARI-19105.
> 
> Previously, the Ambari LogSearch integration used a hard-coded 5-second 
> timeout for its connection to the LogSearch Portal service.  Since this may 
> not be optimal for various cluster sizes, new configuration properties have 
> been introduced to control this behavior.  The default connect and read 
> timeouts are still 5 seconds.
> 
> This patch implements the following:
> 1. Adds two new properties to ambari.properties to control the connect and 
> read timeouts for an HTTP/S connection from the Ambari Server to the 
> LogSearch portal.
> 2. Updates the LogSearch integration layer to use these timeouts when 
> establishing a connection to the LogSearch service. Some additional 
> refactoring was implemented, in order to take better advantage of the 
> dependency injection system used in Ambari. 
> 3. Updates existing unit tests, and adds new tests as well.
> 4. Some basic code cleanup, removed dead code, etc. 
> 5. Fixes a small NullPointerException in the LogSearch code, including a new 
> unit test to verify this change.
> 
> 
> Diffs
> -----
> 
>   ambari-server/docs/configuration/index.md 6ff263c 
>   
> ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterService.java
>  072c4a2 
>   
> ambari-server/src/main/java/org/apache/ambari/server/api/services/LoggingService.java
>  ea4960f 
>   
> ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
>  f9b6878 
>   
> ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementController.java
>  389f973 
>   
> ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
>  6b5731c 
>   
> ambari-server/src/main/java/org/apache/ambari/server/controller/internal/LoggingResourceProvider.java
>  2eb1a63 
>   
> ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LogSearchDataRetrievalService.java
>  e65cd59 
>   
> ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperFactoryImpl.java
>  afe1757 
>   
> ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImpl.java
>  88996d7 
>   
> ambari-server/src/main/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProvider.java
>  6ffcdf9 
>   
> ambari-server/src/main/java/org/apache/ambari/server/controller/logging/Utils.java
>  fdc9267 
>   
> ambari-server/src/test/java/org/apache/ambari/server/api/services/LoggingServiceTest.java
>  64fff1e 
>   
> ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LogSearchDataRetrievalServiceTest.java
>  0bd681b 
>   
> ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperFactoryImplTest.java
>  7c8405d 
>   
> ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperImplTest.java
>  3129f6e 
>   
> ambari-server/src/test/java/org/apache/ambari/server/controller/logging/UtilsTest.java
>  63b46ac 
> 
> Diff: https://reviews.apache.org/r/54756/diff/
> 
> 
> Testing
> -------
> 
> 1. Manually verified this change against a local 3-node vagrant cluster. 
> 2. Ran the ambari-server "mvn clean test" suite with my patch applied.
> 
> There were some failures in the python suite:
> 
> "Total run:1154
> Total errors:93
> Total failures:1
> ERROR
> [INFO] 
> ------------------------------------------------------------------------
> [INFO] BUILD FAILURE
> [INFO] 
> ------------------------------------------------------------------------
> [INFO] Total time: 25:58.648s
> [INFO] Finished at: Wed Dec 14 14:03:10 EST 2016
> [INFO] Final Memory: 65M/1233M
> [INFO] 
> ------------------------------------------------------------------------
> "
> 
> I ran the full "mvn clean test" suite again without my changes applied, and 
> the same failures occurred, so my patch does not appear to cause this build 
> breakage.
> 
> 
> Thanks,
> 
> Robert Nettleton
> 
>

Reply via email to