Adar Dembo has posted comments on this change. ( 
http://gerrit.cloudera.org:8080/11547 )

Change subject: [test] Move BaseKuduTest to a Junit Rule
......................................................................


Patch Set 1:

(21 comments)

I think composing RetryRule within KuduRule makes sense, but rather than 
leaving it up to authors to decide which to use, I think it'd be simpler if we 
enforced (in code review) that every test use KuduRule.

Which means if it's important to allow tests to manage their own miniclusters, 
KuduRule should be modified to support not building a cluster. But, I suspect 
it'd be more clean to further parameterize KuduRule such that all custom 
minicluster management could be done there.

http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client-tools/src/test/java/org/apache/kudu/mapreduce/tools/ITExportCsv.java
File 
java/kudu-client-tools/src/test/java/org/apache/kudu/mapreduce/tools/ITExportCsv.java:

http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client-tools/src/test/java/org/apache/kudu/mapreduce/tools/ITExportCsv.java@49
PS1, Line 49:   public KuduRule kudu = new KuduRule();
'kudu' is a pretty vague noun to use for this thing. If you end up renaming 
KuduRule to KuduTestFoo as I suggested in a different comment, I'd use the foo 
as the name of the instance. So for example if you use KuduTestHarness, this 
should be called 'harness'.


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/main/java/org/apache/kudu/client/LocatedTablet.java
File java/kudu-client/src/main/java/org/apache/kudu/client/LocatedTablet.java:

http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/main/java/org/apache/kudu/client/LocatedTablet.java@44
PS1, Line 44:   public LocatedTablet(RemoteTablet tablet) {
Hmm, doesn't this suggest that applications could construct these? But that 
would be useless since there are no public APIs that accept LocatedTablets.

Can you annotate this in a way that suggests that it's only for tests?


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/main/java/org/apache/kudu/client/RemoteTablet.java
File java/kudu-client/src/main/java/org/apache/kudu/client/RemoteTablet.java:

http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/main/java/org/apache/kudu/client/RemoteTablet.java@56
PS1, Line 56: public class RemoteTablet implements Comparable<RemoteTablet> {
Likewise, can we annotate this as being public only to support KuduRule being 
in a separate package?


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/client/TestAsyncKuduClient.java
File 
java/kudu-client/src/test/java/org/apache/kudu/client/TestAsyncKuduClient.java:

http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/client/TestAsyncKuduClient.java@54
PS1, Line 54:   private KuduClient client;
            :   private AsyncKuduClient asyncClient;
What's the purpose of this indirection? Why not go to 'kudu' directly for the 
clients? I get that it's useful as shorthand, but when reviewing this my first 
thought was that these must be customized from the clients provided by 'kudu' 
in some way.

This applies to some of other other tests too.


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/client/TestConnectToCluster.java
File 
java/kudu-client/src/test/java/org/apache/kudu/client/TestConnectToCluster.java:

http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/client/TestConnectToCluster.java@35
PS1, Line 35: public class TestConnectToCluster {
This test also doesn't use the retry rule.


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/client/TestConnectToCluster.java@49
PS1, Line 49:     MiniKuduCluster cluster = new 
MiniKuduCluster.MiniKuduClusterBuilder()
It'd be safer for these tests to get the base cluster builder and modify it. 
Granted, that'd have no real effect (since the base builder only sets the 
number of servers), but it'd avoid problems in the future if someone adds a 
property to the base builder expecting it to apply universally.


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/client/TestConnectionCache.java
File 
java/kudu-client/src/test/java/org/apache/kudu/client/TestConnectionCache.java:

http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/client/TestConnectionCache.java@30
PS1, Line 30: public class TestConnectionCache {
No retry rule.


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/client/TestMiniKuduCluster.java
File 
java/kudu-client/src/test/java/org/apache/kudu/client/TestMiniKuduCluster.java:

http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/client/TestMiniKuduCluster.java@28
PS1, Line 28: public class TestMiniKuduCluster {
This test isn't configured with KuduRule, which means it's also not configured 
with RetryRule. Are you going to address that in a follow-on commit?


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/client/TestNegotiation.java
File java/kudu-client/src/test/java/org/apache/kudu/client/TestNegotiation.java:

http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/client/TestNegotiation.java@27
PS1, Line 27: public class TestNegotiation {
No retry rule.


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java
File java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java:

PS1:
License header.


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java@43
PS1, Line 43: public class KuduRule extends ExternalResource {
It'd be nice to use a name that describes how this class serves as a foundation 
for Kudu unit tests, but isn't to be extended (i.e. avoid the word 'base'). 
What do you think of KuduTestFramework, KuduTestInfra, KuduTestHarness, 
KuduTestSupport, KuduTestBasis, or KuduTestRoot? My preference would be for 
KuduTestHarness.


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java@73
PS1, Line 73: usefull
useful


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java@96
PS1, Line 96:       for(String flag : tabletServerConfig.flags()) {
for (String

Above too.


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java@104
PS1, Line 104:     // We use this with Gradle because it doesn't support
             :     // Surefire/Failsafe rerunFailingTestsCount like Maven does.
I'd rewrite this, because as written it sounds like we're somehow only using 
this with Gradle. You can talk about how Maven's surefire/failsafe execution 
frameworks both support rerunning failed tests, but Gradle doesn't, and so it 
was a lot easier to implement retrying as a JUnit rule to be applied 
universally than it was to hack up Gradle to support the equivalent logic.


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java@115
PS1, Line 115:     asyncClient = new 
AsyncKuduClient.AsyncKuduClientBuilder(miniCluster.getMasterAddressesAsString())
Line too long?


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java@124
PS1, Line 124:       if (asyncClient != null) {
Shouldn't this be a client != null check?


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java@138
PS1, Line 138:   public KuduClient getClient() {
             :     return client;
             :   }
             :
             :   public AsyncKuduClient getAsyncClient() {
             :     return asyncClient;
             :   }
Since you've got getters for these, can you make client and asyncClient private?


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java@146
PS1, Line 146:   public KuduTable createTable(String tableName, Schema schema,
Add Javadoc?


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java@147
PS1, Line 147:                                   CreateTableOptions builder) 
throws KuduException {
Indentation


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java@159
PS1, Line 159:     Deferred<KuduTable> d = asyncClient.openTable(name);
             :     return d.join(DEFAULT_SLEEP);
Could just use the sync client to simplify this, no? I imagine the current 
implementation is just a holdover from KuduBaseTest.


http://gerrit.cloudera.org:8080/#/c/11547/1/java/kudu-client/src/test/java/org/apache/kudu/test/KuduRule.java@404
PS1, Line 404:     asyncClient = new 
AsyncKuduClient.AsyncKuduClientBuilder(miniCluster.getMasterAddressesAsString())
Too long.



--
To view, visit http://gerrit.cloudera.org:8080/11547
To unsubscribe, visit http://gerrit.cloudera.org:8080/settings

Gerrit-Project: kudu
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: I32c83b47a576377b924ea41dbeaf78ce2b75e4c4
Gerrit-Change-Number: 11547
Gerrit-PatchSet: 1
Gerrit-Owner: Grant Henke <granthe...@apache.org>
Gerrit-Reviewer: Adar Dembo <a...@cloudera.com>
Gerrit-Reviewer: Kudu Jenkins
Gerrit-Reviewer: Mike Percy <mpe...@apache.org>
Gerrit-Comment-Date: Mon, 01 Oct 2018 18:30:38 +0000
Gerrit-HasComments: Yes

Reply via email to