From ae1a25c6ba35169b32d0959828d47f7b672068b6 Mon Sep 17 00:00:00 2001 From: Rico Landefeld Date: Mon, 23 Jul 2018 13:51:52 +0200 Subject: [PATCH 01/22] remove node client support --- pom.xml | 12 ++-- .../elasticsearch/config/EsConfiguration.java | 15 ----- .../managed/ManagedEsClient.java | 50 ++++------------- .../managed/ManagedEsClientTest.java | 55 ++----------------- src/test/resources/node_client.yml | 3 - src/test/resources/transport_client.yml | 1 - 6 files changed, 20 insertions(+), 116 deletions(-) delete mode 100644 src/test/resources/node_client.yml diff --git a/pom.xml b/pom.xml index 83dbf35..d7f5888 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.dropwizard.modules dropwizard-elasticsearch - 1.2.0-2-SNAPSHOT + 1.2.5-1-SNAPSHOT jar Dropwizard Elasticsearch Bundle @@ -68,8 +68,8 @@ UTF-8 1.8 1.8 - 1.2.0 - 2.4.6 + 1.2.5 + 5.6.10 @@ -90,8 +90,8 @@ dropwizard-core - org.elasticsearch - elasticsearch + org.elasticsearch.client + transport ${elasticsearch.version} @@ -103,7 +103,7 @@ org.mockito mockito-core - 2.11.0 + 2.19.0 test diff --git a/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java b/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java index cdf0a3d..9a547b6 100644 --- a/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java +++ b/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java @@ -1,9 +1,7 @@ package io.dropwizard.elasticsearch.config; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.net.HostAndPort; -import io.dropwizard.validation.ValidationMethod; import org.hibernate.validator.constraints.NotEmpty; import javax.validation.constraints.NotNull; @@ -23,9 +21,6 @@ public class EsConfiguration { @NotEmpty private String clusterName = "elasticsearch"; - @JsonProperty - private boolean nodeClient = true; - @JsonProperty @NotNull private Map settings = Collections.emptyMap(); @@ -41,10 +36,6 @@ public String getClusterName() { return clusterName; } - public boolean isNodeClient() { - return nodeClient; - } - public Map getSettings() { return settings; } @@ -52,10 +43,4 @@ public Map getSettings() { public String getSettingsFile() { return settingsFile; } - - @ValidationMethod - @JsonIgnore - public boolean isValidConfig() { - return nodeClient || !servers.isEmpty(); - } } diff --git a/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java b/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java index a91c039..eccc745 100644 --- a/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java +++ b/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java @@ -9,8 +9,10 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.node.Node; +import org.elasticsearch.transport.client.PreBuiltTransportClient; import java.io.File; +import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Path; @@ -18,7 +20,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Strings.isNullOrEmpty; -import static org.elasticsearch.node.NodeBuilder.nodeBuilder; + /** * A Dropwizard managed Elasticsearch {@link Client}. Depending on the {@link EsConfiguration} a Node Client or @@ -32,8 +34,7 @@ public class ManagedEsClient implements Managed { private Client client = null; /** - * Create a new managed Elasticsearch {@link Client}. If {@link EsConfiguration#nodeClient} is {@literal true}, a - * Node Client is being created, otherwise a {@link TransportClient} is being created with {@link EsConfiguration#servers} + * Create a new managed Elasticsearch {@link Client}. A {@link TransportClient} is being created with {@link EsConfiguration#servers} * as transport addresses. * * @param config a valid {@link EsConfiguration} instance @@ -48,11 +49,13 @@ public ManagedEsClient(final EsConfiguration config) { try { final URL url = Resources.getResource(config.getSettingsFile()); path = new File(url.toURI()).toPath(); + settingsBuilder.loadFromPath(path); } catch (URISyntaxException | NullPointerException e) { throw new IllegalArgumentException("settings file cannot be found", e); + } catch (IOException e){ + throw new IllegalStateException("settings file cannot be loaded", e); } } - settingsBuilder.loadFromPath(path); } final Settings settings = settingsBuilder @@ -60,29 +63,11 @@ public ManagedEsClient(final EsConfiguration config) { .put("cluster.name", config.getClusterName()) .build(); - if (config.isNodeClient()) { - this.node = nodeBuilder() - .client(true) - .data(false) - .settings(settings) - .build(); - this.client = this.node.client(); - } else { - final TransportAddress[] addresses = TransportAddressHelper.fromHostAndPorts(config.getServers()); - this.client = TransportClient.builder().settings(settings).build().addTransportAddresses(addresses); - } - } - /** - * Create a new managed Elasticsearch {@link Client} from the provided {@link Node}. - * - * @param node a valid {@link Node} instance - */ - public ManagedEsClient(final Node node) { - this.node = checkNotNull(node, "Elasticsearch node must not be null"); - this.client = node.client(); - } + final TransportAddress[] addresses = TransportAddressHelper.fromHostAndPorts(config.getServers()); + this.client = new PreBuiltTransportClient(settings).addTransportAddresses(addresses); + } /** * Create a new managed Elasticsearch {@link Client} from the provided {@link Client}. @@ -100,7 +85,6 @@ public ManagedEsClient(Client client) { */ @Override public void start() throws Exception { - startNode(); } /** @@ -112,7 +96,6 @@ public void start() throws Exception { @Override public void stop() throws Exception { closeClient(); - closeNode(); } /** @@ -124,19 +107,6 @@ public Client getClient() { return client; } - private Node startNode() { - if (null != node) { - return node.start(); - } - - return null; - } - - private void closeNode() { - if (null != node && !node.isClosed()) { - node.close(); - } - } private void closeClient() { if (null != client) { diff --git a/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java b/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java index af5becb..47d174a 100644 --- a/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java +++ b/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java @@ -43,11 +43,6 @@ public void ensureEsConfigurationIsNotNull() { new ManagedEsClient((EsConfiguration) null); } - @Test(expected = NullPointerException.class) - public void ensureNodeIsNotNull() { - new ManagedEsClient((Node) null); - } - @Test(expected = NullPointerException.class) public void ensureClientIsNotNull() { new ManagedEsClient((Client) null); @@ -64,48 +59,6 @@ public void stopShouldCloseTheClient() throws Exception { verify(client).close(); } - @Test - public void lifecycleMethodsShouldStartAndCloseTheNode() throws Exception { - Node node = mock(Node.class); - when(node.isClosed()).thenReturn(false); - Managed managed = new ManagedEsClient(node); - - managed.start(); - verify(node).start(); - - managed.stop(); - verify(node).close(); - } - - @Test - public void managedEsClientWithNodeShouldReturnClient() throws Exception { - Client client = mock(Client.class); - Node node = mock(Node.class); - when(node.client()).thenReturn(client); - - ManagedEsClient managed = new ManagedEsClient(node); - - assertSame(client, managed.getClient()); - } - - @Test - public void nodeClientShouldBeCreatedFromConfig() throws URISyntaxException, IOException, ConfigurationException { - URL configFileUrl = this.getClass().getResource("/node_client.yml"); - File configFile = new File(configFileUrl.toURI()); - EsConfiguration config = configFactory.build(configFile); - - ManagedEsClient managedEsClient = new ManagedEsClient(config); - Client client = managedEsClient.getClient(); - - assertNotNull(client); - assertTrue(client instanceof NodeClient); - - NodeClient nodeClient = (NodeClient) client; - assertEquals(config.getClusterName(), nodeClient.settings().get("cluster.name")); - assertEquals("true", nodeClient.settings().get("node.client")); - assertEquals("false", nodeClient.settings().get("node.data")); - } - @Test public void transportClientShouldBeCreatedFromConfig() throws URISyntaxException, IOException, ConfigurationException { URL configFileUrl = this.getClass().getResource("/transport_client.yml"); @@ -141,9 +94,9 @@ public void managedClientShouldUseCustomElasticsearchConfig() throws URISyntaxEx Client client = managedEsClient.getClient(); assertNotNull(client); - assertTrue(client instanceof NodeClient); + assertTrue(client instanceof TransportClient); - NodeClient nodeClient = (NodeClient) client; + TransportClient nodeClient = (TransportClient) client; assertEquals(config.getClusterName(), nodeClient.settings().get("cluster.name")); assertEquals("19300-19400", nodeClient.settings().get("transport.tcp.port")); } @@ -158,9 +111,9 @@ public void managedClientObeysPrecedenceOfSettings() throws URISyntaxException, Client client = managedEsClient.getClient(); assertNotNull(client); - assertTrue(client instanceof NodeClient); + assertTrue(client instanceof TransportClient); - NodeClient nodeClient = (NodeClient) client; + TransportClient nodeClient = (TransportClient) client; assertEquals(config.getClusterName(), nodeClient.settings().get("cluster.name")); assertEquals("29300-29400", nodeClient.settings().get("transport.tcp.port")); assertEquals("target/data/yaml", nodeClient.settings().get("path.home")); diff --git a/src/test/resources/node_client.yml b/src/test/resources/node_client.yml deleted file mode 100644 index 7d0395d..0000000 --- a/src/test/resources/node_client.yml +++ /dev/null @@ -1,3 +0,0 @@ -clusterName: dropwizard_elasticsearch_test -settings: - path.home: "target/data" \ No newline at end of file diff --git a/src/test/resources/transport_client.yml b/src/test/resources/transport_client.yml index 1e65b03..a90d621 100644 --- a/src/test/resources/transport_client.yml +++ b/src/test/resources/transport_client.yml @@ -1,4 +1,3 @@ -nodeClient: false clusterName: dropwizard_elasticsearch_test servers: - 127.0.0.1 From 8557d8c0500da23812fe222da2826d435ad31db1 Mon Sep 17 00:00:00 2001 From: Rico Landefeld Date: Mon, 23 Jul 2018 14:22:26 +0200 Subject: [PATCH 02/22] adds gradle building --- .gradle/3.4.1/file-changes/last-build.bin | Bin 0 -> 1 bytes .../fileContent/annotation-processors.bin | Bin 0 -> 20207 bytes .gradle/3.4.1/fileContent/fileContent.lock | Bin 0 -> 17 bytes .gradle/3.4.1/taskHistory/fileHashes.bin | Bin 0 -> 26347 bytes .gradle/3.4.1/taskHistory/fileSnapshots.bin | Bin 0 -> 75286 bytes .../3.4.1/taskHistory/jvmClassSignatures.bin | Bin 0 -> 23223 bytes .gradle/3.4.1/taskHistory/taskHistory.bin | Bin 0 -> 23234 bytes .gradle/3.4.1/taskHistory/taskHistory.lock | Bin 0 -> 17 bytes .gradle/buildOutputCleanup/built.bin | 0 .gradle/buildOutputCleanup/cache.properties | 2 + .../buildOutputCleanup/cache.properties.lock | 1 + build.gradle | 27 +++ .../config/EsConfiguration.class | Bin 0 -> 1528 bytes .../health/EsClusterHealthCheck.class | Bin 0 -> 2276 bytes .../health/EsIndexDocsHealthCheck.class | Bin 0 -> 4759 bytes .../health/EsIndexExistsHealthCheck.class | Bin 0 -> 2796 bytes .../managed/ManagedEsClient.class | Bin 0 -> 4330 bytes .../util/TransportAddressHelper.class | Bin 0 -> 1795 bytes build/ivy.xml | 33 ++++ ...pwizard-elasticsearch-1.2.5-1-SNAPSHOT.jar | Bin 0 -> 9976 bytes build/poms/pom-default.xml | 34 ++++ build/tmp/jar/MANIFEST.MF | 2 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 54212 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 172 ++++++++++++++++++ gradlew.bat | 84 +++++++++ repository.gradle | 25 +++ settings.gradle | 1 + 28 files changed, 387 insertions(+) create mode 100644 .gradle/3.4.1/file-changes/last-build.bin create mode 100644 .gradle/3.4.1/fileContent/annotation-processors.bin create mode 100644 .gradle/3.4.1/fileContent/fileContent.lock create mode 100644 .gradle/3.4.1/taskHistory/fileHashes.bin create mode 100644 .gradle/3.4.1/taskHistory/fileSnapshots.bin create mode 100644 .gradle/3.4.1/taskHistory/jvmClassSignatures.bin create mode 100644 .gradle/3.4.1/taskHistory/taskHistory.bin create mode 100644 .gradle/3.4.1/taskHistory/taskHistory.lock create mode 100644 .gradle/buildOutputCleanup/built.bin create mode 100644 .gradle/buildOutputCleanup/cache.properties create mode 100644 .gradle/buildOutputCleanup/cache.properties.lock create mode 100644 build.gradle create mode 100644 build/classes/main/io/dropwizard/elasticsearch/config/EsConfiguration.class create mode 100644 build/classes/main/io/dropwizard/elasticsearch/health/EsClusterHealthCheck.class create mode 100644 build/classes/main/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.class create mode 100644 build/classes/main/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheck.class create mode 100644 build/classes/main/io/dropwizard/elasticsearch/managed/ManagedEsClient.class create mode 100644 build/classes/main/io/dropwizard/elasticsearch/util/TransportAddressHelper.class create mode 100644 build/ivy.xml create mode 100644 build/libs/dropwizard-elasticsearch-1.2.5-1-SNAPSHOT.jar create mode 100644 build/poms/pom-default.xml create mode 100644 build/tmp/jar/MANIFEST.MF create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 repository.gradle create mode 100644 settings.gradle diff --git a/.gradle/3.4.1/file-changes/last-build.bin b/.gradle/3.4.1/file-changes/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/.gradle/3.4.1/fileContent/annotation-processors.bin b/.gradle/3.4.1/fileContent/annotation-processors.bin new file mode 100644 index 0000000000000000000000000000000000000000..258cda3825f9ac02547738247a512749bd0872e6 GIT binary patch literal 20207 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 literal 0 HcmV?d00001 diff --git a/.gradle/3.4.1/taskHistory/fileSnapshots.bin b/.gradle/3.4.1/taskHistory/fileSnapshots.bin new file mode 100644 index 0000000000000000000000000000000000000000..a80c2e54ed7e34ee3f35b3566b7a4c46245e4f97 GIT binary patch literal 75286 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 literal 0 HcmV?d00001 diff --git a/.gradle/3.4.1/taskHistory/jvmClassSignatures.bin b/.gradle/3.4.1/taskHistory/jvmClassSignatures.bin new file mode 100644 index 0000000000000000000000000000000000000000..2335fbcadb1e849f34962272aaee4b9aa902f83b GIT binary patch literal 23223 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 b`tisaMdH=3q(?FA{(F*7#`vDQMM?YzBA;^P literal 0 HcmV?d00001 diff --git a/.gradle/3.4.1/taskHistory/taskHistory.bin b/.gradle/3.4.1/taskHistory/taskHistory.bin new file mode 100644 index 0000000000000000000000000000000000000000..493f3d0cb6a16e37e6350ee558488cc9aea6bb87 GIT binary patch literal 23234 zcmeI2Yitx%6vt<1EBL6^2MIw+U z^v=EKp7Xo^bMBqCX+@dW@W?JtCXKUk<= zx@K1W-d#ca^5(F;<=E}nkpo|?4%&08!uIexw66`G;a4Pp1dsp{Kmter2_OL^fCP{L z5W=FwXo-9UINGwFdZGas*d zziHl9mpd-yf>BR4pFGlk)s;7ymkoISDB1MMzQgyN`1Zm6`cDV0?bx?z=}QhTYDG>A zlWN3enjqdrPwU~t1v}d6;QRVC)g4X*HPnXDInRGSaKW#GtLiUqSohG^OVozB3--T! z_6HlUI=6{+?>O}N;VMr<565{H^QiWqnk+dMO`60uXn~qWvd7^YJ(uV-S!6a#8W2nGeuP?LCq=^iCqFC_!Ndo&<(e1=AnV1eIqnBfdPDhP1)pus%B zS-vcoV|Q_L^gE?aD7Tb^aJ{9;q(^x-)2SD(HY|KHKEew_U!*P8Qi(jXwSMMqi+5Q@ zJSwej;!0vFx@lZVL`e<`^W!2#>E+7#8%Q_NV7ZH0#x7g&hptc>ZoQ*9-JV(BmCM|* zetEVdQ{{rR7z9=yu9)=DtLoI*=Z1dXFeN|JF>-Qn+@-(rw`N(}ipQlKSvUP}0EM%k ziOrTEPwu4L17!sC>ikuP(qcfJIcqmuJLIL-Jf=g6LGp>x&}Ez6UMfzs?xBSO)dhst zY}<|?QeG>$15)xFF6TV9|J0iKuMLbm;yGom)AYB8_KZF?tf^ZK3dw5w1JaD2Q+#>z zg89}j_jar+T*%KmwSU5;(H+Z$I;GtP8fgjcr&oT)PpcmJ+u4;bGpI&B5b7l@!fcsn z^G6(4GVnBmy3{tZV?X)*0=m~u8d^F&?1|7=*`vV&X~N^mg;AC)a~zWr``s(}{U42- z`hJ$8-lf!a6SGWvU1caV5YU$^CoQ^pzuRG?WTS$a(9RJsy%|hTZmrr4NX06wc>c* zaYRcfTHo<4(L~_D^mwY<1>r?1r1n6$d1f-vCrt>YCZ#QTGBiD=Q{K#rJ}vP4Vt>V; z{F+)b=cKP4s!HzzA6~xm5P7ynQQMSS4|u_n!KbHIe(ilGH0Ptrp01>8{z6F+?Ol)Y7y-%BGOHyK>CHBqHh{z04|G z6%lO?BanKV-l{3v!?DcPIkl)Qh%dUS3o0^EAk56#8O|L(JulQsWr$}CpqiOTwuP}# zTXzg*`-&DyT~}voVo62ov4y%WwouWbF08C$RW%!kZA)bpZDRQ{0n1XzOP&s=jRzB( ze_MkGIA)_i)AwCW5rFvPAycv`i*qWY)eQI_IuDj)>)(mh+`RBM5U2#NOftirY5a|RxN1~n@ zq?uVZXvT6yU$|jRJ=fG77O`0Yjt4Cc)DBxrFx!*SY>g?+V7$XI0yPX*KLIQ96cWTV zrz6wZoM>Coy1mi~23K`as>egbv|@UwGODR+$|&^IOhb>RsE%rf%c(r0Q~8?K$t>`h zSZ=ttOz||J4s#0c6-HTSkUP>+mK$`MWlY&wp^(yaIKJoP!9X4Wr&|sycA6#?R>?`ibG4E)?4n~@-vn9nb~bC zTH3qPnRt-Zf}9g-wmKDOm|}6sLKtVv>TQsIyiXQq&|mn104P%9Pz1jjs1(Axn41|l zFkmt@Ds$4A*7oMkOga{`_FpW^!|;-O896n7Q(%8SHrIbvpC}E<^ZJJTK Iz#eP;2^2*D?f?J) literal 0 HcmV?d00001 diff --git a/.gradle/3.4.1/taskHistory/taskHistory.lock b/.gradle/3.4.1/taskHistory/taskHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..75b006b7c923973605b608ed30a26ba336606c0f GIT binary patch literal 17 UcmZSf_$k5gSxFmulyP>ig|_sAeA%6uoq6V&=XUSU-(SB0U=3d6AO{a~undo~kcE{DP_sWaktfDl zHOtd9tfgU{Ksw~=l&g@yc=ec_G8$>&)2aydCV^~ScmdOq;sn3=Y*J53&*v1) zrVMDnHGL&Ry%RL{q|%$)h%xgn3bbhQeG!TSpYH^L)JzK*U`uK-4q2$VI&1p$n7JQA z#9`-2^fmf>N}h0~KO@?rWpPGNnJ*d^273pgR!jssq&2B)k?&*Ti0elNw#J%Bz7Ui5 zS>VySRwD2)Wu+>WM~}n-S2!f^U`o{wx!XLk%`+j_8f%exzDtca>;%!e^})#2<&Kvl zMjxjG`cnAFba+byLT?ioDlP33NLFM6qxq@`cr9uo)%OflG!sde`TI->M~L;kDX$lA}i)OI4}dV zX?W(q2FyD!0uF)E9z7i>z@!7uVbOspxaPn#OcGeV`WL_#Xdj>z zd(D|VNaLDE&f|zwK;A`UIE~gUu5)k`Pn{SMb8n+Z;0{iju-zznrdz7~9frQ5k-!oF zLk%$PqBzwqjs>}k=l5U%S3|iQB-IbHFaU(WeOMg8Al+YF8c-ZFc!0f20~uucL6!%A K5LmLqmj40ZL|pU$ literal 0 HcmV?d00001 diff --git a/build/classes/main/io/dropwizard/elasticsearch/health/EsClusterHealthCheck.class b/build/classes/main/io/dropwizard/elasticsearch/health/EsClusterHealthCheck.class new file mode 100644 index 0000000000000000000000000000000000000000..09c53988367b8805bbe73646759a4161af98c603 GIT binary patch literal 2276 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 literal 0 HcmV?d00001 diff --git a/build/classes/main/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheck.class b/build/classes/main/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheck.class new file mode 100644 index 0000000000000000000000000000000000000000..dfdf768416787333794252322077eda738410739 GIT binary patch literal 2796 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 literal 0 HcmV?d00001 diff --git a/build/classes/main/io/dropwizard/elasticsearch/util/TransportAddressHelper.class b/build/classes/main/io/dropwizard/elasticsearch/util/TransportAddressHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..3f539b1c86d217d089193d3b6762b01437050e7d GIT binary patch literal 1795 zcmbVNTW=Fb7(KIgve?;#KuEZ`T+?DZh2<7f>LfHx2(h$n5H^v3hiYOE&cb@v+FetX z=l&92c%^+HrKnZkkoX(?3#4AotQ~L-RjoYi%zQK7ob%0h+t+{n`a6KjC}%MS+r;@S zEL<>gQO}pMFmTz#Y!)W2n3x;E7r3g2FHMxPNMqi_f`GMheRb)!Q~mDd`mL&fC<}}( z2YwVwKi-gDTcv<$9t_XBz8fzJr1FIgf%I}vR|0z-*H_=Ro0}@E%1w_u`<h(}X(VFsF zDlC!dei$^@f+$|{>o<8Wa5wMNf~MUFf`+GTE}MaG`zp43v`Pgh2pfGwUDbGp>H|{J zjcoN&ogRQmz?2=E1#-><`A8E=?CM zqwwx=T|X*vT-hz6)#D7}jQ5)=F!k@K|Ipfr{A{1@`~aR@q>Dx?v8+A(Mz)d+GBGWX zskjYa#_f<<*6erJV7R;XX|@uy!JN_0HaZO-um!)9g zD=cZ2uLTwc$nE#}*Kf53Sr)i707(B;6Dt<3W7Wb9tO=a_-#WB#1V@=UiCaABH|+Jz z2dc&@HXAC|1uJkMU+5%Da$bo;*Kg=zp@J^>^>9Vqmu-)l>3q4sJ~h=%f?oZyZcfL$ z2f7)&e}A_UN?KzqG2~sb5i)WgGqh}O1Wu7sV3I6726YTB;Urt<82c`RjJ+7=ypNKB z{YY`m=yROpj?Gzc9x84_{FJCnaU4!IM{$sAtD}HJI7}&{eZ(Doxr!k|0=btk?i8OR zRopjSeU71R3_CAj-kI6Po@YEapfPo;2T>-7qj9G?cag&>)NjZkghPTQi0zn YQkg$7VxlPC5_E=J20rJ-v&rh*KP4sSp#T5? literal 0 HcmV?d00001 diff --git a/build/ivy.xml b/build/ivy.xml new file mode 100644 index 0000000..bf0350c --- /dev/null +++ b/build/ivy.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/libs/dropwizard-elasticsearch-1.2.5-1-SNAPSHOT.jar b/build/libs/dropwizard-elasticsearch-1.2.5-1-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..7668c43da1e1d376a52af57c7e36f532abc0c28d GIT binary patch literal 9976 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 literal 0 HcmV?d00001 diff --git a/build/poms/pom-default.xml b/build/poms/pom-default.xml new file mode 100644 index 0000000..42c9afa --- /dev/null +++ b/build/poms/pom-default.xml @@ -0,0 +1,34 @@ + + + 4.0.0 + io.dropwizard.modules + dropwizard-elasticsearch + 1.2.5-1-SNAPSHOT + + + io.dropwizard + dropwizard-core + 1.2.5 + compile + + + org.elasticsearch.client + transport + 5.6.10 + compile + + + junit + junit + 4.12 + test + + + org.mockito + mockito-core + 2.19.0 + test + + + diff --git a/build/tmp/jar/MANIFEST.MF b/build/tmp/jar/MANIFEST.MF new file mode 100644 index 0000000..58630c0 --- /dev/null +++ b/build/tmp/jar/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..08e628fb353896a8f9026b1a4ed042f1e949107e GIT binary patch literal 54212 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
  • I>8zTE-|?JQyi(0<%@Wl&Dpjfu)|3U>)oQ%V1Lw@U;X_x}XR0 zPg2a47;F=KX*RKTAEEymxujBO99NnCX%X}sl0{K5LZU=ly;<&)y;?zQvC|dV3(x5i zs9nyx@dhS5?vSr97Qs`t5TxbXAS^lXP2;Fm!fiBIo08x}eSqN*RwSrgYGt@~x7-+C zrqmf5V&$~$>qWyFc2mix1mof!c1XcCp`~>P`|7j~+5{1~5M%XjwZPOLgZC%GgwE*% zJBt^s;y7{CMEMhVA3Ej z8T}L08nNYwFj?O>lu5Wwzq_GCd}D*u4K8ph31Z#kwUX@^)+qKd>r3#p#J%o#wo=G8 zL|ee8M2Yr*K06oPP}Z|^SIedFTXo2WFD9!Sl|Y*ol`3uG2Ui|WHo?SiZxJqCK1WPf zoty3@+=!u$3PMonqYWE2&dE#;zgKo!kcNcY0{1)C!rZrx&hQc3dzh1sZ+PQ6Z)RVa z0`bmB04?opZ9y!}siyNXmsYXThZjy?sMqgLAq?g=W>@bKu0Hlir}a=1pJl;Ja)pEY z<+M%?AY>L@oL#y`8M2ui7HWm`dIiv-%kFnRG7Wn;XUA6WAsFnJqzf&Rh&`j26*~%Y2R-e%g*<$R2!n zjbeB;3&|WOqq*O57)Q{9L83}ndmywFvIRp*P7DI@K4Bmjp2z#I;=0&x5lK{=T^hN| z#ir~;X&tkaK3aF9r_(cFOu%$ANbWHi*?$_B41cwux9z53Dw7EzhX7<2K7OP5*602V^M(_g$ADGER2EipD8s>J|!ityY1Bf+HzXg=~ z#p*ZNrLHl-bIFf{`K6rgP=bjF>PvhPX)(xxD-ICt+xEW4Dg)US(O(q{Cl>s>RNQx4 z%!_w+GsB?SVks;{CK3hRZsG_0G;ey(x0@SJ)9&*9;UcjV3XAt7^^JxagJBF0!cw4jT^r;L(BFM2FJ@eRyKA6^c2)e656oT&} zMQ8U@s)vs(47ucoD12y)2ZqJhB@_Dc%9FpIpk|)2WHM)DAs6yQY&2LW8embrF4pO- zrK*u8cBv<=` zuUhsSeM&+xiQv2t=xQVsxRB+7g912J$4`d|SCt)~QX$=rK|;v-YQ5ec4?C6%n3=NM zFQ;C%yBsZ8EuZy|(yaiY9uIXOZoy-kj#p>tje7@@en{d>P)sqG>ko}o4D_Mh9nelC zO338Z9{X&$q>EWB*6%vaU7@y&Blm%lQO(Az>osDA!YxG+c+iBA*ikyzgu?}>EN4WG zn>#T#QX{^g?yL<>r8(?M15|^mO&K$CDuR(Fc*OuF&&ab9onOu%_M;X~oeF_qBMM2Y=E7v1B6`j4awv zOmlm<%BI_-`E403dbcy(2Tc5nkI*TY3%1yuI#+?l*oHUhos2vJej@AWJgV>-(2^}W z^U3-qYKZR|!5*bv^h1?{QVqz9#bg?TTH|cIu@gQK3gRUavC%HH_DQ+`ZoWWLGj}^a zT53+<@ngtNe>tN5#cnf$sNzGrfZO0JBsxUbtZ5VX%m={^QHG)Z=*^9!O_YICanx&6 zB^NT1x*1Dsq_@i?1p={Lje_{(wxt8Buf_+7gWSHF6yp(RLIrHSDZ=ZSBO^n}b_GsbhYxq>_mJK$W#rL4@bH{9Cnf^9nW@-h4EaQmg1vPR zXn>muEF|=Wx>~|9M5=bF(uY%$33`m-i5lY+%wUxZhS`Sd0sR`zh90K~hVevOybZ1U z8U*$j6`B+zuEVx8kFUDBi>;j--7C7X%$prdSxG^;$_=McWu2!B2Ht!sw`u7LAiXCn z8gRs7jMBPE_-5X^Mf`^PcCoOv{eZn-uC8f2*YSK83kPMq?`Y$ag)q7RFzpSRF<_vlg<(Sn(!fjj9hM zg9oloPI!YUM~HDBq++uNv`e1hTy$M=J`!F9% zu-OHcjYhs1!c7v7cO%qDoP)R(lqb}2f*FX=HQ?)Q!sxqKR)3w|cV5DuhysrAB>~-@ z;U8BGfPJ=ug@L8Lu(O`QeNKoQ?Ml_N8yE z%D=V8E{I7MVr1GgYocoW4(v|BATEhU>#Mr>HDmF13FYMB_y%GXZWtM6j!|bpcuCl= zgJavbkjM8X+e?<97())p^)-kpBWdVdes!9IVptp!%N#mz& zU83~w{;NHSRA&Oh{Ya<2!ET9+k;Rxe0|79#Ng-!@9NGw!i8+$1eKg|6#>F2s5bF}1 zZwuhaBwi<9&sZ~Lspg2E=c9q;w+|_FR5Tqg+zieY1HYH^*AocHI*n3B+V>p(I4Ja4 zuf9BLP+K0Ae;CKFsK zqtVh1mP=d9!N@UcQ)U&u0xwam~=HhXF0J0GNo_ z{;^g5w21ui(FIsatbZ0Zi&y-QYOAN^?6@2!rj`76a3MGxD+6yrIHWXPbPW1rqGLU* zVVYgF3CEtyHH5XWcO7E7SNl=K84Ij-RT680Zh*ZX$7s`KYn@kx=RL%mj>vH4E&a0- zWrQtKngPUW3O(pSWGxAmn3(ljR4s9pjqeW7!q7O#T1@s9m~1bc8E zXx$S|sS%({*JXG~d00hrEW?YlxPC{1`8ysg8i7O0)kbqlpDc0BBDcQ0@OxWNvqYJk z@@>ywrDRS|zz%RKnpLtIm^{Hkq=er?l&R zuOD#q&)lAZVcb#v4xx@*kEL`phs>X_kV=hXv3e(uyi7&0hUc(3EWlvi8%SePp;fQ3 zWD7saKF*~V)k}yPzRJ_>tTDrG`99nFsHxGhI?EPLP%b|gJ<1A}N>lUFmyo##a8*Mc zN5Nq^wqcP}TL;rJ$|}Xa!21=yAHT_{V$S|Jyz-D}MDK@jnC%MrI66I_cB?jKZjUnu zRHE+*xl2F?3Th@5(P^)PzWadz`<)%GOE?A)#l{19>u`f*@=?j{+@%l1)>RCp5!nDA z!*Yq9kT<^~Iv8;*n(2kjyJ~l{6yo-CpAVf01H)jT7)uB1jB3WE50Yy-gNnM3D_eyY zUp(c=&<%Gl+|k`22}!o#T&n$UPw+{gRZMnNBgZHqgNdRrMj02uyIk8u3X$V9Up&?y z?g}%Y$E*%UXGFz*qy{)kIEkbS_Y2Cv?Ul*U)i)aaF;0FLDS678_g^sTh~tPOBzSA& zZupB;dUu|kh(`~cC2#{qh&*6f`kQ&{zw$Xh*$$t%9K|dAA^Haj8%A9pY*D^4hOn7y zzwkO)Kn!Z!SfB)Hq6cs&H*2At2q&29)wPmC$2{Icuo}gR$b%~2U-nrpeh zYB1m+2owt=#hs|B5B9APpD=qh%|kN~0q}2G_0=)c>KN)=fn-2!+j$?4RYn=`jl-v& z!bG25%cI)mU2{9zSarX3=`LpmX^?NlzP1T#&Syw_0;=+js!&tRW&x=pSdmErnADGs ziUhUF=N9j##k)Ez0*4%CC06eEwZxyIr7flLGMdP zVxZYs$+t24c~km$3$Dn&n)!40*7CUqW>hEkDrq-7KAWr&9=nxM0h2U9)d7eA@bjmh zJwW#EpSA2apDWlyK|uj+*j`EjF#eYS0r`M*9ZbyiX>ASk3{0%;e^$kpq@@}e8a<^R zmX@HcVVPkXX95Fw=s`lke{lJV2FM6-+z0#)41x*-C?5bEG(%6~2QpyX{3ii?yq+a# zVFi9#aTyVS?&e>!ftcrS@&o=@3GnmdWuMXyaj^eoljfHZ7ZH|McqJ|JGr}prhvi3( z{}KaC6hEajz_XRD(O)>9=KvT+e@Y#I=N~!#)b;--svmXml)eETf6Dl0%z<=ezz^{gB;bh} z=C`QgLIB+yb1NPFKbBh0@pP|DsCNJ>1nd`o_(MEFq5-PwH>G?7h^oMEXJ=rcYyMxs zz2}&EbB8H508B)^QfLw>D?J@^ArpW&nu)H%Q^=F&uW{*G)`0-%ZG3>9#{5J9 zc!J0IEz5svngpOy=YC_1iNro<(03hLi3OnZ00t5LUl=U$e#`LO8&(Vu zR^o4)A-xpyY6{Q{tbhm>f9)zVfM0*p3;>Z^dmVFgl0PLxpO^N?RW0!dP}*rgX@A6% zc}lu~@%tM*0V^x}9}0BVKSF&1cC}9ujnAQtef14<0eI7ZpO;U#fTy%qzlHu^RsT&{ z^Ihnhl>luA1o*W7m`|UQH{EXmrL2tpw!1CetWaVCG~ky3or~xR3GjphFp~b}#s6En z-w!zm3xX6pz@)Gbs5QdBz?lNHuzmygXS@6!?RnVMC&1pfzeN-MeGt~?P4Ya*)e~-| z=0D*6F67m7=;wino}iVqe+&KR%=nuyMbDw1$Ax)s`?p`#p8fd`B!q>zi>X2QGVjYvHcgE zznNuzRR43q;wMx{yMKZDMbE4;>f=@)p?!OTIRQ^Bv)jvxNJ|}yw!S+N( z=ly?^{eCn*zbyNNIUoCfW0L&S)!FC8e}3!ciRv!p7pmv0j-Tr8|7iQ?H$k3gMga@< zXS3%|uzxnm-`@-Q<$azxw?7dXWc@<)AN0R-b$^ch++p|$*(~?}M*e+6KX+Do!W1n1 z1@qTx`3Kjf=cRw{6!OF*T=6fM{=r4$In(o_<0qz&nt#Fcf6ju>&k&#RSL^--{y&{4 zK7WtPZLk<6$>h}ja i9&Y!40HvbdV-x$)L!#}qHKfx=u{uBJ4~P9J|E`R@e(Q?LF%=8)&6ktcYNuKz9R{?1VH-?IMKEb_Be servers = Collections.emptyList(); - - @JsonProperty - @NotEmpty - private String clusterName = "elasticsearch"; - - @JsonProperty - @NotNull - private Map settings = Collections.emptyMap(); - - @JsonProperty - private String settingsFile = null; + private List servers = Collections.emptyList(); - public List getServers() { + public List getServers() { return servers; } - public String getClusterName() { - return clusterName; + public List getHttpHosts() { + ArrayList httpHosts=new ArrayList<>(); + getServers().forEach(hostAndPort -> { + httpHosts.add(HttpHost.create(hostAndPort)); + }); + return httpHosts; } - public Map getSettings() { - return settings; - } - - public String getSettingsFile() { - return settingsFile; - } } diff --git a/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java b/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java index eccc745..42c423a 100644 --- a/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java +++ b/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java @@ -1,72 +1,36 @@ package io.dropwizard.elasticsearch.managed; -import com.google.common.io.Resources; -import io.dropwizard.elasticsearch.config.EsConfiguration; -import io.dropwizard.elasticsearch.util.TransportAddressHelper; -import io.dropwizard.lifecycle.Managed; +import org.apache.http.HttpHost; import org.elasticsearch.client.Client; -import org.elasticsearch.client.transport.TransportClient; +import org.elasticsearch.client.RestClient; +import org.elasticsearch.client.RestClientBuilder; +import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.settings.Settings; -import org.elasticsearch.common.transport.TransportAddress; import org.elasticsearch.node.Node; -import org.elasticsearch.transport.client.PreBuiltTransportClient; -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.file.Path; -import java.nio.file.Paths; +import java.util.stream.Collectors; + +import io.dropwizard.elasticsearch.config.EsConfiguration; +import io.dropwizard.lifecycle.Managed; import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Strings.isNullOrEmpty; +import static org.apache.commons.lang3.ArrayUtils.toArray; /** - * A Dropwizard managed Elasticsearch {@link Client}. Depending on the {@link EsConfiguration} a Node Client or - * a {@link TransportClient} a is being created and its lifecycle is managed by Dropwizard. + * A Dropwizard managed Elasticsearch {@link RestHighLevelClient}. + * Depending on the {@link EsConfiguration} a High Level Rest Client + * a {@link RestHighLevelClient} a is being created and its lifecycle is managed by Dropwizard. * - * @see Node Client - * @see Transport Client */ public class ManagedEsClient implements Managed { - private Node node = null; - private Client client = null; - - /** - * Create a new managed Elasticsearch {@link Client}. A {@link TransportClient} is being created with {@link EsConfiguration#servers} - * as transport addresses. - * - * @param config a valid {@link EsConfiguration} instance - */ + private RestHighLevelClient client = null; public ManagedEsClient(final EsConfiguration config) { checkNotNull(config, "EsConfiguration must not be null"); - - final Settings.Builder settingsBuilder = Settings.builder(); - if (!isNullOrEmpty(config.getSettingsFile())) { - Path path = Paths.get(config.getSettingsFile()); - if (!path.toFile().exists()) { - try { - final URL url = Resources.getResource(config.getSettingsFile()); - path = new File(url.toURI()).toPath(); - settingsBuilder.loadFromPath(path); - } catch (URISyntaxException | NullPointerException e) { - throw new IllegalArgumentException("settings file cannot be found", e); - } catch (IOException e){ - throw new IllegalStateException("settings file cannot be loaded", e); - } - } - } - - final Settings settings = settingsBuilder - .put(config.getSettings()) - .put("cluster.name", config.getClusterName()) - .build(); - - - final TransportAddress[] addresses = TransportAddressHelper.fromHostAndPorts(config.getServers()); - this.client = new PreBuiltTransportClient(settings).addTransportAddresses(addresses); - + this.client = + new RestHighLevelClient( + RestClient.builder(config.getHttpHosts().toArray(new HttpHost[0])) + ); } /** @@ -74,7 +38,7 @@ public ManagedEsClient(final EsConfiguration config) { * * @param client an initialized {@link Client} instance */ - public ManagedEsClient(Client client) { + public ManagedEsClient(RestHighLevelClient client) { this.client = checkNotNull(client, "Elasticsearch client must not be null"); } @@ -103,12 +67,12 @@ public void stop() throws Exception { * * @return a valid Elasticsearch {@link Client} instance */ - public Client getClient() { + public RestHighLevelClient getClient() { return client; } - private void closeClient() { + private void closeClient() throws Exception { if (null != client) { client.close(); } diff --git a/src/main/java/io/dropwizard/elasticsearch/util/TransportAddressHelper.java b/src/main/java/io/dropwizard/elasticsearch/util/TransportAddressHelper.java deleted file mode 100644 index 615d30a..0000000 --- a/src/main/java/io/dropwizard/elasticsearch/util/TransportAddressHelper.java +++ /dev/null @@ -1,48 +0,0 @@ -package io.dropwizard.elasticsearch.util; - -import com.google.common.net.HostAndPort; -import org.elasticsearch.common.transport.InetSocketTransportAddress; -import org.elasticsearch.common.transport.TransportAddress; - -import java.net.InetSocketAddress; -import java.util.List; - -/** - * Helper class for converting Guava {@link HostAndPort} objects to Elasticsearch {@link TransportAddress}. - */ -public class TransportAddressHelper { - private static final int DEFAULT_PORT = 9300; - - /** - * Convert a {@link HostAndPort} instance to {@link TransportAddress}. If the {@link HostAndPort} instance doesn't - * contain a port the resulting {@link TransportAddress} will have {@link #DEFAULT_PORT} as port. - * - * @param hostAndPort a valid {@link HostAndPort} instance - * @return a {@link TransportAddress} equivalent to the provided {@link HostAndPort} instance - */ - public static TransportAddress fromHostAndPort(final HostAndPort hostAndPort) { - InetSocketAddress address = new InetSocketAddress(hostAndPort.getHost(), hostAndPort.getPortOrDefault(DEFAULT_PORT)); - return new InetSocketTransportAddress(address); - } - - /** - * Convert a list of {@link HostAndPort} instances to an array of {@link TransportAddress} instances. - * - * @param hostAndPorts a {@link List} of valid {@link HostAndPort} instances - * @return an array of {@link TransportAddress} instances - * @see #fromHostAndPort(com.google.common.net.HostAndPort) - */ - public static TransportAddress[] fromHostAndPorts(final List hostAndPorts) { - if (hostAndPorts == null) { - return new TransportAddress[0]; - } else { - TransportAddress[] transportAddresses = new TransportAddress[hostAndPorts.size()]; - - for (int i = 0; i < hostAndPorts.size(); i++) { - transportAddresses[i] = fromHostAndPort(hostAndPorts.get(i)); - } - - return transportAddresses; - } - } -} diff --git a/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java b/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java index 47d174a..e120535 100644 --- a/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java +++ b/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java @@ -1,30 +1,31 @@ package io.dropwizard.elasticsearch.managed; -import com.google.common.net.HostAndPort; -import io.dropwizard.configuration.ConfigurationException; -import io.dropwizard.configuration.ConfigurationFactory; -import io.dropwizard.configuration.DefaultConfigurationFactoryFactory; -import io.dropwizard.elasticsearch.config.EsConfiguration; -import io.dropwizard.elasticsearch.util.TransportAddressHelper; -import io.dropwizard.jackson.Jackson; -import io.dropwizard.lifecycle.Managed; -import org.elasticsearch.client.Client; -import org.elasticsearch.client.node.NodeClient; -import org.elasticsearch.client.transport.TransportClient; -import org.elasticsearch.node.Node; +import org.apache.http.HttpHost; +import org.elasticsearch.client.RestClient; +import org.elasticsearch.client.RestHighLevelClient; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; -import javax.validation.Validation; -import javax.validation.Validator; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; +import javax.validation.Validation; +import javax.validation.Validator; + +import io.dropwizard.configuration.ConfigurationException; +import io.dropwizard.configuration.ConfigurationFactory; +import io.dropwizard.configuration.DefaultConfigurationFactoryFactory; +import io.dropwizard.elasticsearch.config.EsConfiguration; +import io.dropwizard.jackson.Jackson; +import io.dropwizard.lifecycle.Managed; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -32,6 +33,7 @@ /** * Unit tests for {@link ManagedEsClient}. */ +@RunWith(MockitoJUnitRunner.class) public class ManagedEsClientTest { private final Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); private final ConfigurationFactory configFactory = @@ -45,77 +47,57 @@ public void ensureEsConfigurationIsNotNull() { @Test(expected = NullPointerException.class) public void ensureClientIsNotNull() { - new ManagedEsClient((Client) null); + new ManagedEsClient((RestHighLevelClient) null); } @Test public void stopShouldCloseTheClient() throws Exception { - Client client = mock(Client.class); + RestHighLevelClient client = + mock(RestHighLevelClient.class); Managed managed = new ManagedEsClient(client); - + // to stub the final result it is required to have the + // /src/test/resources/mockito-extensions/org.mockiot.plugins.MockMaker file + // with `mock-maker-inline` as context + doNothing().when(client).close(); + assertNotNull(client); managed.start(); managed.stop(); - verify(client).close(); + assertNotNull(client); } @Test - public void transportClientShouldBeCreatedFromConfig() throws URISyntaxException, IOException, ConfigurationException { - URL configFileUrl = this.getClass().getResource("/transport_client.yml"); + public void highLevelRestClientShouldBeCreatedFromConfig() throws URISyntaxException, IOException, ConfigurationException { + URL configFileUrl = this.getClass().getResource("/rest_client.yml"); File configFile = new File(configFileUrl.toURI()); EsConfiguration config = configFactory.build(configFile); ManagedEsClient managedEsClient = new ManagedEsClient(config); - Client client = managedEsClient.getClient(); + RestHighLevelClient restHighLevelClient = managedEsClient.getClient(); - assertNotNull(client); - assertTrue(client instanceof TransportClient); + assertNotNull(restHighLevelClient); - final TransportClient transportClient = (TransportClient) client; - assertEquals(3, transportClient.transportAddresses().size()); + assertEquals(3, restHighLevelClient.getLowLevelClient().getNodes().size()); assertEquals( - TransportAddressHelper.fromHostAndPort(HostAndPort.fromParts("127.0.0.1", 9300)), - transportClient.transportAddresses().get(0)); + "127.0.0.1", + restHighLevelClient.getLowLevelClient().getNodes().get(0).getHost().getHostName()); + assertEquals( - TransportAddressHelper.fromHostAndPort(HostAndPort.fromParts("127.0.0.1", 9301)), - transportClient.transportAddresses().get(1)); + 9200, + restHighLevelClient.getLowLevelClient().getNodes().get(0).getHost().getPort()); assertEquals( - TransportAddressHelper.fromHostAndPort(HostAndPort.fromParts("127.0.0.1", 9302)), - transportClient.transportAddresses().get(2)); - } - - @Test - public void managedClientShouldUseCustomElasticsearchConfig() throws URISyntaxException, IOException, ConfigurationException { - URL configFileUrl = this.getClass().getResource("/custom_settings_file.yml"); - File configFile = new File(configFileUrl.toURI()); - EsConfiguration config = configFactory.build(configFile); - - ManagedEsClient managedEsClient = new ManagedEsClient(config); - Client client = managedEsClient.getClient(); - - assertNotNull(client); - assertTrue(client instanceof TransportClient); - - TransportClient nodeClient = (TransportClient) client; - assertEquals(config.getClusterName(), nodeClient.settings().get("cluster.name")); - assertEquals("19300-19400", nodeClient.settings().get("transport.tcp.port")); - } - - @Test - public void managedClientObeysPrecedenceOfSettings() throws URISyntaxException, IOException, ConfigurationException { - URL configFileUrl = this.getClass().getResource("/custom_settings_precedence.yml"); - File configFile = new File(configFileUrl.toURI()); - EsConfiguration config = configFactory.build(configFile); + "127.0.0.1", + restHighLevelClient.getLowLevelClient().getNodes().get(1).getHost().getHostName()); - ManagedEsClient managedEsClient = new ManagedEsClient(config); - Client client = managedEsClient.getClient(); - - assertNotNull(client); - assertTrue(client instanceof TransportClient); + assertEquals( + 9201, + restHighLevelClient.getLowLevelClient().getNodes().get(1).getHost().getPort()); + assertEquals( + "127.0.0.1", + restHighLevelClient.getLowLevelClient().getNodes().get(2).getHost().getHostName()); - TransportClient nodeClient = (TransportClient) client; - assertEquals(config.getClusterName(), nodeClient.settings().get("cluster.name")); - assertEquals("29300-29400", nodeClient.settings().get("transport.tcp.port")); - assertEquals("target/data/yaml", nodeClient.settings().get("path.home")); + assertEquals( + 9202, + restHighLevelClient.getLowLevelClient().getNodes().get(2).getHost().getPort()); } } diff --git a/src/test/java/io/dropwizard/elasticsearch/util/TransportAddressHelperTest.java b/src/test/java/io/dropwizard/elasticsearch/util/TransportAddressHelperTest.java deleted file mode 100644 index d9699c5..0000000 --- a/src/test/java/io/dropwizard/elasticsearch/util/TransportAddressHelperTest.java +++ /dev/null @@ -1,75 +0,0 @@ -package io.dropwizard.elasticsearch.util; - -import com.google.common.collect.ImmutableList; -import com.google.common.net.HostAndPort; -import org.elasticsearch.common.transport.InetSocketTransportAddress; -import org.elasticsearch.common.transport.TransportAddress; -import org.junit.Test; - -import java.util.Collections; -import java.util.List; - -import static org.junit.Assert.assertEquals; - -/** - * Unit tests for {@link TransportAddressHelper}. - */ -public class TransportAddressHelperTest { - - private static final int ES_DEFAULT_PORT = 9300; - - @Test(expected = NullPointerException.class) - public void fromHostAndPortWithNullShouldFail() { - TransportAddressHelper.fromHostAndPort(null); - } - - @Test - public void fromHostAndPortsWithNullShouldReturnEmptyArray() { - TransportAddress[] result = TransportAddressHelper.fromHostAndPorts(null); - - assertEquals(0, result.length); - } - - @Test - public void fromHostAndPortsWithEmptyListShouldReturnEmptyArray() { - TransportAddress[] result = TransportAddressHelper.fromHostAndPorts(Collections.emptyList()); - - assertEquals(0, result.length); - } - - @Test - public void fromHostAndPortWithoutPortShouldUseDefaultPort() { - InetSocketTransportAddress result = (InetSocketTransportAddress) TransportAddressHelper - .fromHostAndPort(HostAndPort.fromString("localhost")); - - assertEquals("localhost", result.address().getHostName()); - assertEquals(ES_DEFAULT_PORT, result.address().getPort()); - } - - @Test - public void fromHostAndPortWithCorrectDataShouldSucceed() { - InetSocketTransportAddress result = (InetSocketTransportAddress) TransportAddressHelper - .fromHostAndPort(HostAndPort.fromParts("localhost", 1234)); - - assertEquals("localhost", result.address().getHostName()); - assertEquals(1234, result.address().getPort()); - } - - @Test - public void fromHostAndPostWithCorrectDataShouldSucceed() { - final List hostAndPorts = ImmutableList.of( - HostAndPort.fromParts("example.net", 1234), - HostAndPort.fromParts("example.com", 5678), - HostAndPort.fromString("example.org") - ); - final TransportAddress[] result = TransportAddressHelper.fromHostAndPorts(hostAndPorts); - - assertEquals(3, result.length); - - for (int i = 0; i < result.length; i++) { - final InetSocketTransportAddress transportAddress = (InetSocketTransportAddress) result[i]; - assertEquals(hostAndPorts.get(i).getHost(), transportAddress.address().getHostName()); - assertEquals(hostAndPorts.get(i).getPortOrDefault(ES_DEFAULT_PORT), transportAddress.address().getPort()); - } - } -} diff --git a/src/test/resources/custom_settings_file.yml b/src/test/resources/custom_settings_file.yml deleted file mode 100644 index 8d8a34e..0000000 --- a/src/test/resources/custom_settings_file.yml +++ /dev/null @@ -1,2 +0,0 @@ -clusterName: dropwizard_elasticsearch_test -settingsFile: elasticsearch.yml \ No newline at end of file diff --git a/src/test/resources/custom_settings_precedence.yml b/src/test/resources/custom_settings_precedence.yml deleted file mode 100644 index 7939520..0000000 --- a/src/test/resources/custom_settings_precedence.yml +++ /dev/null @@ -1,6 +0,0 @@ -clusterName: dropwizard_elasticsearch_test -settingsFile: elasticsearch_precedence.yml -settings: - cluster.name: settingsYaml - transport.tcp.port: 29300-29400 - path.home: "target/data/yaml" \ No newline at end of file diff --git a/src/test/resources/elasticsearch.yml b/src/test/resources/elasticsearch.yml deleted file mode 100644 index ce8c5a2..0000000 --- a/src/test/resources/elasticsearch.yml +++ /dev/null @@ -1,2 +0,0 @@ -transport.tcp.port: 19300-19400 -path.home: "target/data" \ No newline at end of file diff --git a/src/test/resources/elasticsearch_precedence.yml b/src/test/resources/elasticsearch_precedence.yml deleted file mode 100644 index 467e0f3..0000000 --- a/src/test/resources/elasticsearch_precedence.yml +++ /dev/null @@ -1,3 +0,0 @@ -cluster.name: settingsFile -transport.tcp.port: 19300-19400 -path.home: "target/data/settings" \ No newline at end of file diff --git a/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 0000000..1f0955d --- /dev/null +++ b/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline diff --git a/src/test/resources/rest_client.yml b/src/test/resources/rest_client.yml new file mode 100644 index 0000000..a6b5b6a --- /dev/null +++ b/src/test/resources/rest_client.yml @@ -0,0 +1,4 @@ +servers: + - http://127.0.0.1:9200 + - http://127.0.0.1:9201 + - http://127.0.0.1:9202 diff --git a/src/test/resources/transport_client.yml b/src/test/resources/transport_client.yml deleted file mode 100644 index a90d621..0000000 --- a/src/test/resources/transport_client.yml +++ /dev/null @@ -1,5 +0,0 @@ -clusterName: dropwizard_elasticsearch_test -servers: - - 127.0.0.1 - - 127.0.0.1:9301 - - 127.0.0.1:9302 \ No newline at end of file diff --git a/src/test/resources/transport_client_with_empty_server_list.yml b/src/test/resources/transport_client_with_empty_server_list.yml deleted file mode 100644 index ef0398c..0000000 --- a/src/test/resources/transport_client_with_empty_server_list.yml +++ /dev/null @@ -1,2 +0,0 @@ -nodeClient: false -clusterName: dropwizard_elasticsearch_test \ No newline at end of file From 5ebc6e7fa142445e8f3f6cfc978ff68c7ff79870 Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Sun, 26 May 2019 02:35:48 +0200 Subject: [PATCH 10/22] udpate readme and jenkinsfile --- Jenkinsfile | 16 ++- README.md | 37 ++---- pom.xml | 321 ---------------------------------------------------- 3 files changed, 24 insertions(+), 350 deletions(-) delete mode 100644 pom.xml diff --git a/Jenkinsfile b/Jenkinsfile index 1bf7837..1708100 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -19,7 +19,11 @@ pipeline { stage('Build and test') { steps { updateGitlabCommitStatus name: 'pipeline', state: 'running' - sh "./gradlew -g=/efs/${PROJECT_NAME} -I /efs/init.gradle -Pbranch=${env.GIT_BRANCH} -PbuildNumber=${env.BUILD_NUMBER} clean build uploadArchives" + sh """./gradlew -g=/efs/${PROJECT_NAME} \ + -I /home/jenkins/gradle/init.gradle \ + -Pbranch=${env.GIT_BRANCH} \ + -PbuildNumber=${env.BUILD_NUMBER} \ + clean build""" } post { failure { @@ -30,6 +34,16 @@ pipeline { } } } + stage('upload archives') { + steps { + sh """./gradlew -g=/efs/${PROJECT_NAME} \ + -I /home/jenkins/gradle/init.gradle \ + -Pbranch=${env.GIT_BRANCH} \ + -PbuildNumber=${env.BUILD_NUMBER} \ + uploadArchives""" + + } + } } post { failure { diff --git a/README.md b/README.md index 7270e7c..610d5e6 100644 --- a/README.md +++ b/README.md @@ -5,15 +5,15 @@ Dropwizard Elasticsearch [![Coverage Status](https://img.shields.io/coveralls/dropwizard/dropwizard-elasticsearch.svg)](https://coveralls.io/r/dropwizard/dropwizard-elasticsearch) [![Maven Central](https://img.shields.io/maven-central/v/io.dropwizard.modules/dropwizard-elasticsearch.svg)](http://mvnrepository.com/artifact/io.dropwizard.modules/dropwizard-elasticsearch) -A set of classes for using [Elasticsearch][1] (version 2.3.0 and higher) in a [Dropwizard][2] application. +A set of classes for using [Elasticsearch][1] (version 7.1.0 and higher) in a [Dropwizard][2] application. The package provides a [lifecycle-managed][3] client class (`ManagedEsClient`), a configuration class with the most common options (`EsConfiguration`), and some [health checks][4] which can instantly be used in any Dropwizard application. [1]: http://www.elasticsearch.org/ -[2]: http://dropwizard.io/1.2.0/docs -[3]: http://dropwizard.io/1.2.0/docs/manual/core.html#managed-objects -[4]: http://dropwizard.io/1.2.0/docs/manual/core.html#health-checks +[2]: http://dropwizard.io/1.3.0/docs +[3]: http://dropwizard.io/1.3.0/docs/manual/core.html#managed-objects +[4]: http://dropwizard.io/1.3.0/docs/manual/core.html#health-checks Usage @@ -43,33 +43,14 @@ Configuration The following configuration settings are supported by `EsConfiguration`: -* `nodeClient`: When `true`, `ManagedEsClient` will create a `NodeClient`, otherwise a `TransportClient`; default: `true` * `servers`: A list of servers for usage with the created TransportClient if `nodeClient` is `false` -* `clusterName`: The name of the Elasticsearch cluster; default: "elasticsearch" -* `settings`: Any additional settings for Elasticsearch, see [Configuration](https://www.elastic.co/guide/en/elasticsearch/reference/2.4/setup-configuration.html) -* `settingsFile`: Any additional settings file for Elasticsearch, see [Configuration](https://www.elastic.co/guide/en/elasticsearch/reference/2.4/setup-configuration.html) -An example configuration file for creating a Node Client could like this: +An example configuration file for creating a High Level Rest Client could like this: - clusterName: MyClusterName - settings: - node.name: MyCustomNodeName - -The order of precedence is: `nodeClient`/`servers`/`clusterName` > `settings` > `settingsFile`, meaning that -any setting in `settingsFile` can be overwritten with `settings` which in turn get overwritten by the specific settings -like `clusterName`. - -Maven Artifacts ---------------- - -This project is available on Maven Central. To add it to your project simply add the following dependencies to your -`pom.xml`: - - - io.dropwizard.modules - dropwizard-elasticsearch - 1.2.0-1 - + servers: + - http://127.0.0.1:9200 + - http://127.0.0.1:9201 + - http://127.0.0.1:9202 Support diff --git a/pom.xml b/pom.xml deleted file mode 100644 index d7f5888..0000000 --- a/pom.xml +++ /dev/null @@ -1,321 +0,0 @@ - - - 4.0.0 - - - 3.0.0 - - - io.dropwizard.modules - dropwizard-elasticsearch - 1.2.5-1-SNAPSHOT - jar - - Dropwizard Elasticsearch Bundle - Addon bundle for Dropwizard to support Elasticsearch - https://github.com/dropwizard/dropwizard-elasticsearch - - - - Apache 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - scm:git:git@github.com:dropwizard/dropwizard-elasticsearch.git - scm:git:https://github.com/dropwizard/dropwizard-elasticsearch.git - https://github.com/dropwizard/dropwizard-elasticsearch - HEAD - - - - Travis CI - https://travis-ci.org/dropwizard/dropwizard-elasticsearch - - - - GitHub Issues - https://github.com/dropwizard/dropwizard-elasticsearch/issues - - - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - - - dropwizard-elasticsearch - http://dropwizard.github.io/dropwizard-elasticsearch/${project.version} - - - - - - j.schalanda - Jochen Schalanda - jochen@schalanda.name - - - - - UTF-8 - UTF-8 - 1.8 - 1.8 - 1.2.5 - 5.6.10 - - - - - - io.dropwizard - dropwizard-bom - ${dropwizard.version} - pom - import - - - - - - - io.dropwizard - dropwizard-core - - - org.elasticsearch.client - transport - ${elasticsearch.version} - - - junit - junit - 4.12 - test - - - org.mockito - mockito-core - 2.19.0 - test - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.7.0 - - - org.apache.maven.plugins - maven-source-plugin - 3.0.1 - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.10.4 - - - org.apache.maven.plugins - maven-site-plugin - 3.6 - - - org.apache.maven.plugins - maven-clean-plugin - 3.0.0 - - - org.apache.maven.plugins - maven-deploy-plugin - 2.8.2 - - - org.apache.maven.plugins - maven-install-plugin - 2.5.2 - - - org.apache.maven.plugins - maven-jar-plugin - 3.0.2 - - - org.apache.maven.plugins - maven-resources-plugin - 3.0.2 - - - org.apache.maven.plugins - maven-surefire-plugin - 2.20.1 - - - org.apache.maven.plugins - maven-project-info-reports-plugin - 2.9 - - - org.apache.maven.plugins - maven-release-plugin - 2.5.3 - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - com.github.github - site-maven-plugin - 0.12 - - - org.jacoco - jacoco-maven-plugin - 0.7.9 - - - org.eluder.coveralls - coveralls-maven-plugin - 4.3.0 - - - - - - - org.apache.maven.plugins - maven-site-plugin - - true - - - - com.github.github - site-maven-plugin - - ${project.version} - Creating site for ${project.name} ${project.version} - true - true - - - - - site - - site-deploy - - - - - org.jacoco - jacoco-maven-plugin - - - prepare-agent - - prepare-agent - - - - - - org.eluder.coveralls - coveralls-maven-plugin - - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - ${javadoc.doclint.none} - public - true - - - - html - - javadoc - - - - - - - - - - java8-disable-strict-javadoc - - [1.8,) - - - -Xdoclint:none - - - - release - - - - org.apache.maven.plugins - maven-source-plugin - - - attach-sources - - jar - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - ${javadoc.doclint.none} - - - - attach-javadocs - - jar - - - - - - org.apache.maven.plugins - maven-gpg-plugin - - - sign-artifacts - verify - - sign - - - - - - - - - From fc889bf1baf21d68cc78641dc098b9dbbeeb3730 Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Sun, 26 May 2019 02:52:54 +0200 Subject: [PATCH 11/22] combine dw and es version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 5a4a818..0ef60da 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -baseVersion=1.3.11 +baseVersion=1.3.11-7.1.0 buildNumber=SNAPSHOT From 2e96a0c967e4460327bb68618f334d016a4f0414 Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Sun, 26 May 2019 03:22:16 +0200 Subject: [PATCH 12/22] set default port 9200 --- .../dropwizard/elasticsearch/config/EsConfiguration.java | 8 ++++++-- .../dropwizard/elasticsearch/managed/ManagedEsClient.java | 7 +------ .../elasticsearch/managed/ManagedEsClientTest.java | 4 ---- src/test/resources/rest_client.yml | 2 +- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java b/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java index 04c4def..8012409 100644 --- a/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java +++ b/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java @@ -22,10 +22,14 @@ public List getServers() { return servers; } - public List getHttpHosts() { + public List getServersAsHttpHosts() { ArrayList httpHosts=new ArrayList<>(); getServers().forEach(hostAndPort -> { - httpHosts.add(HttpHost.create(hostAndPort)); + HttpHost httpHost = HttpHost.create(hostAndPort); + if (httpHost.getPort() < 0) { + httpHost = new HttpHost(httpHost.getHostName(), 9200); + } + httpHosts.add(httpHost); }); return httpHosts; } diff --git a/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java b/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java index 42c423a..fa5b173 100644 --- a/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java +++ b/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java @@ -3,18 +3,13 @@ import org.apache.http.HttpHost; import org.elasticsearch.client.Client; import org.elasticsearch.client.RestClient; -import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.RestHighLevelClient; -import org.elasticsearch.common.settings.Settings; import org.elasticsearch.node.Node; -import java.util.stream.Collectors; - import io.dropwizard.elasticsearch.config.EsConfiguration; import io.dropwizard.lifecycle.Managed; import static com.google.common.base.Preconditions.checkNotNull; -import static org.apache.commons.lang3.ArrayUtils.toArray; /** @@ -29,7 +24,7 @@ public ManagedEsClient(final EsConfiguration config) { checkNotNull(config, "EsConfiguration must not be null"); this.client = new RestHighLevelClient( - RestClient.builder(config.getHttpHosts().toArray(new HttpHost[0])) + RestClient.builder(config.getServersAsHttpHosts().toArray(new HttpHost[0])) ); } diff --git a/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java b/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java index e120535..8098a60 100644 --- a/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java +++ b/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java @@ -1,11 +1,8 @@ package io.dropwizard.elasticsearch.managed; -import org.apache.http.HttpHost; -import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import java.io.File; @@ -28,7 +25,6 @@ import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; /** * Unit tests for {@link ManagedEsClient}. diff --git a/src/test/resources/rest_client.yml b/src/test/resources/rest_client.yml index a6b5b6a..8f8f061 100644 --- a/src/test/resources/rest_client.yml +++ b/src/test/resources/rest_client.yml @@ -1,4 +1,4 @@ servers: - - http://127.0.0.1:9200 + - http://127.0.0.1 - http://127.0.0.1:9201 - http://127.0.0.1:9202 From 26bb7ffc93a9837c13efe6a00e9e6b30957f91d8 Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Sun, 26 May 2019 03:52:21 +0200 Subject: [PATCH 13/22] fix health check --- .../health/EsClusterHealthCheck.java | 17 ++- .../health/EsIndexDocsHealthCheck.java | 113 ------------------ .../health/EsIndexExistsHealthCheck.java | 25 ++-- .../health/EsClusterHealthCheckTest.java | 4 +- .../health/EsIndexDocsHealthCheckTest.java | 49 -------- .../health/EsIndexExistsHealthCheckTest.java | 11 +- 6 files changed, 34 insertions(+), 185 deletions(-) delete mode 100644 src/main/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.java delete mode 100644 src/test/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheckTest.java diff --git a/src/main/java/io/dropwizard/elasticsearch/health/EsClusterHealthCheck.java b/src/main/java/io/dropwizard/elasticsearch/health/EsClusterHealthCheck.java index dbdcad3..7764400 100644 --- a/src/main/java/io/dropwizard/elasticsearch/health/EsClusterHealthCheck.java +++ b/src/main/java/io/dropwizard/elasticsearch/health/EsClusterHealthCheck.java @@ -1,7 +1,12 @@ package io.dropwizard.elasticsearch.health; import com.codahale.metrics.health.HealthCheck; + +import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest; +import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse; import org.elasticsearch.client.Client; +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.cluster.health.ClusterHealthStatus; import static com.google.common.base.Preconditions.checkNotNull; @@ -12,7 +17,7 @@ * @see Admin Cluster Health */ public class EsClusterHealthCheck extends HealthCheck { - private final Client client; + private final RestHighLevelClient client; private final boolean failOnYellow; /** @@ -21,7 +26,7 @@ public class EsClusterHealthCheck extends HealthCheck { * @param client an Elasticsearch {@link Client} instance connected to the cluster * @param failOnYellow whether the health check should fail if the cluster health state is yellow */ - public EsClusterHealthCheck(Client client, boolean failOnYellow) { + public EsClusterHealthCheck(RestHighLevelClient client, boolean failOnYellow) { this.client = checkNotNull(client); this.failOnYellow = failOnYellow; } @@ -30,9 +35,9 @@ public EsClusterHealthCheck(Client client, boolean failOnYellow) { * Construct a new Elasticsearch cluster health check which will fail if the cluster health state is * {@link ClusterHealthStatus#RED}. * - * @param client an Elasticsearch {@link Client} instance connected to the cluster + * @param client an Elasticsearch {@link RestHighLevelClient} instance connected to the cluster */ - public EsClusterHealthCheck(Client client) { + public EsClusterHealthCheck(RestHighLevelClient client) { this(client, false); } @@ -47,7 +52,9 @@ public EsClusterHealthCheck(Client client) { */ @Override protected Result check() throws Exception { - final ClusterHealthStatus status = client.admin().cluster().prepareHealth().get().getStatus(); + ClusterHealthRequest request = new ClusterHealthRequest(); + ClusterHealthResponse response = client.cluster().health(request, RequestOptions.DEFAULT); + final ClusterHealthStatus status = response.getStatus(); if (status == ClusterHealthStatus.RED || (failOnYellow && status == ClusterHealthStatus.YELLOW)) { return Result.unhealthy("Last status: %s", status.name()); diff --git a/src/main/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.java b/src/main/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.java deleted file mode 100644 index dc561a7..0000000 --- a/src/main/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.java +++ /dev/null @@ -1,113 +0,0 @@ -package io.dropwizard.elasticsearch.health; - -import com.codahale.metrics.health.HealthCheck; -import com.google.common.collect.ImmutableList; -import org.elasticsearch.action.admin.indices.stats.IndexStats; -import org.elasticsearch.action.admin.indices.stats.IndicesStatsResponse; -import org.elasticsearch.client.Client; - -import java.util.ArrayList; -import java.util.List; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * A {@link HealthCheck} which checks if one or more indices in Elasticsearch contain a given number of documents - * in their primaries. - * - * @see Admin Indices Stats - */ -public class EsIndexDocsHealthCheck extends HealthCheck { - private static final String HEALTH_CHECK_NAME = "elasticsearch-index-documents"; - private static final long DEFAULT_DOCUMENT_THRESHOLD = 1L; - private final Client client; - private final String[] indices; - private final long documentThreshold; - - /** - * Construct a new Elasticsearch index document count health check. - * - * @param client an Elasticsearch {@link Client} instance connected to the cluster - * @param indices a {@link List} of indices in Elasticsearch which should be checked - * @param documentThreshold the minimal number of documents in an index - * @throws IllegalArgumentException if {@code indices} was {@literal null} or empty, - * or {@code documentThreshold} was less than 1 - */ - public EsIndexDocsHealthCheck(Client client, List indices, long documentThreshold) { - checkArgument(!indices.isEmpty(), "At least one index must be given"); - checkArgument(documentThreshold > 0L, "The document threshold must at least be 1"); - - this.client = checkNotNull(client); - this.indices = checkNotNull(indices.toArray(new String[indices.size()])); - this.documentThreshold = documentThreshold; - } - - - /** - * Construct a new Elasticsearch index document count health check. - * - * @param client an Elasticsearch {@link Client} instance connected to the cluster - * @param indices a {@link List} of indices in Elasticsearch which should be checked - */ - public EsIndexDocsHealthCheck(Client client, List indices) { - this(client, indices, DEFAULT_DOCUMENT_THRESHOLD); - } - - /** - * Construct a new Elasticsearch index document count health check. - * - * @param client an Elasticsearch {@link Client} instance connected to the cluster - * @param indexName the index in Elasticsearch which should be checked - * @param documentThreshold the minimal number of documents in an index - */ - public EsIndexDocsHealthCheck(Client client, String indexName, long documentThreshold) { - this(client, ImmutableList.of(indexName), documentThreshold); - } - - /** - * Construct a new Elasticsearch index document count health check. - * - * @param client an Elasticsearch {@link Client} instance connected to the cluster - * @param indexName the index in Elasticsearch which should be checked - */ - public EsIndexDocsHealthCheck(Client client, String indexName) { - this(client, indexName, DEFAULT_DOCUMENT_THRESHOLD); - } - - /** - * Perform a check of the number of documents in the Elasticsearch indices. - * - * @return if the Elasticsearch indices contain the minimal number of documents, a healthy - * {@link com.codahale.metrics.health.HealthCheck.Result}; otherwise, an unhealthy - * {@link com.codahale.metrics.health.HealthCheck.Result} with a descriptive error message or exception - * @throws Exception if there is an unhandled error during the health check; this will result in - * a failed health check - */ - @Override - protected Result check() throws Exception { - final IndicesStatsResponse indicesStatsResponse = client.admin().indices().prepareStats(indices).get(); - - final List indexDetails = new ArrayList(indices.length); - boolean healthy = true; - - for (IndexStats indexStats : indicesStatsResponse.getIndices().values()) { - long documentCount = indexStats.getPrimaries().getDocs().getCount(); - - if (documentCount < documentThreshold) { - healthy = false; - indexDetails.add(String.format("%s (%d)", indexStats.getIndex(), documentCount)); - } else { - indexDetails.add(String.format("%s (%d!)", indexStats.getIndex(), documentCount)); - } - } - - final String resultDetails = String.format("Last stats: %s", indexDetails); - - if (healthy) { - return Result.healthy(resultDetails); - } else { - return Result.unhealthy(resultDetails); - } - } -} \ No newline at end of file diff --git a/src/main/java/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheck.java b/src/main/java/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheck.java index 56b2f0c..1dbd79c 100644 --- a/src/main/java/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheck.java +++ b/src/main/java/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheck.java @@ -1,9 +1,12 @@ package io.dropwizard.elasticsearch.health; -import com.codahale.metrics.health.HealthCheck; import com.google.common.collect.ImmutableList; -import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse; -import org.elasticsearch.client.Client; + +import com.codahale.metrics.health.HealthCheck; + +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.client.indices.GetIndexRequest; import java.util.List; @@ -16,17 +19,17 @@ * @see Admin Indices Indices Exists */ public class EsIndexExistsHealthCheck extends HealthCheck { - private final Client client; + private final RestHighLevelClient client; private final String[] indices; /** * Construct a new Elasticsearch index exists health check. * - * @param client an Elasticsearch {@link Client} instance connected to the cluster + * @param client an Elasticsearch {@link RestHighLevelClient} instance connected to the cluster * @param indices a {@link List} of indices in Elasticsearch which should be checked * @throws IllegalArgumentException if {@code indices} was {@literal null} or empty */ - public EsIndexExistsHealthCheck(Client client, List indices) { + public EsIndexExistsHealthCheck(RestHighLevelClient client, List indices) { checkArgument(!indices.isEmpty(), "At least one index must be given"); this.client = checkNotNull(client); @@ -39,7 +42,7 @@ public EsIndexExistsHealthCheck(Client client, List indices) { * @param client an Elasticsearch {@link org.elasticsearch.client.Client} instance connected to the cluster * @param indexName the index in Elasticsearch which should be checked */ - public EsIndexExistsHealthCheck(Client client, String indexName) { + public EsIndexExistsHealthCheck(RestHighLevelClient client, String indexName) { this(client, ImmutableList.of(indexName)); } @@ -54,12 +57,12 @@ public EsIndexExistsHealthCheck(Client client, String indexName) { */ @Override protected Result check() throws Exception { - final IndicesExistsResponse indicesExistsResponse = client.admin().indices().prepareExists(indices).get(); - - if (indicesExistsResponse.isExists()) { + GetIndexRequest request = new GetIndexRequest(indices); + boolean exists = client.indices().exists(request, RequestOptions.DEFAULT); + if (exists) { return Result.healthy(); } else { return Result.unhealthy("One or more indices do not exist."); } } -} \ No newline at end of file +} diff --git a/src/test/java/io/dropwizard/elasticsearch/health/EsClusterHealthCheckTest.java b/src/test/java/io/dropwizard/elasticsearch/health/EsClusterHealthCheckTest.java index b70b03b..633038f 100644 --- a/src/test/java/io/dropwizard/elasticsearch/health/EsClusterHealthCheckTest.java +++ b/src/test/java/io/dropwizard/elasticsearch/health/EsClusterHealthCheckTest.java @@ -1,6 +1,6 @@ package io.dropwizard.elasticsearch.health; -import org.elasticsearch.client.Client; +import org.elasticsearch.client.RestHighLevelClient; import org.junit.Test; import static org.mockito.Mockito.mock; @@ -16,6 +16,6 @@ public void initializationWithNullClientShouldFail() { @Test public void initializationWithClientShouldSucceed() { - new EsClusterHealthCheck(mock(Client.class)); + new EsClusterHealthCheck(mock(RestHighLevelClient.class)); } } diff --git a/src/test/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheckTest.java b/src/test/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheckTest.java deleted file mode 100644 index a3c0882..0000000 --- a/src/test/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheckTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package io.dropwizard.elasticsearch.health; - -import com.google.common.collect.ImmutableList; -import org.elasticsearch.client.Client; -import org.junit.Test; - -import java.util.Collections; - -import static org.mockito.Mockito.mock; - -/** - * Unit tests for {@link EsIndexDocsHealthCheck}. - */ -public class EsIndexDocsHealthCheckTest { - @Test(expected = NullPointerException.class) - public void initializationWithNullClientShouldFail() { - new EsIndexDocsHealthCheck(null, "index"); - } - - @Test(expected = IllegalArgumentException.class) - public void initializationWithoutIndicesShouldFail() { - new EsIndexDocsHealthCheck(mock(Client.class), Collections.emptyList()); - } - - @Test(expected = NullPointerException.class) - public void initializationWithoutIndexShouldFail() { - new EsIndexDocsHealthCheck(mock(Client.class), (String) null); - } - - @Test - public void initializationWithClientAndIndicesShouldSucceed() { - new EsIndexDocsHealthCheck(mock(Client.class), ImmutableList.of("index", "foobar")); - } - - @Test - public void initializationWithClientAndIndexShouldSucceed() { - new EsIndexDocsHealthCheck(mock(Client.class), "index"); - } - - @Test(expected = IllegalArgumentException.class) - public void initializationWithDocumentThresholdTooLowShouldFail() { - new EsIndexDocsHealthCheck(mock(Client.class), "index", 0L); - } - - @Test - public void initializationWithValidParametersShouldSucceedl() { - new EsIndexDocsHealthCheck(mock(Client.class), "index", 10L); - } -} diff --git a/src/test/java/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheckTest.java b/src/test/java/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheckTest.java index 32191df..9036047 100644 --- a/src/test/java/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheckTest.java +++ b/src/test/java/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheckTest.java @@ -1,7 +1,8 @@ package io.dropwizard.elasticsearch.health; import com.google.common.collect.ImmutableList; -import org.elasticsearch.client.Client; + +import org.elasticsearch.client.RestHighLevelClient; import org.junit.Test; import java.util.Collections; @@ -19,21 +20,21 @@ public void initializationWithNullClientShouldFail() { @Test(expected = IllegalArgumentException.class) public void initializationWithoutIndicesShouldFail() { - new EsIndexExistsHealthCheck(mock(Client.class), Collections.emptyList()); + new EsIndexExistsHealthCheck(mock(RestHighLevelClient.class), Collections.emptyList()); } @Test(expected = NullPointerException.class) public void initializationWithoutIndexShouldFail() { - new EsIndexExistsHealthCheck(mock(Client.class), (String) null); + new EsIndexExistsHealthCheck(mock(RestHighLevelClient.class), (String) null); } @Test public void initializationWithClientAndIndexShouldSucceed() { - new EsIndexExistsHealthCheck(mock(Client.class), "index"); + new EsIndexExistsHealthCheck(mock(RestHighLevelClient.class), "index"); } @Test public void initializationWithClientAndIndicesShouldSucceed() { - new EsIndexExistsHealthCheck(mock(Client.class), ImmutableList.of("index", "foobar")); + new EsIndexExistsHealthCheck(mock(RestHighLevelClient.class), ImmutableList.of("index", "foobar")); } } From 22d01c7fe720778024812050fbcbef4693e277b2 Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Sun, 26 May 2019 13:35:12 +0200 Subject: [PATCH 14/22] clean up irrelavant files --- Jenkinsfile | 56 ----------------------------------------------------- 1 file changed, 56 deletions(-) delete mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index 1708100..0000000 --- a/Jenkinsfile +++ /dev/null @@ -1,56 +0,0 @@ -#!groovy -@Library('gini-shared-library@master') _ - - -pipeline { - agent { - label 'base' - } - - environment { - PROJECT_NAME = getProjectName() - } - - options { - gitLabConnection('git.i.gini.net') - } - - stages { - stage('Build and test') { - steps { - updateGitlabCommitStatus name: 'pipeline', state: 'running' - sh """./gradlew -g=/efs/${PROJECT_NAME} \ - -I /home/jenkins/gradle/init.gradle \ - -Pbranch=${env.GIT_BRANCH} \ - -PbuildNumber=${env.BUILD_NUMBER} \ - clean build""" - } - post { - failure { - updateGitlabCommitStatus name: 'Build and test', state: 'failed' - } - success { - updateGitlabCommitStatus name: 'Build and test', state: 'success' - } - } - } - stage('upload archives') { - steps { - sh """./gradlew -g=/efs/${PROJECT_NAME} \ - -I /home/jenkins/gradle/init.gradle \ - -Pbranch=${env.GIT_BRANCH} \ - -PbuildNumber=${env.BUILD_NUMBER} \ - uploadArchives""" - - } - } - } - post { - failure { - updateGitlabCommitStatus name: 'pipeline', state: 'failed' - } - success { - updateGitlabCommitStatus name: 'pipeline', state: 'success' - } - } -} From 29dffca76852f1415cb646a5969474a53197b80f Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Sun, 26 May 2019 13:36:49 +0200 Subject: [PATCH 15/22] clean up irrelavant files --- .gradle/3.4.1/file-changes/last-build.bin | Bin 1 -> 0 bytes .../fileContent/annotation-processors.bin | Bin 20207 -> 0 bytes .gradle/3.4.1/fileContent/fileContent.lock | Bin 17 -> 0 bytes .gradle/3.4.1/taskHistory/fileHashes.bin | Bin 26347 -> 0 bytes .gradle/3.4.1/taskHistory/fileSnapshots.bin | Bin 75785 -> 0 bytes .../3.4.1/taskHistory/jvmClassSignatures.bin | Bin 23223 -> 0 bytes .gradle/3.4.1/taskHistory/taskHistory.bin | Bin 25468 -> 0 bytes .gradle/3.4.1/taskHistory/taskHistory.lock | Bin 17 -> 0 bytes .gradle/4.9/fileChanges/last-build.bin | Bin 1 -> 0 bytes .gradle/4.9/fileContent/fileContent.lock | Bin 17 -> 0 bytes .gradle/4.9/fileHashes/fileHashes.bin | Bin 22147 -> 0 bytes .gradle/4.9/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .gradle/4.9/fileHashes/resourceHashesCache.bin | Bin 18701 -> 0 bytes .gradle/4.9/taskHistory/taskHistory.bin | Bin 184510 -> 0 bytes .gradle/4.9/taskHistory/taskHistory.lock | Bin 17 -> 0 bytes .gradle/vcsWorkingDirs/gc.properties | 0 gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 0 bytes gradle/wrapper/gradle-wrapper.properties | 5 ----- 18 files changed, 5 deletions(-) delete mode 100644 .gradle/3.4.1/file-changes/last-build.bin delete mode 100644 .gradle/3.4.1/fileContent/annotation-processors.bin delete mode 100644 .gradle/3.4.1/fileContent/fileContent.lock delete mode 100644 .gradle/3.4.1/taskHistory/fileHashes.bin delete mode 100644 .gradle/3.4.1/taskHistory/fileSnapshots.bin delete mode 100644 .gradle/3.4.1/taskHistory/jvmClassSignatures.bin delete mode 100644 .gradle/3.4.1/taskHistory/taskHistory.bin delete mode 100644 .gradle/3.4.1/taskHistory/taskHistory.lock delete mode 100644 .gradle/4.9/fileChanges/last-build.bin delete mode 100644 .gradle/4.9/fileContent/fileContent.lock delete mode 100644 .gradle/4.9/fileHashes/fileHashes.bin delete mode 100644 .gradle/4.9/fileHashes/fileHashes.lock delete mode 100644 .gradle/4.9/fileHashes/resourceHashesCache.bin delete mode 100644 .gradle/4.9/taskHistory/taskHistory.bin delete mode 100644 .gradle/4.9/taskHistory/taskHistory.lock delete mode 100644 .gradle/vcsWorkingDirs/gc.properties delete mode 100644 gradle/wrapper/gradle-wrapper.jar delete mode 100644 gradle/wrapper/gradle-wrapper.properties diff --git a/.gradle/3.4.1/file-changes/last-build.bin b/.gradle/3.4.1/file-changes/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/.gradle/3.4.1/fileContent/annotation-processors.bin b/.gradle/3.4.1/fileContent/annotation-processors.bin deleted file mode 100644 index 258cda3825f9ac02547738247a512749bd0872e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20207 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 b`tisaMdH=3q(?FA{(F*7#`vDQMM?YzBA;^P diff --git a/.gradle/3.4.1/taskHistory/taskHistory.bin b/.gradle/3.4.1/taskHistory/taskHistory.bin deleted file mode 100644 index 92cdc2df4ee4ebf59e3a356d32897ca500ff1100..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25468 zcmeI4du$v>8Nhe_s7ST7(nwWMiX{>v(ZBkFND(Oogi?tHM1t~11+*1Kh)0lsZ*FgI z_Z-K)!zxwLchdUKyEET>-|u_O!`3AgWo75TD=)==ss7uhUPWmsz~|MK`}l?gkN^@u z0!RP}AOR$R1dsp{Kmter2_OL^fCP{L5-zxB2%oTY~$+JKVp| ze}+Gi01`j~NB{{S0VIF~kN^@u0!RP}AOR$R1dsp{Kmter2_OL^fCP{L5S|zct11g3zt*B+Vb=6mHS=pxReVjuN^X@sH^(9XEI0|Ii?g zZW7y|Icgg5F^BK=T%yx>p4lvJfKg*?l5itNP2vfrdz5g!5cl;S(}2u{WeSN`Os>d` z1q1-_@7^QPp|4(A<_Kf*i>2D84dw~XvPHohdz72=Zz-)pxu+n6>urd~J<3Z=r(WP~ zaC|)4!wXDbr>)l#u`IK-N#-7iHrYr#Dy8n>O01r^>Do+0L3RrA<0eHJ=gLQRkrL6s z-FYo#7p>?+S16rd*xH*MOzj-aq_*zdlpades30Z!hIIrUlNx$8jYcNiK+n7C(lZ$$ zCp$+~dN+NWHx3LxCc}}H==%dG82wso_W618CCWXB44+0Oh>QKlXf8)}0p|7Ewj+oPug%&saVbxdu>+H%F8C0V(5bDJ(!fcsntL7Y6GVnBmy3{t(mEX$ke7bioX<9Pc?c0H{ zqDTD)QiR8q8^bKw=r|@N_N$-Z-*|2A%G*tfxvggZqnU z88i}#G8;6bHx?-h8Er(AG*i0~DX4qso(V~N8i}|3fLE)D{ zTB7AzXv>Q43kL!P8sn)R6olugkg*4mn`I^w z6Hjuq@W!-ItCb;|F@S1$L2@9ljoP|nFuNSlLTMcx>5uhPV?E-iPemLRF6x5H zTB)jOKiKwFy=W7w93~)H26E4n!LU(dBBOkA$x-^lnsLytOxMV$YE_61L&vFJ6eMf< z;jYanFy>{N?y>&tLfC{GwK6i?(3`d6<^?($f(gz3}oI z_ja92{^_~3|C)Vxre-kpon_8NCd+!)To1<*TDNvrED_5L_ioN?N{?u;dX+QQtY=bm%-9STF!+nHApkFXwa19iiu#ts6W@#Ll&`F4weUf z4%7}?EHc{T;b>h6&0u`UG5lzlt$hMgH zEMv;yDuslm!}2{N7Y1?x*l0Pd%IRJ*utHyz+lB6UDii=QupCvMu90LEU6bjsq4hFC z?rZbq86LJZYZhd`3=S=MRckqS%U3=7nYMx9zQNICDr#hHK(+@lTbqi@OtEOlf*IG$ z>I0B|d_opyh`(Ti04Nd*Q1~YU)k3&~xv2#meJ1r$X-}s52YW|S$%xI``{9;{VUzor z^^FC#5-JTjd{uNvVgIXGO31_t6DG{u?q#J5%&`_sxb3IlIw7y7+5@N^S5{}f{M|c- zgX5i#b$zexZ`Z9IU2x1Zb9u!r554;LOOfNAtuMd!;^*hm?|kLN^N;rIIv>LWD1UeU ze|rFRcf$uz>$T6~@l(Ci%LnuLsTq7+TT$>x8;`W31n@{3kF-lP+}PC~_b+v%-TuS> E052jYGynhq diff --git a/.gradle/3.4.1/taskHistory/taskHistory.lock b/.gradle/3.4.1/taskHistory/taskHistory.lock deleted file mode 100644 index 5e9657e061033c6f8e6007219f20aed97380ac68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZSf_$k5gSxF;JTITu`JV6lbIx(*an3pt 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 C8};P? diff --git a/.gradle/4.9/fileHashes/fileHashes.lock b/.gradle/4.9/fileHashes/fileHashes.lock deleted file mode 100644 index e6e7c3355aa272f4b99cfc7dbc331ffefddd47df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZQRw{!Nsa+am986Y4O06ygfL;wH) diff --git a/.gradle/4.9/fileHashes/resourceHashesCache.bin b/.gradle/4.9/fileHashes/resourceHashesCache.bin deleted file mode 100644 index 2e6c65f0a91168113112b1d95c830b265359526a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18701 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 diff --git a/.gradle/4.9/taskHistory/taskHistory.lock b/.gradle/4.9/taskHistory/taskHistory.lock deleted file mode 100644 index 59912ca4a50b4653c7b3524ee750f8259356e5b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZRMU|kmHT=2M?0Rq?oDWwCA diff --git a/.gradle/vcsWorkingDirs/gc.properties b/.gradle/vcsWorkingDirs/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55616 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 Date: Sun, 26 May 2019 13:38:48 +0200 Subject: [PATCH 16/22] set version number --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f7de437..9d115d4 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ io.dropwizard.modules dropwizard-elasticsearch - 1.3.11-1-SNAPSHOT + 1.3.0-1-SNAPSHOT jar Dropwizard Elasticsearch Bundle From cfda4b3e4346ff1dd12db05fc193e6a5c8d94002 Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Sun, 26 May 2019 13:40:17 +0200 Subject: [PATCH 17/22] fix a comment --- .../dropwizard/elasticsearch/managed/ManagedEsClientTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java b/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java index 8098a60..c8078cc 100644 --- a/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java +++ b/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java @@ -51,7 +51,7 @@ public void stopShouldCloseTheClient() throws Exception { RestHighLevelClient client = mock(RestHighLevelClient.class); Managed managed = new ManagedEsClient(client); - // to stub the final result it is required to have the + // to stub a final method it is necessary to have the // /src/test/resources/mockito-extensions/org.mockiot.plugins.MockMaker file // with `mock-maker-inline` as context doNothing().when(client).close(); From f5498d8c845391e30787be8fd8e31fdef688fae2 Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Sun, 26 May 2019 13:53:52 +0200 Subject: [PATCH 18/22] add rest client to dependencies --- pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pom.xml b/pom.xml index 9d115d4..cff2f3e 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,12 @@ elasticsearch ${elasticsearch.version} + + org.elasticsearch.client + elasticsearch-rest-client + ${elasticsearch.version} + + junit junit From 01b8fda0f25384dc9df0046e59baa60d4fbedd1f Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Sun, 26 May 2019 14:14:13 +0200 Subject: [PATCH 19/22] fix dependencies in pom file --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index cff2f3e..beb5e37 100644 --- a/pom.xml +++ b/pom.xml @@ -96,8 +96,8 @@ org.elasticsearch.client - elasticsearch-rest-client - ${elasticsearch.version} + elasticsearch-rest-high-level-client + 7.1.0 From 43bbef2a83e1f11e891b44303c607f48944261bb Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Sun, 26 May 2019 21:40:55 +0200 Subject: [PATCH 20/22] clean up gitignore and pom file --- .gitignore | 2 -- pom.xml | 8 +------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 7978ebe..8216d5e 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,6 @@ release.properties *.iws .idea/ out/ -build/ -**/buildOutputCleanup/ # Eclipse .settings/ diff --git a/pom.xml b/pom.xml index beb5e37..7fc2df2 100644 --- a/pom.xml +++ b/pom.xml @@ -89,17 +89,11 @@ io.dropwizard dropwizard-core - - org.elasticsearch - elasticsearch - ${elasticsearch.version} - org.elasticsearch.client elasticsearch-rest-high-level-client - 7.1.0 + ${elasticsearch.version} - junit junit From 691fe3f0c49e2615408c8bc2e6712b54d9a3d819 Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Mon, 27 May 2019 00:37:10 +0200 Subject: [PATCH 21/22] support more configutations; bring back the Docs number health check --- pom.xml | 5 + .../config/CredentialConfiguration.java | 19 ++ .../elasticsearch/config/EsConfiguration.java | 52 ++++++ .../config/KeyStoreConfiguration.java | 29 +++ .../config/SnifferConfiguration.java | 27 +++ .../health/EsIndexDocsHealthCheck.java | 122 ++++++++++++ .../managed/ManagedEsClient.java | 175 +++++++++++++++++- .../config/EsConfigurationTest.java | 2 +- .../health/EsIndexDocsHealthCheckTest.java | 50 +++++ 9 files changed, 475 insertions(+), 6 deletions(-) create mode 100644 src/main/java/io/dropwizard/elasticsearch/config/CredentialConfiguration.java create mode 100644 src/main/java/io/dropwizard/elasticsearch/config/KeyStoreConfiguration.java create mode 100644 src/main/java/io/dropwizard/elasticsearch/config/SnifferConfiguration.java create mode 100644 src/main/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.java create mode 100644 src/test/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheckTest.java diff --git a/pom.xml b/pom.xml index 7fc2df2..c346ce4 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,11 @@ elasticsearch-rest-high-level-client ${elasticsearch.version} + + org.elasticsearch.client + elasticsearch-rest-client-sniffer + ${elasticsearch.version} + junit junit diff --git a/src/main/java/io/dropwizard/elasticsearch/config/CredentialConfiguration.java b/src/main/java/io/dropwizard/elasticsearch/config/CredentialConfiguration.java new file mode 100644 index 0000000..ec58d05 --- /dev/null +++ b/src/main/java/io/dropwizard/elasticsearch/config/CredentialConfiguration.java @@ -0,0 +1,19 @@ +package io.dropwizard.elasticsearch.config; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class CredentialConfiguration { + @JsonProperty + private String user = null; + + @JsonProperty + private String password = null; + + public String getUser() { + return user; + } + + public String getPassword() { + return password; + } +} diff --git a/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java b/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java index 8012409..d28502a 100644 --- a/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java +++ b/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java @@ -18,6 +18,31 @@ public class EsConfiguration { @NotNull private List servers = Collections.emptyList(); + @JsonProperty + @NotNull + private int connectTimeOut = 1000; + + @JsonProperty + @NotNull + private int socketTimeOut = 30000; + + @JsonProperty + private int numberOfThreads = 0; + + @JsonProperty + private String node = ""; + + @JsonProperty + private CredentialConfiguration credential = null; + + @JsonProperty + private KeyStoreConfiguration keystore = null; + + + + @JsonProperty + private SnifferConfiguration sniffer = null; + public List getServers() { return servers; } @@ -34,4 +59,31 @@ public List getServersAsHttpHosts() { return httpHosts; } + public int getConnectTimeOut() { + return connectTimeOut; + } + + public int getSocketTimeOut() { + return socketTimeOut; + } + + public int getNumberOfThreads() { + return numberOfThreads; + } + + public String getNode() { + return node; + } + + public CredentialConfiguration getCredential() { + return credential; + } + + public KeyStoreConfiguration getKeystore() { + return keystore; + } + + public SnifferConfiguration getSniffer() { + return sniffer; + } } diff --git a/src/main/java/io/dropwizard/elasticsearch/config/KeyStoreConfiguration.java b/src/main/java/io/dropwizard/elasticsearch/config/KeyStoreConfiguration.java new file mode 100644 index 0000000..0a16874 --- /dev/null +++ b/src/main/java/io/dropwizard/elasticsearch/config/KeyStoreConfiguration.java @@ -0,0 +1,29 @@ +package io.dropwizard.elasticsearch.config; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.nio.file.Path; +import java.nio.file.Paths; + +public class KeyStoreConfiguration { + @JsonProperty + private String type = "jks"; + + @JsonProperty + private String keyStorePath; + + @JsonProperty + private String keyStorePass; + + public String getType() { + return type; + } + + public Path getKeyStorePath() { + return Paths.get(keyStorePath); + } + + public String getKeyStorePass() { + return keyStorePass; + } +} diff --git a/src/main/java/io/dropwizard/elasticsearch/config/SnifferConfiguration.java b/src/main/java/io/dropwizard/elasticsearch/config/SnifferConfiguration.java new file mode 100644 index 0000000..55d47a2 --- /dev/null +++ b/src/main/java/io/dropwizard/elasticsearch/config/SnifferConfiguration.java @@ -0,0 +1,27 @@ +package io.dropwizard.elasticsearch.config; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class SnifferConfiguration { + + @JsonProperty + private Boolean sniffOnFailure = true; + + @JsonProperty + private int sniffIntervalMillis = 5000; + + @JsonProperty + private int sniffAfterFailureDelayMillis = 30000; + + public Boolean getSniffOnFailure() { + return sniffOnFailure; + } + + public int getSniffIntervalMillis() { + return sniffIntervalMillis; + } + + public int getSniffAfterFailureDelayMillis() { + return sniffAfterFailureDelayMillis; + } +} diff --git a/src/main/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.java b/src/main/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.java new file mode 100644 index 0000000..1cf6e4e --- /dev/null +++ b/src/main/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.java @@ -0,0 +1,122 @@ +package io.dropwizard.elasticsearch.health; + +import com.codahale.metrics.health.HealthCheck; +import com.google.common.collect.ImmutableList; +import org.elasticsearch.action.admin.indices.stats.IndexStats; +import org.elasticsearch.action.admin.indices.stats.IndicesStatsResponse; +import org.elasticsearch.client.Client; +import org.elasticsearch.client.RequestOptions; +import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.client.core.CountRequest; +import org.elasticsearch.client.core.CountResponse; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.rest.RestStatus; +import org.elasticsearch.search.builder.SearchSourceBuilder; + +import java.util.ArrayList; +import java.util.List; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * A {@link HealthCheck} which checks if one or more indices in Elasticsearch contain a given number of documents + * in their primaries. + * + * @see Admin Indices Stats + */ +public class EsIndexDocsHealthCheck extends HealthCheck { + private static final String HEALTH_CHECK_NAME = "elasticsearch-index-documents"; + private static final long DEFAULT_DOCUMENT_THRESHOLD = 1L; + private final RestHighLevelClient client; + private final String[] indices; + private final long documentThreshold; + + /** + * Construct a new Elasticsearch index document count health check. + * + * @param client an Elasticsearch {@link Client} instance connected to the cluster + * @param indices a {@link List} of indices in Elasticsearch which should be checked + * @param documentThreshold the minimal number of documents in an index + * @throws IllegalArgumentException if {@code indices} was {@literal null} or empty, + * or {@code documentThreshold} was less than 1 + */ + public EsIndexDocsHealthCheck(RestHighLevelClient client, List indices, long documentThreshold) { + checkArgument(!indices.isEmpty(), "At least one index must be given"); + checkArgument(documentThreshold > 0L, "The document threshold must at least be 1"); + + this.client = checkNotNull(client); + this.indices = checkNotNull(indices.toArray(new String[indices.size()])); + this.documentThreshold = documentThreshold; + } + + + /** + * Construct a new Elasticsearch index document count health check. + * + * @param client an Elasticsearch {@link Client} instance connected to the cluster + * @param indices a {@link List} of indices in Elasticsearch which should be checked + */ + public EsIndexDocsHealthCheck(RestHighLevelClient client, List indices) { + this(client, indices, DEFAULT_DOCUMENT_THRESHOLD); + } + + /** + * Construct a new Elasticsearch index document count health check. + * + * @param client an Elasticsearch {@link Client} instance connected to the cluster + * @param indexName the index in Elasticsearch which should be checked + * @param documentThreshold the minimal number of documents in an index + */ + public EsIndexDocsHealthCheck(RestHighLevelClient client, String indexName, long documentThreshold) { + this(client, ImmutableList.of(indexName), documentThreshold); + } + + /** + * Construct a new Elasticsearch index document count health check. + * + * @param client an Elasticsearch {@link Client} instance connected to the cluster + * @param indexName the index in Elasticsearch which should be checked + */ + public EsIndexDocsHealthCheck(RestHighLevelClient client, String indexName) { + this(client, indexName, DEFAULT_DOCUMENT_THRESHOLD); + } + + /** + * Perform a check of the number of documents in the Elasticsearch indices. + * + * @return if the Elasticsearch indices contain the minimal number of documents, a healthy + * {@link com.codahale.metrics.health.HealthCheck.Result}; otherwise, an unhealthy + * {@link com.codahale.metrics.health.HealthCheck.Result} with a descriptive error message or exception + * @throws Exception if there is an unhandled error during the health check; this will result in + * a failed health check + */ + @Override + protected Result check() throws Exception { + final List indexDetails = new ArrayList(indices.length); + boolean healthy = true; + + for (String index: indices) { + long documentCount = count(index); + if (documentCount < documentThreshold) { + healthy = false; + indexDetails.add(String.format("%s (%d)", index, documentCount)); + } else { + indexDetails.add(String.format("%s (%d!)", index, documentCount)); + } + } + final String resultDetails = String.format("Last stats: %s", indexDetails); + if (healthy) { + return Result.healthy(resultDetails); + } else { + return Result.unhealthy(resultDetails); + } + } + + private long count(String index) throws Exception { + SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()); + CountRequest countRequest = new CountRequest().source(searchSourceBuilder); + CountResponse countResponse = client.count(countRequest, RequestOptions.DEFAULT); + return countResponse.getCount(); + } +} diff --git a/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java b/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java index fa5b173..5ff68e2 100644 --- a/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java +++ b/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java @@ -1,10 +1,31 @@ package io.dropwizard.elasticsearch.managed; import org.apache.http.HttpHost; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.client.config.RequestConfig; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.nio.client.HttpAsyncClientBuilder; +import org.apache.http.impl.nio.reactor.IOReactorConfig; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.http.ssl.SSLContexts; import org.elasticsearch.client.Client; +import org.elasticsearch.client.Node; +import org.elasticsearch.client.NodeSelector; import org.elasticsearch.client.RestClient; +import org.elasticsearch.client.RestClientBuilder; import org.elasticsearch.client.RestHighLevelClient; -import org.elasticsearch.node.Node; +import org.elasticsearch.client.sniff.SniffOnFailureListener; +import org.elasticsearch.client.sniff.Sniffer; +import org.elasticsearch.client.sniff.SnifferBuilder; + +import java.io.InputStream; +import java.nio.file.Files; +import java.security.KeyStore; +import java.util.Iterator; + +import javax.net.ssl.SSLContext; import io.dropwizard.elasticsearch.config.EsConfiguration; import io.dropwizard.lifecycle.Managed; @@ -20,12 +41,50 @@ */ public class ManagedEsClient implements Managed { private RestHighLevelClient client = null; + private Sniffer sniffer = null; public ManagedEsClient(final EsConfiguration config) { checkNotNull(config, "EsConfiguration must not be null"); - this.client = - new RestHighLevelClient( - RestClient.builder(config.getServersAsHttpHosts().toArray(new HttpHost[0])) - ); + + RestClientBuilder restClientBuilder = RestClient.builder(config.getServersAsHttpHosts().toArray(new HttpHost[0])); + setRequest(restClientBuilder, config); + + if (config.getNumberOfThreads()>0) { + setThreads(restClientBuilder, config); + } + + if (config.getNode()!= null && !config.getNode().isEmpty()) { + setNodeSelector(restClientBuilder, config); + } + + if (config.getCredential() != null) { + setCredential(restClientBuilder, config); + } + + if (config.getKeystore()!= null) { + setCredential(restClientBuilder, config); + } + + if (config.getSniffer()!=null) { + if (config.getSniffer().getSniffOnFailure()) { + SniffOnFailureListener sniffOnFailureListener = + new SniffOnFailureListener(); + restClientBuilder.setFailureListener(sniffOnFailureListener); + this.client = new RestHighLevelClient(restClientBuilder); + this.sniffer = Sniffer.builder(this.client.getLowLevelClient()) + .setSniffAfterFailureDelayMillis(config.getSniffer().getSniffAfterFailureDelayMillis()) + .build(); + sniffOnFailureListener.setSniffer(this.sniffer); + + } else { + this.client = new RestHighLevelClient(restClientBuilder); + this.sniffer = Sniffer.builder(this.client.getLowLevelClient()) + .setSniffIntervalMillis(config.getSniffer().getSniffIntervalMillis()) + .build(); + } + + } else { + this.client = new RestHighLevelClient(restClientBuilder); + } } /** @@ -71,5 +130,111 @@ private void closeClient() throws Exception { if (null != client) { client.close(); } + if (null != sniffer) { + sniffer.close(); + } + } + + private void setRequest(RestClientBuilder restClientBuilder, EsConfiguration config) { + restClientBuilder.setRequestConfigCallback( + new RestClientBuilder.RequestConfigCallback() { + @Override + public RequestConfig.Builder customizeRequestConfig( + RequestConfig.Builder requestConfigBuilder) { + return requestConfigBuilder + .setConnectTimeout(config.getConnectTimeOut()) + .setSocketTimeout(config.getSocketTimeOut()); + } + }); + } + + private void setThreads(RestClientBuilder restClientBuilder, EsConfiguration config) { + restClientBuilder.setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { + @Override + public HttpAsyncClientBuilder customizeHttpClient( + HttpAsyncClientBuilder httpClientBuilder) { + return httpClientBuilder.setDefaultIOReactorConfig( + IOReactorConfig.custom() + .setIoThreadCount(config.getNumberOfThreads()) + .build()); + } + }); + } + + private void setCredential(RestClientBuilder restClientBuilder, EsConfiguration config) { + final CredentialsProvider credentialsProvider = + new BasicCredentialsProvider(); + credentialsProvider.setCredentials(AuthScope.ANY, + new UsernamePasswordCredentials(config.getCredential().getUser(), config.getCredential().getPassword())); + restClientBuilder + .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { + @Override + public HttpAsyncClientBuilder customizeHttpClient( + HttpAsyncClientBuilder httpClientBuilder) { + httpClientBuilder.disableAuthCaching(); + return httpClientBuilder + .setDefaultCredentialsProvider(credentialsProvider); + } + }); + } + + private void setKeyStore(RestClientBuilder restClientBuilder, EsConfiguration config) throws Exception { + KeyStore truststore = KeyStore.getInstance(config.getKeystore().getType()); + try (InputStream is = Files.newInputStream(config.getKeystore().getKeyStorePath())) { + truststore.load(is, config.getKeystore().getKeyStorePass().toCharArray()); + } + SSLContextBuilder sslBuilder = SSLContexts.custom() + .loadTrustMaterial(truststore, null); + final SSLContext sslContext = sslBuilder.build(); + restClientBuilder + .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { + @Override + public HttpAsyncClientBuilder customizeHttpClient( + HttpAsyncClientBuilder httpClientBuilder) { + return httpClientBuilder.setSSLContext(sslContext); + } + }); + } + + private void setNodeSelector(RestClientBuilder restClientBuilder, EsConfiguration config) { + restClientBuilder.setNodeSelector(new NodeSelector() { + @Override + public void select(Iterable nodes) { + /* + * Prefer any node that belongs to rack_one. If none is around + * we will go to another rack till it's time to try and revive + * some of the nodes that belong to rack_one. + */ + boolean foundOne = false; + for (Node node : nodes) { + String rackId = node.getAttributes().get("rack_id").get(0); + if (config.getNode().equals(rackId)) { + foundOne = true; + break; + } + } + if (foundOne) { + Iterator nodesIt = nodes.iterator(); + while (nodesIt.hasNext()) { + Node node = nodesIt.next(); + String rackId = node.getAttributes().get("rack_id").get(0); + if (config.getNode().equals(rackId) == false) { + nodesIt.remove(); + } + } + } + } + }); + } + + private Sniffer setSniffer(RestClient restClient, EsConfiguration config) { + SnifferBuilder snifferBuilder = Sniffer.builder(restClient) + .setSniffIntervalMillis(config.getSniffer().getSniffIntervalMillis()); + + if (config.getSniffer().getSniffOnFailure()) { + snifferBuilder.setSniffAfterFailureDelayMillis(config.getSniffer().getSniffAfterFailureDelayMillis()) + .build(); + } + return sniffer; } } diff --git a/src/test/java/io/dropwizard/elasticsearch/config/EsConfigurationTest.java b/src/test/java/io/dropwizard/elasticsearch/config/EsConfigurationTest.java index 7e607ba..841c9ef 100644 --- a/src/test/java/io/dropwizard/elasticsearch/config/EsConfigurationTest.java +++ b/src/test/java/io/dropwizard/elasticsearch/config/EsConfigurationTest.java @@ -28,7 +28,7 @@ public void defaultConfigShouldBeValid() throws IOException, ConfigurationExcept } @Test(expected = ConfigurationException.class) - public void eitherNodeClientOrServerListMustBeSet() throws IOException, ConfigurationException, URISyntaxException { + public void serverListMustBeSet() throws IOException, ConfigurationException, URISyntaxException { URL configFileUrl = this.getClass().getResource("/invalid.yml"); File configFile = new File(configFileUrl.toURI()); configFactory.build(configFile); diff --git a/src/test/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheckTest.java b/src/test/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheckTest.java new file mode 100644 index 0000000..e98bd08 --- /dev/null +++ b/src/test/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheckTest.java @@ -0,0 +1,50 @@ +package io.dropwizard.elasticsearch.health; + +import com.google.common.collect.ImmutableList; + +import org.elasticsearch.client.RestHighLevelClient; +import org.junit.Test; + +import java.util.Collections; + +import static org.mockito.Mockito.mock; + +/** + * Unit tests for {@link EsIndexDocsHealthCheck}. + */ +public class EsIndexDocsHealthCheckTest { + @Test(expected = NullPointerException.class) + public void initializationWithNullClientShouldFail() { + new EsIndexDocsHealthCheck(null, "index"); + } + + @Test(expected = IllegalArgumentException.class) + public void initializationWithoutIndicesShouldFail() { + new EsIndexDocsHealthCheck(mock(RestHighLevelClient.class), Collections.emptyList()); + } + + @Test(expected = NullPointerException.class) + public void initializationWithoutIndexShouldFail() { + new EsIndexDocsHealthCheck(mock(RestHighLevelClient.class), (String) null); + } + + @Test + public void initializationWithClientAndIndicesShouldSucceed() { + new EsIndexDocsHealthCheck(mock(RestHighLevelClient.class), ImmutableList.of("index", "foobar")); + } + + @Test + public void initializationWithClientAndIndexShouldSucceed() { + new EsIndexDocsHealthCheck(mock(RestHighLevelClient.class), "index"); + } + + @Test(expected = IllegalArgumentException.class) + public void initializationWithDocumentThresholdTooLowShouldFail() { + new EsIndexDocsHealthCheck(mock(RestHighLevelClient.class), "index", 0L); + } + + @Test + public void initializationWithValidParametersShouldSucceedl() { + new EsIndexDocsHealthCheck(mock(RestHighLevelClient.class), "index", 10L); + } +} From aa473f3bd385b5a484cbb460417427a6230b897b Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Mon, 27 May 2019 14:36:37 +0200 Subject: [PATCH 22/22] add tests --- ... => BasicAuthenticationConfiguration.java} | 10 +++- .../elasticsearch/config/EsConfiguration.java | 30 ++++++++-- .../config/KeyStoreConfiguration.java | 8 ++- .../health/EsIndexDocsHealthCheck.java | 7 +-- .../managed/ManagedEsClient.java | 35 ++++++----- .../config/CredentialConfigurationTest.java | 39 ++++++++++++ .../config/KeyStoreConfigurationTest.java | 38 ++++++++++++ .../config/SnifferConfigurationTest.java | 29 +++++++++ .../health/EsClusterHealthCheckTest.java | 60 +++++++++++++++++++ .../health/EsIndexDocsHealthCheckTest.java | 35 +++++++++++ .../health/EsIndexExistsHealthCheckTest.java | 38 ++++++++++++ .../managed/ManagedEsClientTest.java | 57 +++++++++++++++++- src/test/resources/rest_client_sniffer.yml | 15 +++++ .../rest_client_with_sniffer_on_failure.yml | 10 ++++ 14 files changed, 380 insertions(+), 31 deletions(-) rename src/main/java/io/dropwizard/elasticsearch/config/{CredentialConfiguration.java => BasicAuthenticationConfiguration.java} (59%) create mode 100644 src/test/java/io/dropwizard/elasticsearch/config/CredentialConfigurationTest.java create mode 100644 src/test/java/io/dropwizard/elasticsearch/config/KeyStoreConfigurationTest.java create mode 100644 src/test/java/io/dropwizard/elasticsearch/config/SnifferConfigurationTest.java create mode 100644 src/test/resources/rest_client_sniffer.yml create mode 100644 src/test/resources/rest_client_with_sniffer_on_failure.yml diff --git a/src/main/java/io/dropwizard/elasticsearch/config/CredentialConfiguration.java b/src/main/java/io/dropwizard/elasticsearch/config/BasicAuthenticationConfiguration.java similarity index 59% rename from src/main/java/io/dropwizard/elasticsearch/config/CredentialConfiguration.java rename to src/main/java/io/dropwizard/elasticsearch/config/BasicAuthenticationConfiguration.java index ec58d05..87a7c78 100644 --- a/src/main/java/io/dropwizard/elasticsearch/config/CredentialConfiguration.java +++ b/src/main/java/io/dropwizard/elasticsearch/config/BasicAuthenticationConfiguration.java @@ -2,12 +2,16 @@ import com.fasterxml.jackson.annotation.JsonProperty; -public class CredentialConfiguration { +import javax.validation.constraints.NotNull; + +public class BasicAuthenticationConfiguration { @JsonProperty - private String user = null; + @NotNull + private String user=""; @JsonProperty - private String password = null; + @NotNull + private String password=""; public String getUser() { return user; diff --git a/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java b/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java index d28502a..e269a27 100644 --- a/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java +++ b/src/main/java/io/dropwizard/elasticsearch/config/EsConfiguration.java @@ -3,10 +3,12 @@ import com.fasterxml.jackson.annotation.JsonProperty; import org.apache.http.HttpHost; +import org.apache.http.message.BasicHeader; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import javax.validation.constraints.NotNull; @@ -33,15 +35,19 @@ public class EsConfiguration { private String node = ""; @JsonProperty - private CredentialConfiguration credential = null; + private BasicAuthenticationConfiguration basicAuthentication = null; @JsonProperty private KeyStoreConfiguration keystore = null; + @JsonProperty + private SnifferConfiguration sniffer = null; + @JsonProperty + private Map settings = Collections.emptyMap(); @JsonProperty - private SnifferConfiguration sniffer = null; + private Map headers = Collections.emptyMap(); public List getServers() { return servers; @@ -59,6 +65,18 @@ public List getServersAsHttpHosts() { return httpHosts; } + public Map getHeaders() { + return headers; + } + + public List getHeadersAsHeaders() { + ArrayList basicHeaders = new ArrayList<>(); + for (Map.Entry entry: getHeaders().entrySet()) { + basicHeaders.add(new BasicHeader(entry.getKey(), entry.getValue())); + } + return basicHeaders; + } + public int getConnectTimeOut() { return connectTimeOut; } @@ -75,8 +93,8 @@ public String getNode() { return node; } - public CredentialConfiguration getCredential() { - return credential; + public BasicAuthenticationConfiguration getBasicAuthentication() { + return basicAuthentication; } public KeyStoreConfiguration getKeystore() { @@ -86,4 +104,8 @@ public KeyStoreConfiguration getKeystore() { public SnifferConfiguration getSniffer() { return sniffer; } + + public Map getSettings() { + return settings; + } } diff --git a/src/main/java/io/dropwizard/elasticsearch/config/KeyStoreConfiguration.java b/src/main/java/io/dropwizard/elasticsearch/config/KeyStoreConfiguration.java index 0a16874..e1581e2 100644 --- a/src/main/java/io/dropwizard/elasticsearch/config/KeyStoreConfiguration.java +++ b/src/main/java/io/dropwizard/elasticsearch/config/KeyStoreConfiguration.java @@ -5,15 +5,19 @@ import java.nio.file.Path; import java.nio.file.Paths; +import javax.validation.constraints.NotNull; + public class KeyStoreConfiguration { @JsonProperty private String type = "jks"; @JsonProperty - private String keyStorePath; + @NotNull + private String keyStorePath=""; @JsonProperty - private String keyStorePass; + @NotNull + private String keyStorePass=""; public String getType() { return type; diff --git a/src/main/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.java b/src/main/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.java index 1cf6e4e..3977a9f 100644 --- a/src/main/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.java +++ b/src/main/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.java @@ -1,16 +1,15 @@ package io.dropwizard.elasticsearch.health; -import com.codahale.metrics.health.HealthCheck; import com.google.common.collect.ImmutableList; -import org.elasticsearch.action.admin.indices.stats.IndexStats; -import org.elasticsearch.action.admin.indices.stats.IndicesStatsResponse; + +import com.codahale.metrics.health.HealthCheck; + import org.elasticsearch.client.Client; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.core.CountRequest; import org.elasticsearch.client.core.CountResponse; import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.rest.RestStatus; import org.elasticsearch.search.builder.SearchSourceBuilder; import java.util.ArrayList; diff --git a/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java b/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java index 5ff68e2..877d857 100644 --- a/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java +++ b/src/main/java/io/dropwizard/elasticsearch/managed/ManagedEsClient.java @@ -1,5 +1,6 @@ package io.dropwizard.elasticsearch.managed; +import org.apache.http.Header; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; @@ -18,7 +19,6 @@ import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.sniff.SniffOnFailureListener; import org.elasticsearch.client.sniff.Sniffer; -import org.elasticsearch.client.sniff.SnifferBuilder; import java.io.InputStream; import java.nio.file.Files; @@ -42,12 +42,16 @@ public class ManagedEsClient implements Managed { private RestHighLevelClient client = null; private Sniffer sniffer = null; - public ManagedEsClient(final EsConfiguration config) { + public ManagedEsClient(final EsConfiguration config) throws Exception { checkNotNull(config, "EsConfiguration must not be null"); RestClientBuilder restClientBuilder = RestClient.builder(config.getServersAsHttpHosts().toArray(new HttpHost[0])); setRequest(restClientBuilder, config); + if (!config.getHeadersAsHeaders().isEmpty()) { + restClientBuilder.setDefaultHeaders(config.getHeadersAsHeaders().toArray(new Header[0])); + } + if (config.getNumberOfThreads()>0) { setThreads(restClientBuilder, config); } @@ -56,12 +60,12 @@ public ManagedEsClient(final EsConfiguration config) { setNodeSelector(restClientBuilder, config); } - if (config.getCredential() != null) { + if (config.getBasicAuthentication() != null) { setCredential(restClientBuilder, config); } if (config.getKeystore()!= null) { - setCredential(restClientBuilder, config); + setKeyStore(restClientBuilder, config); } if (config.getSniffer()!=null) { @@ -96,6 +100,16 @@ public ManagedEsClient(RestHighLevelClient client) { this.client = checkNotNull(client, "Elasticsearch client must not be null"); } + /** + * Create a new managed Elasticsearch {@link Client} from the provided {@link Client}. + * + * @param client an initialized {@link Client} instance + */ + public ManagedEsClient(RestHighLevelClient client, Sniffer sniffer) { + this.client = checkNotNull(client, "Elasticsearch client must not be null"); + this.sniffer = checkNotNull(sniffer, "Sniffer must not be null"); + } + /** * Starts the Elasticsearch {@link Node} (if appropriate). Called before the service becomes available. * @@ -165,7 +179,7 @@ private void setCredential(RestClientBuilder restClientBuilder, EsConfiguration final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, - new UsernamePasswordCredentials(config.getCredential().getUser(), config.getCredential().getPassword())); + new UsernamePasswordCredentials(config.getBasicAuthentication().getUser(), config.getBasicAuthentication().getPassword())); restClientBuilder .setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() { @Override @@ -226,15 +240,4 @@ public void select(Iterable nodes) { } }); } - - private Sniffer setSniffer(RestClient restClient, EsConfiguration config) { - SnifferBuilder snifferBuilder = Sniffer.builder(restClient) - .setSniffIntervalMillis(config.getSniffer().getSniffIntervalMillis()); - - if (config.getSniffer().getSniffOnFailure()) { - snifferBuilder.setSniffAfterFailureDelayMillis(config.getSniffer().getSniffAfterFailureDelayMillis()) - .build(); - } - return sniffer; - } } diff --git a/src/test/java/io/dropwizard/elasticsearch/config/CredentialConfigurationTest.java b/src/test/java/io/dropwizard/elasticsearch/config/CredentialConfigurationTest.java new file mode 100644 index 0000000..636c7ff --- /dev/null +++ b/src/test/java/io/dropwizard/elasticsearch/config/CredentialConfigurationTest.java @@ -0,0 +1,39 @@ +package io.dropwizard.elasticsearch.config; + +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; + +import javax.validation.Validation; +import javax.validation.Validator; + +import io.dropwizard.configuration.ConfigurationException; +import io.dropwizard.configuration.ConfigurationFactory; +import io.dropwizard.configuration.DefaultConfigurationFactoryFactory; +import io.dropwizard.jackson.Jackson; + + +/** + * Unit tests for {@link BasicAuthenticationConfiguration}. + */ +public class CredentialConfigurationTest { + private final Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); + private final ConfigurationFactory configFactory = + new DefaultConfigurationFactoryFactory() + .create(BasicAuthenticationConfiguration.class, validator, Jackson.newObjectMapper(), "dw"); + + @Test + public void defaultConfigShouldBeValid() throws IOException, ConfigurationException { + configFactory.build(); + } + + @Test(expected = ConfigurationException.class) + public void userAndPasswordMustBeSet() throws IOException, ConfigurationException, URISyntaxException { + URL configFileUrl = this.getClass().getResource("/invalid.yml"); + File configFile = new File(configFileUrl.toURI()); + configFactory.build(configFile); + } +} diff --git a/src/test/java/io/dropwizard/elasticsearch/config/KeyStoreConfigurationTest.java b/src/test/java/io/dropwizard/elasticsearch/config/KeyStoreConfigurationTest.java new file mode 100644 index 0000000..0463532 --- /dev/null +++ b/src/test/java/io/dropwizard/elasticsearch/config/KeyStoreConfigurationTest.java @@ -0,0 +1,38 @@ +package io.dropwizard.elasticsearch.config; + +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; + +import javax.validation.Validation; +import javax.validation.Validator; + +import io.dropwizard.configuration.ConfigurationException; +import io.dropwizard.configuration.ConfigurationFactory; +import io.dropwizard.configuration.DefaultConfigurationFactoryFactory; +import io.dropwizard.jackson.Jackson; + +/** + * Unit tests for {@link KeyStoreConfiguration}. + */ +public class KeyStoreConfigurationTest { + private final Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); + private final ConfigurationFactory configFactory = + new DefaultConfigurationFactoryFactory() + .create(KeyStoreConfiguration.class, validator, Jackson.newObjectMapper(), "dw"); + + @Test + public void defaultConfigShouldBeValid() throws IOException, ConfigurationException { + configFactory.build(); + } + + @Test(expected = ConfigurationException.class) + public void keyStorePathAndPassMustBeSet() throws IOException, ConfigurationException, URISyntaxException { + URL configFileUrl = this.getClass().getResource("/invalid.yml"); + File configFile = new File(configFileUrl.toURI()); + configFactory.build(configFile); + } +} diff --git a/src/test/java/io/dropwizard/elasticsearch/config/SnifferConfigurationTest.java b/src/test/java/io/dropwizard/elasticsearch/config/SnifferConfigurationTest.java new file mode 100644 index 0000000..9a35195 --- /dev/null +++ b/src/test/java/io/dropwizard/elasticsearch/config/SnifferConfigurationTest.java @@ -0,0 +1,29 @@ +package io.dropwizard.elasticsearch.config; + + +import org.junit.Test; + +import java.io.IOException; + +import javax.validation.Validation; +import javax.validation.Validator; + +import io.dropwizard.configuration.ConfigurationException; +import io.dropwizard.configuration.ConfigurationFactory; +import io.dropwizard.configuration.DefaultConfigurationFactoryFactory; +import io.dropwizard.jackson.Jackson; + +/** + * Unit tests for {@link SnifferConfiguration}. + */ +public class SnifferConfigurationTest { + private final Validator validator = Validation.buildDefaultValidatorFactory().getValidator(); + private final ConfigurationFactory configFactory = + new DefaultConfigurationFactoryFactory() + .create(SnifferConfiguration.class, validator, Jackson.newObjectMapper(), "dw"); + + @Test + public void defaultConfigShouldBeValid() throws IOException, ConfigurationException { + configFactory.build(); + } +} diff --git a/src/test/java/io/dropwizard/elasticsearch/health/EsClusterHealthCheckTest.java b/src/test/java/io/dropwizard/elasticsearch/health/EsClusterHealthCheckTest.java index 633038f..f1eebaf 100644 --- a/src/test/java/io/dropwizard/elasticsearch/health/EsClusterHealthCheckTest.java +++ b/src/test/java/io/dropwizard/elasticsearch/health/EsClusterHealthCheckTest.java @@ -1,9 +1,21 @@ package io.dropwizard.elasticsearch.health; +import com.codahale.metrics.health.HealthCheck; + +import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest; +import org.elasticsearch.action.admin.cluster.health.ClusterHealthResponse; +import org.elasticsearch.client.ClusterClient; +import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.cluster.health.ClusterHealthStatus; import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; /** * Unit tests for {@link EsClusterHealthCheck} @@ -18,4 +30,52 @@ public void initializationWithNullClientShouldFail() { public void initializationWithClientShouldSucceed() { new EsClusterHealthCheck(mock(RestHighLevelClient.class)); } + + @Test + public void canHaveHealthyResultsWithFormattedMessage() throws Exception { + RestHighLevelClient client = mock(RestHighLevelClient.class); + ClusterClient clusterClient = mock(ClusterClient.class); + EsClusterHealthCheck healthCheck = new EsClusterHealthCheck(client); + ClusterHealthResponse response = mock(ClusterHealthResponse.class); + + when(client.cluster()).thenReturn(clusterClient); + when(clusterClient.health(any(ClusterHealthRequest.class), any(RequestOptions.class))).thenReturn(response); + when(response.getStatus()).thenReturn(ClusterHealthStatus.GREEN); + HealthCheck.Result result = healthCheck.check(); + + assertTrue(result.isHealthy()); + assertEquals(result.getMessage(), "Last status: GREEN"); + } + + @Test + public void canHaveUnHealthyResultsWithFormattedMessage() throws Exception { + RestHighLevelClient client = mock(RestHighLevelClient.class); + ClusterClient clusterClient = mock(ClusterClient.class); + EsClusterHealthCheck healthCheck = new EsClusterHealthCheck(client); + ClusterHealthResponse response = mock(ClusterHealthResponse.class); + + when(client.cluster()).thenReturn(clusterClient); + when(clusterClient.health(any(ClusterHealthRequest.class), any(RequestOptions.class))).thenReturn(response); + when(response.getStatus()).thenReturn(ClusterHealthStatus.RED); + HealthCheck.Result result = healthCheck.check(); + + assertFalse(result.isHealthy()); + assertEquals(result.getMessage(), "Last status: RED"); + } + + @Test + public void canHaveUnHealthyResultsOnYellowWithFormattedMessage() throws Exception { + RestHighLevelClient client = mock(RestHighLevelClient.class); + ClusterClient clusterClient = mock(ClusterClient.class); + EsClusterHealthCheck healthCheck = new EsClusterHealthCheck(client, true); + ClusterHealthResponse response = mock(ClusterHealthResponse.class); + + when(client.cluster()).thenReturn(clusterClient); + when(clusterClient.health(any(ClusterHealthRequest.class), any(RequestOptions.class))).thenReturn(response); + when(response.getStatus()).thenReturn(ClusterHealthStatus.YELLOW); + HealthCheck.Result result = healthCheck.check(); + + assertFalse(result.isHealthy()); + assertEquals(result.getMessage(), "Last status: YELLOW"); + } } diff --git a/src/test/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheckTest.java b/src/test/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheckTest.java index e98bd08..d2faa72 100644 --- a/src/test/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheckTest.java +++ b/src/test/java/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheckTest.java @@ -2,12 +2,22 @@ import com.google.common.collect.ImmutableList; +import com.codahale.metrics.health.HealthCheck; + +import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.client.core.CountRequest; +import org.elasticsearch.client.core.CountResponse; import org.junit.Test; import java.util.Collections; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; /** * Unit tests for {@link EsIndexDocsHealthCheck}. @@ -47,4 +57,29 @@ public void initializationWithDocumentThresholdTooLowShouldFail() { public void initializationWithValidParametersShouldSucceedl() { new EsIndexDocsHealthCheck(mock(RestHighLevelClient.class), "index", 10L); } + + + @Test + public void canHaveHealthyResultsWithFormattedMessage() throws Exception { + RestHighLevelClient client = mock(RestHighLevelClient.class); + EsIndexDocsHealthCheck healthCheck = new EsIndexDocsHealthCheck(client, "index"); + CountResponse countResponse = mock(CountResponse.class); + when(client.count(any(CountRequest.class), any(RequestOptions.class))).thenReturn(countResponse); + when(countResponse.getCount()).thenReturn(10L); + HealthCheck.Result result = healthCheck.check(); + assertTrue(result.isHealthy()); + assertEquals(result.getMessage(), "Last stats: [index (10!)]"); + } + + @Test + public void canHaveUnhealthyResultsWithFormattedMessage() throws Exception { + RestHighLevelClient client = mock(RestHighLevelClient.class); + EsIndexDocsHealthCheck healthCheck = new EsIndexDocsHealthCheck(client, "index"); + CountResponse countResponse = mock(CountResponse.class); + when(client.count(any(CountRequest.class), any(RequestOptions.class))).thenReturn(countResponse); + when(countResponse.getCount()).thenReturn(0L); + HealthCheck.Result result = healthCheck.check(); + assertFalse(result.isHealthy()); + assertEquals(result.getMessage(), "Last stats: [index (0)]"); + } } diff --git a/src/test/java/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheckTest.java b/src/test/java/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheckTest.java index 9036047..65cd8f1 100644 --- a/src/test/java/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheckTest.java +++ b/src/test/java/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheckTest.java @@ -2,16 +2,29 @@ import com.google.common.collect.ImmutableList; +import com.codahale.metrics.health.HealthCheck; + +import org.elasticsearch.client.IndicesClient; +import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; +import org.elasticsearch.client.indices.GetIndexRequest; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.junit.MockitoJUnitRunner; import java.util.Collections; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; /** * Unit tests for {@link EsIndexExistsHealthCheck}. */ +@RunWith(MockitoJUnitRunner.class) public class EsIndexExistsHealthCheckTest { @Test(expected = NullPointerException.class) public void initializationWithNullClientShouldFail() { @@ -37,4 +50,29 @@ public void initializationWithClientAndIndexShouldSucceed() { public void initializationWithClientAndIndicesShouldSucceed() { new EsIndexExistsHealthCheck(mock(RestHighLevelClient.class), ImmutableList.of("index", "foobar")); } + + @Test + public void canHaveHealthyResults() throws Exception { + RestHighLevelClient client = mock(RestHighLevelClient.class); + IndicesClient indicesClient = mock(IndicesClient.class); + EsIndexExistsHealthCheck healthCheck = new EsIndexExistsHealthCheck(client, "index"); + + when(client.indices()).thenReturn(indicesClient); + when(indicesClient.exists(any(GetIndexRequest.class), any(RequestOptions.class))).thenReturn(true); + HealthCheck.Result result = healthCheck.check(); + assertTrue(result.isHealthy()); + } + + @Test + public void canHaveUnhealthyResultsWithFormattedMessage() throws Exception { + RestHighLevelClient client = mock(RestHighLevelClient.class); + IndicesClient indicesClient = mock(IndicesClient.class); + EsIndexExistsHealthCheck healthCheck = new EsIndexExistsHealthCheck(client, "index"); + + when(client.indices()).thenReturn(indicesClient); + when(indicesClient.exists(any(GetIndexRequest.class), any(RequestOptions.class))).thenReturn(false); + HealthCheck.Result result = healthCheck.check(); + assertFalse(result.isHealthy()); + assertEquals(result.getMessage(), "One or more indices do not exist."); + } } diff --git a/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java b/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java index c8078cc..a04cf36 100644 --- a/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java +++ b/src/test/java/io/dropwizard/elasticsearch/managed/ManagedEsClientTest.java @@ -5,6 +5,7 @@ import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import org.elasticsearch.client.sniff.Sniffer; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; @@ -37,7 +38,7 @@ public class ManagedEsClientTest { .create(EsConfiguration.class, validator, Jackson.newObjectMapper(), "dw"); @Test(expected = NullPointerException.class) - public void ensureEsConfigurationIsNotNull() { + public void ensureEsConfigurationIsNotNull() throws Exception { new ManagedEsClient((EsConfiguration) null); } @@ -63,7 +64,25 @@ public void stopShouldCloseTheClient() throws Exception { } @Test - public void highLevelRestClientShouldBeCreatedFromConfig() throws URISyntaxException, IOException, ConfigurationException { + public void stopShouldCloseTheClientWithSniffer() throws Exception { + RestHighLevelClient client = + mock(RestHighLevelClient.class); + Sniffer sniffer = mock(Sniffer.class); + Managed managed = new ManagedEsClient(client, sniffer); + // to stub a final method it is necessary to have the + // /src/test/resources/mockito-extensions/org.mockiot.plugins.MockMaker file + // with `mock-maker-inline` as context + doNothing().when(client).close(); + doNothing().when(sniffer).close(); + assertNotNull(client); + managed.start(); + managed.stop(); + verify(client).close(); + verify(sniffer).close(); + } + + @Test + public void highLevelRestClientShouldBeCreatedFromConfig() throws Exception { URL configFileUrl = this.getClass().getResource("/rest_client.yml"); File configFile = new File(configFileUrl.toURI()); EsConfiguration config = configFactory.build(configFile); @@ -96,4 +115,38 @@ public void highLevelRestClientShouldBeCreatedFromConfig() throws URISyntaxExcep 9202, restHighLevelClient.getLowLevelClient().getNodes().get(2).getHost().getPort()); } + + @Test + public void highLevelRestClientShouldBeCreatedFromConfigWithExtendedFields() throws Exception { + URL configFileUrl = this.getClass().getResource("/rest_client_with_sniffer_on_failure.yml"); + File configFile = new File(configFileUrl.toURI()); + EsConfiguration config = configFactory.build(configFile); + + ManagedEsClient managedEsClient = new ManagedEsClient(config); + RestHighLevelClient restHighLevelClient = managedEsClient.getClient(); + + assertNotNull(restHighLevelClient); + + assertEquals(1, restHighLevelClient.getLowLevelClient().getNodes().size()); + assertEquals( + "127.0.0.1", + restHighLevelClient.getLowLevelClient().getNodes().get(0).getHost().getHostName()); + } + + @Test + public void highLevelRestClientShouldBeCreatedWithSniffer() throws Exception { + URL configFileUrl = this.getClass().getResource("/rest_client_sniffer.yml"); + File configFile = new File(configFileUrl.toURI()); + EsConfiguration config = configFactory.build(configFile); + + ManagedEsClient managedEsClient = new ManagedEsClient(config); + RestHighLevelClient restHighLevelClient = managedEsClient.getClient(); + + assertNotNull(restHighLevelClient); + + assertEquals(1, restHighLevelClient.getLowLevelClient().getNodes().size()); + assertEquals( + "127.0.0.1", + restHighLevelClient.getLowLevelClient().getNodes().get(0).getHost().getHostName()); + } } diff --git a/src/test/resources/rest_client_sniffer.yml b/src/test/resources/rest_client_sniffer.yml new file mode 100644 index 0000000..69d6d99 --- /dev/null +++ b/src/test/resources/rest_client_sniffer.yml @@ -0,0 +1,15 @@ +servers: + - http://127.0.0.1 +connectTimeOut: 5000 +socketTimeOut: 60000 +numberOfThreads: 1 +node: "node_one" +headers: + header_one: value +basicAuthentication: + user: one_user + password: mYsEcReT +sniffer: + sniffOnFailure: false + sniffIntervalMillis: 6000 + sniffAfterFailureDelayMillis: 60000 diff --git a/src/test/resources/rest_client_with_sniffer_on_failure.yml b/src/test/resources/rest_client_with_sniffer_on_failure.yml new file mode 100644 index 0000000..b351891 --- /dev/null +++ b/src/test/resources/rest_client_with_sniffer_on_failure.yml @@ -0,0 +1,10 @@ +servers: + - http://127.0.0.1 +connectTimeOut: 5000 +socketTimeOut: 60000 +numberOfThreads: 1 +node: "node_one" +sniffer: + sniffOnFailure: true + sniffIntervalMillis: 6000 + sniffAfterFailureDelayMillis: 60000

  • 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 \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save ( ) { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=$(save "$@") + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..e95643d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,84 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/repository.gradle b/repository.gradle new file mode 100644 index 0000000..dce3bf9 --- /dev/null +++ b/repository.gradle @@ -0,0 +1,25 @@ +apply plugin: 'maven' + +// In order to upload to the repo, you need a file ~/.gradle/gradle.properties with +// repoUser= +// repoPassword= +uploadArchives { + repositories { + mavenDeployer { + snapshotRepository(url: "https://repo.i.gini.net/nexus/content/repositories/snapshots") { + authentication( + userName: project.hasProperty('repoUser') ? repoUser : "invalidUserName", + password: project.hasProperty('repoPassword') ? repoPassword : "invalidPassword" + ) + uniqueVersion = false + } + + repository(url: "https://repo.i.gini.net/nexus/content/repositories/gini-internal-libs/") { + authentication( + userName: project.hasProperty('repoUser') ? repoUser : 'invalidUserName', + password: project.hasProperty('repoPassword') ? repoPassword : 'invalidPassword' + ) + } + } + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..144756a --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'dropwizard-elasticsearch' From 50a307781c22962df007d4f429b7c950c671afc4 Mon Sep 17 00:00:00 2001 From: Rico Landefeld Date: Mon, 23 Jul 2018 14:23:31 +0200 Subject: [PATCH 03/22] updates gradle --- .gradle/3.4.1/taskHistory/fileHashes.bin | Bin 26347 -> 26347 bytes .gradle/3.4.1/taskHistory/fileSnapshots.bin | Bin 75286 -> 75785 bytes .gradle/3.4.1/taskHistory/taskHistory.bin | Bin 23234 -> 25468 bytes .gradle/3.4.1/taskHistory/taskHistory.lock | Bin 17 -> 17 bytes build.gradle | 5 +++++ gradle/wrapper/gradle-wrapper.jar | Bin 54212 -> 54212 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- 7 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.gradle/3.4.1/taskHistory/fileHashes.bin b/.gradle/3.4.1/taskHistory/fileHashes.bin index b6cee3dae6aab251a62d891ee22cf6ab78b5d6bf..19a241a072d668ef3ff08157a179be5f72f3c1fb 100644 GIT binary patch delta 150 zcmaETmhtsj#tkVR_2RdGFn|Ha6(FT&3?wvxSP_H;7Iy?I`(AyW^frafE7j-Ia|Q;+ yl;dz6myclT5KWlLcq#1rrt8Wxc<%Sr%cJUG0Gfbm$K=Nz;>1`?V;tO&va%d$mH-In*hsXBA(`OTO9T?`D2 zDaYAfC;%ma;PMe5fu>{Cr9W;O<}Lb#vu=BMy}u%Zs)OMrx{k?@J;a%TZrJ?SzPYhQO|h!yPx*eo%)9s(+ol z7bqz9ul?7LDGm#vg1wVvB?B~^H~8OdbcxG`2&#$whl0$@Z+=eWl2nB%W|^ES>CE_X zqv8+ojRqQGn;ku_-kt2|aYJBnN3gQ*)z?XHQ`o#xeLg*(tm#=PAeu0f@lx3LP1luY O@Z9gKm!G`Jvk3r4rAC1O delta 46 zcmeCYz%uO&%LWq(M*hjB5(blNB@!lo1>#&ukI7FZtr;sfD*h1PXs|$Rv!ln=y8xIb B5_JFo diff --git a/.gradle/3.4.1/taskHistory/taskHistory.bin b/.gradle/3.4.1/taskHistory/taskHistory.bin index 493f3d0cb6a16e37e6350ee558488cc9aea6bb87..92cdc2df4ee4ebf59e3a356d32897ca500ff1100 100644 GIT binary patch delta 183 zcmX@KmGRFp#t9;Vj0|Al;mE+ik^y8YZdCjtK3P)2i7D#P=2(eTr*vZm29AwDyb^?& z7+89e5=)XZf|H9f3reDXDF(+b*YxYiN-T2A%t;kfS)9U>w5xjz1(S2&5;MUG@V2lA#NJ delta 24 fcmX@IocYLd<_)ojm?jl$jz1(S2&5;MUG@V2j42A( diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 24baa69..f8fb619 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Jul 23 14:04:36 CEST 2018 +#Mon Jul 23 14:23:07 CEST 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.4.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip From e9e1162725c585449decff36586cb5bb6357df7e Mon Sep 17 00:00:00 2001 From: Rico Landefeld Date: Mon, 23 Jul 2018 14:28:10 +0200 Subject: [PATCH 04/22] adds Jenkinsfile --- Jenkinsfile | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ build.gradle | 26 ++++++++++++++++++++------ 2 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..c242f12 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,51 @@ +#!groovy +@Library('gini-shared-library@master') _ + + +pipeline { + agent { + label 'base' + } + + environment { + PROJECT_NAME = getProjectName() + } + + options { + gitLabConnection('git.i.gini.net') + } + + stages { + stage('Build and test') { + steps { + updateGitlabCommitStatus name: 'pipeline', state: 'running' + sh "./gradlew -g=/efs/${PROJECT_NAME} -I /efs/init.gradle -Pbranch=${env.GIT_BRANCH} -PbuildNumber=${env.BUILD_NUMBER} clean build testReport jacocoTestReport jacocoSumTestReport" + } + post { + always { + junit '**/test-results/**/*.xml' + publishHTML(target: [reportDir : 'build/reports/allTests/', + reportFiles: 'index.html', + reportName : 'Test results']) + publishHTML(target: [reportDir : 'build/reports/jacoco/jacocoSumTestReport/html/', + reportFiles: 'index.html', + reportName : 'Jacoco Code Coverage']) + } + failure { + updateGitlabCommitStatus name: 'Build and test', state: 'failed' + } + success { + updateGitlabCommitStatus name: 'Build and test', state: 'success' + } + } + } + } + post { + failure { + updateGitlabCommitStatus name: 'pipeline', state: 'failed' + } + success { + updateGitlabCommitStatus name: 'pipeline', state: 'success' + } + } +} diff --git a/build.gradle b/build.gradle index 16ab127..7d70cd1 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,6 @@ apply plugin: 'java' apply plugin: 'maven' +apply plugin: 'jacoco' apply from: file('repository.gradle') group = 'io.dropwizard.modules' @@ -13,20 +14,33 @@ tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } - - repositories { maven { url "http://repo.maven.apache.org/maven2" } } -task wrapper(type: Wrapper) { - gradleVersion = '4.9' -} - dependencies { compile group: 'io.dropwizard', name: 'dropwizard-core', version:'1.2.5' compile group: 'org.elasticsearch.client', name: 'transport', version:'5.6.10' testCompile group: 'junit', name: 'junit', version:'4.12' testCompile group: 'org.mockito', name: 'mockito-core', version:'2.19.0' } + +task testReport(type: TestReport) { + destinationDir = file("$buildDir/reports/allTests") + // Include the results from the `test` task in all subprojects + reportOn subprojects*.test +} + +task jacocoSumTestReport(type: JacocoReport) { + group = "Reporting" + description = "Generate Jacoco coverage reports for all subprojects after running tests." + executionData fileTree(project.rootDir.absolutePath).include("*/build/jacoco/*.exec") + subprojects.each { + sourceSets it.sourceSets.main + } +} + +task wrapper(type: Wrapper) { + gradleVersion = '4.9' +} From 358d966b5653524021213bbc2fcb511eb96b1637 Mon Sep 17 00:00:00 2001 From: Rico Landefeld Date: Mon, 23 Jul 2018 14:34:35 +0200 Subject: [PATCH 05/22] adds upload archives --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index c242f12..903a8a5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -19,7 +19,7 @@ pipeline { stage('Build and test') { steps { updateGitlabCommitStatus name: 'pipeline', state: 'running' - sh "./gradlew -g=/efs/${PROJECT_NAME} -I /efs/init.gradle -Pbranch=${env.GIT_BRANCH} -PbuildNumber=${env.BUILD_NUMBER} clean build testReport jacocoTestReport jacocoSumTestReport" + sh "./gradlew -g=/efs/${PROJECT_NAME} -I /efs/init.gradle -Pbranch=${env.GIT_BRANCH} -PbuildNumber=${env.BUILD_NUMBER} clean build uploadArchives" } post { always { From 884ec0045bd3c9b8f67c05cffe04cf0bdf58262e Mon Sep 17 00:00:00 2001 From: Rico Landefeld Date: Mon, 23 Jul 2018 14:35:21 +0200 Subject: [PATCH 06/22] removes test reports --- Jenkinsfile | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 903a8a5..1bf7837 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -22,15 +22,6 @@ pipeline { sh "./gradlew -g=/efs/${PROJECT_NAME} -I /efs/init.gradle -Pbranch=${env.GIT_BRANCH} -PbuildNumber=${env.BUILD_NUMBER} clean build uploadArchives" } post { - always { - junit '**/test-results/**/*.xml' - publishHTML(target: [reportDir : 'build/reports/allTests/', - reportFiles: 'index.html', - reportName : 'Test results']) - publishHTML(target: [reportDir : 'build/reports/jacoco/jacocoSumTestReport/html/', - reportFiles: 'index.html', - reportName : 'Jacoco Code Coverage']) - } failure { updateGitlabCommitStatus name: 'Build and test', state: 'failed' } From 2c119f95c22674a63c76a499cdda16fd22277d0b Mon Sep 17 00:00:00 2001 From: Rico Landefeld Date: Mon, 23 Jul 2018 14:39:58 +0200 Subject: [PATCH 07/22] sets minor version to build number --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 7d70cd1..561fa09 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ apply plugin: 'jacoco' apply from: file('repository.gradle') group = 'io.dropwizard.modules' -version = '1.2.5-1-SNAPSHOT' +version = buildNumber == 'SNAPSHOT' ? "${baseVersion}-${buildNumber}" : "${baseVersion}.${buildNumber}" description = """Dropwizard Elasticsearch Bundle""" From c0634199d77908162a83db66b9eef2ae80572f97 Mon Sep 17 00:00:00 2001 From: Rico Landefeld Date: Mon, 23 Jul 2018 14:46:59 +0200 Subject: [PATCH 08/22] configures versioning --- .gitignore | 2 ++ .gradle/4.9/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/4.9/fileContent/fileContent.lock | Bin 0 -> 17 bytes .gradle/4.9/fileHashes/fileHashes.bin | Bin 0 -> 21947 bytes .gradle/4.9/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .gradle/4.9/fileHashes/resourceHashesCache.bin | Bin 0 -> 18701 bytes .gradle/4.9/taskHistory/taskHistory.bin | Bin 0 -> 184510 bytes .gradle/4.9/taskHistory/taskHistory.lock | Bin 0 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 2 -- .../buildOutputCleanup/cache.properties.lock | 1 - .../built.bin => vcsWorkingDirs/gc.properties} | 0 gradle.properties | 2 ++ 12 files changed, 4 insertions(+), 3 deletions(-) create mode 100644 .gradle/4.9/fileChanges/last-build.bin create mode 100644 .gradle/4.9/fileContent/fileContent.lock create mode 100644 .gradle/4.9/fileHashes/fileHashes.bin create mode 100644 .gradle/4.9/fileHashes/fileHashes.lock create mode 100644 .gradle/4.9/fileHashes/resourceHashesCache.bin create mode 100644 .gradle/4.9/taskHistory/taskHistory.bin create mode 100644 .gradle/4.9/taskHistory/taskHistory.lock delete mode 100644 .gradle/buildOutputCleanup/cache.properties delete mode 100644 .gradle/buildOutputCleanup/cache.properties.lock rename .gradle/{buildOutputCleanup/built.bin => vcsWorkingDirs/gc.properties} (100%) create mode 100644 gradle.properties diff --git a/.gitignore b/.gitignore index 8216d5e..7978ebe 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,8 @@ release.properties *.iws .idea/ out/ +build/ +**/buildOutputCleanup/ # Eclipse .settings/ diff --git a/.gradle/4.9/fileChanges/last-build.bin b/.gradle/4.9/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/.gradle/4.9/fileContent/fileContent.lock b/.gradle/4.9/fileContent/fileContent.lock new file mode 100644 index 0000000000000000000000000000000000000000..c31cfa7e6382539cafc3fa379a9b4c6274ebbe3c GIT binary patch literal 17 TcmZSXi}&rWUH$em0~7!NIQ#_B literal 0 HcmV?d00001 diff --git a/.gradle/4.9/fileHashes/fileHashes.bin b/.gradle/4.9/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..055655d0fb40e6d9fd30ec434cfcec6799fa5d69 GIT binary patch literal 21947 zcmeI3c{EgiAIGm{FoVaGOqO4Z1|_omP$HE|ni=~}w$R2?l1iIS%CAziTiS#usYrhP z+7x9X;SniXPNm3NO3NVSx#N4knmgAYo`0Y7z30r#J+Jw^?)QG*pF7t*$GrwKzsRfgZ3sxVZUo%T5Ayu4;ZL6(ESUzloi60pn%k1E zs#N3wZr=g(k0M5G)d7+}=ezteedcfV|Am^X0t_j>Uy_~2wguLuo-QMcI zdBuR+eTKYzb<{vxt(*+t4&xxNSYdYP%H`lkfV-AKUUNg>9}w7j1aN2hA$~XRkDSql(gX+Grjtonz_MeT*4 z-ZdEV=W83MR^F692e_Labxm}=qrlj%4Gk^G5++6bbqJJ*u99_rU>x z^8}E$%nP=R>9!*39mhi6y7p~F`d(9cQ17%J@~>ehE<4Xk3Ig1P2KhG~?b-al1*?d0 z>me8LW13!_e)0}*w*!#(v-+ccS=km5+gSr!# z1UaM9+$*8${XwFh1G&PY@JR|PtOLaMs~~6QdHoeu)p8ba?sCXk>=1slM8|W$Ije^F zRDMfA)Fa|JcX|f-r0k5_+a4H%fO^+N$k{$;f|Ps=EC6>XfLtpk&{!)vbKdV~G04kehf()#%;7Mx1}_Zwzt28T%V$mk|ARIRUxplr)J4 z+D64-JNE97n{8ZNtZSe06YxdWkXzAn8NH@_9^g*rAfG*j|C;4pa0PHq4de^8{-a}T za(^e_+@C|db=lRXv71X?JndV>bp&fUcH+R>Ro$>xU)8|JNM@!UdG{i=2)r;%BBV^Flep6xGr)@s$i`8Lq$^pg4F|R_X-iVu zSvYRc&}rF&SKw6(!vihL%?m)Vt<({ z(EIdp(p$@rG@()YLK_H}Y#G(qbTik^o5z2d#ExC-S=pB}Xmqx`0SYseYFOP+A6>Kj zvrdyA`_7cnX{zKg7^zglT7Tjc#qc~k+veNr{dNQzkq!DJs=-m-t&a_Ktr*LmduZK; zo?^10978oWtkupdFORHD%Hg%MteFo6jrVpN@k)G=#?uzhDx2qg)>=0<@mgwagu*%x z{9bLmgSxDV!g>somBQb|(oHB-?9bn3n_1`S)}MN5^lq}jY^NFqpCWhf>^fu~Ay=ZD zQWEo)Y%qlPGmDLJ{Gxq|dU&1usH>AAtM`}2k`1{gsBdZ#rkn*Yl@FkaOUd%4E>MO=ak?TqK1_4IRi1{wu`1(&h}Ha zofFDDpU(AlCL44Os_}l($q6^#{hV#KRO8x1?YMhF<97!!{HPHh=Mw2+%c(}l$U65SCn)qX*OrGz>gYUYwiWys| z#^LV9RKtcR6^((J5mz4xo{AZ>sK$kcqkh3Gqx~DsrKL`coQ`*lG!HJ-7_J|`kKK{> zL&O+iKSYcX_Cv%NVLwES5%xpG7-2s|j1l%j#2BU@`R}YQy4)-HY=-R%{A4bnDC}UF z?lj_AEybDC4#u_e8<(t2icBcVZY(@v@CVtz9#M@5Cw8F1ymK~1RUcj$m+^YV3@xg$ ztY7(xb4Kp{<9%=2=%;hDNru!a1*$Q&Wx#&?hc^>14TWL;M)`#Jy7=A=h?)?UTBFu7;Ro4}J4PKtA#uIWN~SI+po4qgzBd$q;!t!R z@*Ake8oEtrUCGraXC9WtF{QYh$p#~YY8>nR*Dtk@R!!N(UrZe;Z!8cqgip7M_2cq_ zj8)3E>^U9&?vE`DdeX>-oH5n-HcvC1e*2;eFLi!E)Phs0V#YM8u~ATdO{yYQ>13(D zQl0h$O)*1wkuSDaMm=HKA=tt@9otU#@K+?yCmW1mj$Pv}GkU5$%foa>b=W7y@hGw( zJ}k`0;-b+6>MTX&rB8k4_9{hNokYX*LOE80OxH>$x} zw8QLIR+H%|6Ln)L+g#!b8J-!W@p*~QT*X$yAvSHVymHr`$NDdnR1yN^_WdHyG literal 0 HcmV?d00001 diff --git a/.gradle/4.9/fileHashes/fileHashes.lock b/.gradle/4.9/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..8b2a0adb12b4a86fdea040ffe6282bf30eb5a3d8 GIT binary patch literal 17 UcmZQRw{!Nsa+am986dzP06yOZJ^%m! literal 0 HcmV?d00001 diff --git a/.gradle/4.9/fileHashes/resourceHashesCache.bin b/.gradle/4.9/fileHashes/resourceHashesCache.bin new file mode 100644 index 0000000000000000000000000000000000000000..2e6c65f0a91168113112b1d95c830b265359526a GIT binary patch literal 18701 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 literal 0 HcmV?d00001 diff --git a/.gradle/4.9/taskHistory/taskHistory.lock b/.gradle/4.9/taskHistory/taskHistory.lock new file mode 100644 index 0000000000000000000000000000000000000000..59912ca4a50b4653c7b3524ee750f8259356e5b9 GIT binary patch literal 17 TcmZRMU|kmHT=2M?0Rq?oDWwCA literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index a85d41e..0000000 --- a/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Mon Jul 23 14:04:36 CEST 2018 -gradle.version=3.4.1 diff --git a/.gradle/buildOutputCleanup/cache.properties.lock b/.gradle/buildOutputCleanup/cache.properties.lock deleted file mode 100644 index 40fdece..0000000 --- a/.gradle/buildOutputCleanup/cache.properties.lock +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/.gradle/buildOutputCleanup/built.bin b/.gradle/vcsWorkingDirs/gc.properties similarity index 100% rename from .gradle/buildOutputCleanup/built.bin rename to .gradle/vcsWorkingDirs/gc.properties diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..c16bd3d --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +baseVersion=1.2.5 +buildNumber=SNAPSHOT \ No newline at end of file From bab9fd9c308441df7e59e75e4947b854191b6cfa Mon Sep 17 00:00:00 2001 From: Jue Wang Date: Sun, 26 May 2019 02:27:09 +0200 Subject: [PATCH 09/22] switch to elasticsearch 7.1.0 and use hightlevel rest client --- .gradle/4.9/fileHashes/fileHashes.bin | Bin 21947 -> 22147 bytes .gradle/4.9/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes build.gradle | 11 +- .../config/EsConfiguration.class | Bin 1528 -> 0 bytes .../health/EsClusterHealthCheck.class | Bin 2276 -> 0 bytes .../health/EsIndexDocsHealthCheck.class | Bin 4759 -> 0 bytes .../health/EsIndexExistsHealthCheck.class | Bin 2796 -> 0 bytes .../managed/ManagedEsClient.class | Bin 4330 -> 0 bytes .../util/TransportAddressHelper.class | Bin 1795 -> 0 bytes build/ivy.xml | 33 ----- ...pwizard-elasticsearch-1.2.5-1-SNAPSHOT.jar | Bin 9976 -> 0 bytes build/poms/pom-default.xml | 34 ------ build/tmp/jar/MANIFEST.MF | 2 - gradle.properties | 4 +- gradle/wrapper/gradle-wrapper.jar | Bin 54212 -> 55616 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 24 +++- gradlew.bat | 18 ++- repository.gradle | 1 - .../elasticsearch/config/EsConfiguration.java | 39 ++---- .../managed/ManagedEsClient.java | 76 +++--------- .../util/TransportAddressHelper.java | 48 -------- .../managed/ManagedEsClientTest.java | 114 ++++++++---------- .../util/TransportAddressHelperTest.java | 75 ------------ src/test/resources/custom_settings_file.yml | 2 - .../resources/custom_settings_precedence.yml | 6 - src/test/resources/elasticsearch.yml | 2 - .../resources/elasticsearch_precedence.yml | 3 - .../org.mockito.plugins.MockMaker | 1 + src/test/resources/rest_client.yml | 4 + src/test/resources/transport_client.yml | 5 - ...ransport_client_with_empty_server_list.yml | 2 - 32 files changed, 132 insertions(+), 375 deletions(-) delete mode 100644 build/classes/main/io/dropwizard/elasticsearch/config/EsConfiguration.class delete mode 100644 build/classes/main/io/dropwizard/elasticsearch/health/EsClusterHealthCheck.class delete mode 100644 build/classes/main/io/dropwizard/elasticsearch/health/EsIndexDocsHealthCheck.class delete mode 100644 build/classes/main/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheck.class delete mode 100644 build/classes/main/io/dropwizard/elasticsearch/managed/ManagedEsClient.class delete mode 100644 build/classes/main/io/dropwizard/elasticsearch/util/TransportAddressHelper.class delete mode 100644 build/ivy.xml delete mode 100644 build/libs/dropwizard-elasticsearch-1.2.5-1-SNAPSHOT.jar delete mode 100644 build/poms/pom-default.xml delete mode 100644 build/tmp/jar/MANIFEST.MF delete mode 100644 src/main/java/io/dropwizard/elasticsearch/util/TransportAddressHelper.java delete mode 100644 src/test/java/io/dropwizard/elasticsearch/util/TransportAddressHelperTest.java delete mode 100644 src/test/resources/custom_settings_file.yml delete mode 100644 src/test/resources/custom_settings_precedence.yml delete mode 100644 src/test/resources/elasticsearch.yml delete mode 100644 src/test/resources/elasticsearch_precedence.yml create mode 100644 src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker create mode 100644 src/test/resources/rest_client.yml delete mode 100644 src/test/resources/transport_client.yml delete mode 100644 src/test/resources/transport_client_with_empty_server_list.yml diff --git a/.gradle/4.9/fileHashes/fileHashes.bin b/.gradle/4.9/fileHashes/fileHashes.bin index 055655d0fb40e6d9fd30ec434cfcec6799fa5d69..0c41927786577203285a41b49be7b330fbfe1d0b 100644 GIT binary patch delta 257 zcmdnJnz4B;;|3E6M$gTr5*kbbH$|?g^!-2jngI+#cTWzLnj!GoU6M1@f4(wAFf4HM zQz=6x{*>weBt;dPpn~$7d1X5o1u8tIbLZSS)dSW4c5<(rHsi~Uia*3R8W;#}cJ!#? zH8KWDY67t$2n+0eez!9{KD;NkV&(e-;ZGMZFfe94wTN2*lmr5PB_N?U+0jGMKI>KB zh6=DCPy{53YR(aX2d%Es$LC!7+*3SJedZpJIj_Pm2|;wQ?w!2QLsbyT3>J`t9stXZ BM+X1^ delta 49 zcmV-10M7q|tpU5M0kAX}0Y$Sl7$^dhbsCVf9UCbEvtAv40h9F}BLRuAA@~=uFpv?m HK}dQHq>&Kx diff --git a/.gradle/4.9/fileHashes/fileHashes.lock b/.gradle/4.9/fileHashes/fileHashes.lock index 8b2a0adb12b4a86fdea040ffe6282bf30eb5a3d8..e6e7c3355aa272f4b99cfc7dbc331ffefddd47df 100644 GIT binary patch literal 17 UcmZQRw{!Nsa+am986Y4O06ygfL;wH) literal 17 UcmZQRw{!Nsa+am986dzP06yOZJ^%m! diff --git a/build.gradle b/build.gradle index 561fa09..e386681 100644 --- a/build.gradle +++ b/build.gradle @@ -20,10 +20,11 @@ repositories { } dependencies { - compile group: 'io.dropwizard', name: 'dropwizard-core', version:'1.2.5' - compile group: 'org.elasticsearch.client', name: 'transport', version:'5.6.10' + compile group: 'io.dropwizard', name: 'dropwizard-core', version:'1.3.11' + compile group: 'org.elasticsearch.client', name: 'transport', version:'7.1.0' + compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.1.0' testCompile group: 'junit', name: 'junit', version:'4.12' - testCompile group: 'org.mockito', name: 'mockito-core', version:'2.19.0' + testCompile group: 'org.mockito', name: 'mockito-core', version:'2.27.0' } task testReport(type: TestReport) { @@ -41,6 +42,6 @@ task jacocoSumTestReport(type: JacocoReport) { } } -task wrapper(type: Wrapper) { - gradleVersion = '4.9' +wrapper { + gradleVersion = '5.4.1' } diff --git a/build/classes/main/io/dropwizard/elasticsearch/config/EsConfiguration.class b/build/classes/main/io/dropwizard/elasticsearch/config/EsConfiguration.class deleted file mode 100644 index d0f648745c5d3e9f16e93e53a0266960dd023ddb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1528 zcmb7EZBG+H5S}e9ec_-`iUQ&bidZVLiXa*Y3289K)Jm-3v&(fk7O%HtZx7L5rHPHk z5B>mulyP>ig|_sAeA%6uoq6V&=XUSU-(SB0U=3d6AO{a~undo~kcE{DP_sWaktfDl zHOtd9tfgU{Ksw~=l&g@yc=ec_G8$>&)2aydCV^~ScmdOq;sn3=Y*J53&*v1) zrVMDnHGL&Ry%RL{q|%$)h%xgn3bbhQeG!TSpYH^L)JzK*U`uK-4q2$VI&1p$n7JQA z#9`-2^fmf>N}h0~KO@?rWpPGNnJ*d^273pgR!jssq&2B)k?&*Ti0elNw#J%Bz7Ui5 zS>VySRwD2)Wu+>WM~}n-S2!f^U`o{wx!XLk%`+j_8f%exzDtca>;%!e^})#2<&Kvl zMjxjG`cnAFba+byLT?ioDlP33NLFM6qxq@`cr9uo)%OflG!sde`TI->M~L;kDX$lA}i)OI4}dV zX?W(q2FyD!0uF)E9z7i>z@!7uVbOspxaPn#OcGeV`WL_#Xdj>z zd(D|VNaLDE&f|zwK;A`UIE~gUu5)k`Pn{SMb8n+Z;0{iju-zznrdz7~9frQ5k-!oF zLk%$PqBzwqjs>}k=l5U%S3|iQB-IbHFaU(WeOMg8Al+YF8c-ZFc!0f20~uucL6!%A K5LmLqmj40ZL|pU$ diff --git a/build/classes/main/io/dropwizard/elasticsearch/health/EsClusterHealthCheck.class b/build/classes/main/io/dropwizard/elasticsearch/health/EsClusterHealthCheck.class deleted file mode 100644 index 09c53988367b8805bbe73646759a4161af98c603..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2276 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 diff --git a/build/classes/main/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheck.class b/build/classes/main/io/dropwizard/elasticsearch/health/EsIndexExistsHealthCheck.class deleted file mode 100644 index dfdf768416787333794252322077eda738410739..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2796 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 diff --git a/build/classes/main/io/dropwizard/elasticsearch/util/TransportAddressHelper.class b/build/classes/main/io/dropwizard/elasticsearch/util/TransportAddressHelper.class deleted file mode 100644 index 3f539b1c86d217d089193d3b6762b01437050e7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1795 zcmbVNTW=Fb7(KIgve?;#KuEZ`T+?DZh2<7f>LfHx2(h$n5H^v3hiYOE&cb@v+FetX z=l&92c%^+HrKnZkkoX(?3#4AotQ~L-RjoYi%zQK7ob%0h+t+{n`a6KjC}%MS+r;@S zEL<>gQO}pMFmTz#Y!)W2n3x;E7r3g2FHMxPNMqi_f`GMheRb)!Q~mDd`mL&fC<}}( z2YwVwKi-gDTcv<$9t_XBz8fzJr1FIgf%I}vR|0z-*H_=Ro0}@E%1w_u`<h(}X(VFsF zDlC!dei$^@f+$|{>o<8Wa5wMNf~MUFf`+GTE}MaG`zp43v`Pgh2pfGwUDbGp>H|{J zjcoN&ogRQmz?2=E1#-><`A8E=?CM zqwwx=T|X*vT-hz6)#D7}jQ5)=F!k@K|Ipfr{A{1@`~aR@q>Dx?v8+A(Mz)d+GBGWX zskjYa#_f<<*6erJV7R;XX|@uy!JN_0HaZO-um!)9g zD=cZ2uLTwc$nE#}*Kf53Sr)i707(B;6Dt<3W7Wb9tO=a_-#WB#1V@=UiCaABH|+Jz z2dc&@HXAC|1uJkMU+5%Da$bo;*Kg=zp@J^>^>9Vqmu-)l>3q4sJ~h=%f?oZyZcfL$ z2f7)&e}A_UN?KzqG2~sb5i)WgGqh}O1Wu7sV3I6726YTB;Urt<82c`RjJ+7=ypNKB z{YY`m=yROpj?Gzc9x84_{FJCnaU4!IM{$sAtD}HJI7}&{eZ(Doxr!k|0=btk?i8OR zRopjSeU71R3_CAj-kI6Po@YEapfPo;2T>-7qj9G?cag&>)NjZkghPTQi0zn YQkg$7VxlPC5_E=J20rJ-v&rh*KP4sSp#T5? diff --git a/build/ivy.xml b/build/ivy.xml deleted file mode 100644 index bf0350c..0000000 --- a/build/ivy.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/libs/dropwizard-elasticsearch-1.2.5-1-SNAPSHOT.jar b/build/libs/dropwizard-elasticsearch-1.2.5-1-SNAPSHOT.jar deleted file mode 100644 index 7668c43da1e1d376a52af57c7e36f532abc0c28d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9976 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 diff --git a/build/poms/pom-default.xml b/build/poms/pom-default.xml deleted file mode 100644 index 42c9afa..0000000 --- a/build/poms/pom-default.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - 4.0.0 - io.dropwizard.modules - dropwizard-elasticsearch - 1.2.5-1-SNAPSHOT - - - io.dropwizard - dropwizard-core - 1.2.5 - compile - - - org.elasticsearch.client - transport - 5.6.10 - compile - - - junit - junit - 4.12 - test - - - org.mockito - mockito-core - 2.19.0 - test - - - diff --git a/build/tmp/jar/MANIFEST.MF b/build/tmp/jar/MANIFEST.MF deleted file mode 100644 index 58630c0..0000000 --- a/build/tmp/jar/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/gradle.properties b/gradle.properties index c16bd3d..5a4a818 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ -baseVersion=1.2.5 -buildNumber=SNAPSHOT \ No newline at end of file +baseVersion=1.3.11 +buildNumber=SNAPSHOT diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 43464d9288da3447265aed8b86c401e53307c90b..5c2d1cf016b3885f6930543d57b744ea8c220a1a 100644 GIT binary patch literal 55616 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