You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2018/10/09 13:56:26 UTC
svn commit: r1843285 - in /tomcat/trunk: TOMCAT-NEXT.txt
build.properties.default build.xml
java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
res/checkstyle/org-import-control.xml
Author: remm
Date: Tue Oct 9 13:56:25 2018
New Revision: 1843285
URL: http://svn.apache.org/viewvc?rev=1843285&view=rev
Log:
Switch from OpenJSON to Noggit.
Modified:
tomcat/trunk/TOMCAT-NEXT.txt
tomcat/trunk/build.properties.default
tomcat/trunk/build.xml
tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
tomcat/trunk/res/checkstyle/org-import-control.xml
Modified: tomcat/trunk/TOMCAT-NEXT.txt
URL: http://svn.apache.org/viewvc/tomcat/trunk/TOMCAT-NEXT.txt?rev=1843285&r1=1843284&r2=1843285&view=diff
==============================================================================
--- tomcat/trunk/TOMCAT-NEXT.txt (original)
+++ tomcat/trunk/TOMCAT-NEXT.txt Tue Oct 9 13:56:25 2018
@@ -38,6 +38,4 @@ New items for 10.0.x onwards:
3. Remove the ExtensionValidator and associated classes (assuming that the
minimum Java version is Java 9 or later).
-4. New builder style alternate embedded API (likely also for 9.x).
-
-5. Cloud aware cluster membership provider(s) (likely also for 9.x).
+4. New embedded APIs (likely also for 9.x).
Modified: tomcat/trunk/build.properties.default
URL: http://svn.apache.org/viewvc/tomcat/trunk/build.properties.default?rev=1843285&r1=1843284&r2=1843285&view=diff
==============================================================================
--- tomcat/trunk/build.properties.default (original)
+++ tomcat/trunk/build.properties.default Tue Oct 9 13:56:25 2018
@@ -283,14 +283,14 @@ saaj-api.home=${base.path}/saaj-api-${sa
saaj-api.jar=${saaj-api.home}/saaj-api-${saaj-api.version}.jar
saaj-api.loc=${base-maven.loc}/javax/xml/soap/saaj-api/${saaj-api.version}/saaj-api-${saaj-api.version}.jar
-# ----- OpenJSON, version 1.0.10 or later -----
-openjson.version=1.0.10
-openjson.checksum.enabled=true
-openjson.checksum.algorithm=MD5|SHA-1
-openjson.checksum.value=c7c4cb9266cacc0aab5dcbb59456720c|8dcccbcc8bbfa15162cd7ca77bcf2b9daa90e70a
-openjson.home=${base.path}/openjson-${openjson.version}
-openjson.jar=${openjson.home}/openjson-${openjson.version}.jar
-openjson.loc=${base-maven.loc}/com/github/openjson/openjson/${openjson.version}/openjson-${openjson.version}.jar
+# ----- Noggit, version 0.8 or later -----
+noggit.version=0.8
+noggit.checksum.enabled=true
+noggit.checksum.algorithm=MD5|SHA-1
+noggit.checksum.value=6856f2ceab2dd7128595e4659d22d581|ba4ad65a62d7dfcf97a8d42c82ae7d8824f9087f
+noggit.home=${base.path}/noggit-${noggit.version}
+noggit.jar=${noggit.home}/noggit-${noggit.version}.jar
+noggit.loc=${base-maven.loc}/org/noggit/noggit/${noggit.version}/noggit-${noggit.version}.jar
# ----- bnd & bndlib, version 4.0.0 or later -----
# ----- provides OSGI metadata for JARs -----
Modified: tomcat/trunk/build.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/build.xml?rev=1843285&r1=1843284&r2=1843285&view=diff
==============================================================================
--- tomcat/trunk/build.xml (original)
+++ tomcat/trunk/build.xml Tue Oct 9 13:56:25 2018
@@ -213,7 +213,7 @@
<path id="compile.classpath">
<pathelement location="${jdt.jar}"/>
<pathelement location="${saaj-api.jar}"/>
- <pathelement location="${openjson.jar}"/>
+ <pathelement location="${noggit.jar}"/>
</path>
<path id="tomcat.classpath">
@@ -2718,14 +2718,14 @@ skip.installer property in build.propert
<param name="checksum.value" value="${saaj-api.checksum.value}"/>
</antcall>
- <!-- Download openjson -->
+ <!-- Download noggit -->
<antcall target="downloadfile">
- <param name="sourcefile" value="${openjson.loc}"/>
- <param name="destfile" value="${openjson.jar}"/>
- <param name="destdir" value="${openjson.home}"/>
- <param name="checksum.enabled" value="${openjson.checksum.enabled}"/>
- <param name="checksum.algorithm" value="${openjson.checksum.algorithm}"/>
- <param name="checksum.value" value="${openjson.checksum.value}"/>
+ <param name="sourcefile" value="${noggit.loc}"/>
+ <param name="destfile" value="${noggit.jar}"/>
+ <param name="destdir" value="${noggit.home}"/>
+ <param name="checksum.enabled" value="${noggit.checksum.enabled}"/>
+ <param name="checksum.algorithm" value="${noggit.checksum.algorithm}"/>
+ <param name="checksum.value" value="${noggit.checksum.value}"/>
</antcall>
</target>
Modified: tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java?rev=1843285&r1=1843284&r2=1843285&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java (original)
+++ tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java Tue Oct 9 13:56:25 2018
@@ -35,11 +35,7 @@ import org.apache.catalina.tribes.member
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
import org.apache.tomcat.util.codec.binary.StringUtils;
-
-import com.github.openjson.JSONArray;
-import com.github.openjson.JSONException;
-import com.github.openjson.JSONObject;
-import com.github.openjson.JSONTokener;
+import org.noggit.JSONParser;
public class KubernetesMembershipProvider extends CloudMembershipProvider {
@@ -145,58 +141,170 @@ public class KubernetesMembershipProvide
protected void parsePods(Reader reader, List<MemberImpl> members)
throws IOException{
- JSONObject json = new JSONObject(new JSONTokener(reader));
- JSONArray items = json.getJSONArray("items");
+ int event = 0;
+ JSONParser parser = new JSONParser(reader);
+ boolean parseItems = false;
+ for (;;) {
+ event = parser.nextEvent();
+ switch (event) {
+ case JSONParser.STRING:
+ String value = parser.getString();
+ if (parser.wasKey()) {
+ if ("items".equals(value) && parser.nextEvent() == JSONParser.ARRAY_START) {
+ parseItems = true;
+ }
+ }
+ break;
+ case JSONParser.ARRAY_END:
+ parseItems = false;
+ break;
+ case JSONParser.OBJECT_START:
+ if (parseItems) {
+ parseItem(parser, members);
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (event == JSONParser.EOF)
+ break;
+ }
+
+ }
+
+ private void parseItem(JSONParser parser, List<MemberImpl> members)
+ throws IOException {
+ int event = 0;
+ String podIP = null;
+ // Name in first position, creation in second
+ String[] nameAndCreationTimestamp = null;
+ for (;;) {
+ event = parser.nextEvent();
+ switch (event) {
+ case JSONParser.STRING:
+ String value = parser.getString();
+ if (parser.wasKey()) {
+ if ("kind".equals(value)) {
+ // Verify the item is a pod
+ if (parser.nextEvent() != JSONParser.STRING && (!"Pod".equals(parser.getString()))) {
+ throw new IllegalStateException();
+ }
+ } else if ("status".equals(value)) {
+ // Verify the status is Running and return the podIP
+ podIP = parseStatus(parser);
+ } else if ("metadata".equals(value)) {
+ nameAndCreationTimestamp = parseMetadata(parser);
+ }
+ }
+ break;
+ case JSONParser.OBJECT_END:
+ // Done
+ if (podIP == null || nameAndCreationTimestamp == null
+ || nameAndCreationTimestamp[0] == null
+ || nameAndCreationTimestamp[1] == null) {
+ throw new IOException(sm.getString("kubernetesMembershipProvider.jsonError"));
+ } else {
+ // We found ourselves, ignore
+ if (nameAndCreationTimestamp[0].equals(hostName))
+ return;
+
+ // id = md5(hostname)
+ byte[] id = md5.digest(nameAndCreationTimestamp[0].getBytes());
+ long aliveTime = Duration.between(Instant.parse(nameAndCreationTimestamp[1]), startTime).getSeconds() * 1000; // aliveTime is in ms
+
+ MemberImpl member = null;
+ try {
+ member = new MemberImpl(podIP, port, aliveTime);
+ } catch (IOException e) {
+ // Shouldn't happen:
+ // an exception is thrown if hostname can't be resolved to IP, but we already provide an IP
+ log.error(sm.getString("kubernetesMembershipProvider.memberError"), e);
+ continue;
+ }
+
+ member.setUniqueId(id);
+ members.add(member);
+ }
+ return;
+ default:
+ break;
+ }
+
+ if (event == JSONParser.EOF)
+ break;
+ }
+
+ }
+
+ private String parseStatus(JSONParser parser)
+ throws IOException {
+ String result = null;
+ int event = 0;
+ for (;;) {
+ event = parser.nextEvent();
+ switch (event) {
+ case JSONParser.STRING:
+ String value = parser.getString();
+ if (parser.wasKey()) {
+ if ("phase".equals(value)) {
+ // Verify the item is a pod
+ if (parser.nextEvent() != JSONParser.STRING && (!"Running".equals(parser.getString()))) {
+ return null;
+ }
+ } else if ("podIP".equals(value)) {
+ if (parser.nextEvent() == JSONParser.STRING) {
+ result = parser.getString();
+ }
+ }
+ }
+ break;
+ case JSONParser.OBJECT_END:
+ // Done
+ return result;
+ default:
+ break;
+ }
+
+ if (event == JSONParser.EOF)
+ break;
+ }
+ return result;
+ }
- for (int i = 0; i < items.length(); i++) {
- String phase;
- String ip;
- String name;
- Instant creationTime;
-
- try {
- JSONObject item = items.getJSONObject(i);
- JSONObject status = item.getJSONObject("status");
- phase = status.getString("phase");
-
- // Ignore shutdown pods
- if (!phase.equals("Running"))
- continue;
-
- ip = status.getString("podIP");
-
- // Get name & start time
- JSONObject metadata = item.getJSONObject("metadata");
- name = metadata.getString("name");
- String timestamp = metadata.getString("creationTimestamp");
- creationTime = Instant.parse(timestamp);
- } catch (JSONException e) {
- log.error(sm.getString("kubernetesMembershipProvider.jsonError"), e);
- continue;
- }
-
- // We found ourselves, ignore
- if (name.equals(hostName))
- continue;
-
- // id = md5(hostname)
- byte[] id = md5.digest(name.getBytes());
- long aliveTime = Duration.between(creationTime, startTime).getSeconds() * 1000; // aliveTime is in ms
-
- MemberImpl member = null;
- try {
- member = new MemberImpl(ip, port, aliveTime);
- } catch (IOException e) {
- // Shouldn't happen:
- // an exception is thrown if hostname can't be resolved to IP, but we already provide an IP
- log.error(sm.getString("kubernetesMembershipProvider.memberError"), e);
- continue;
+ private String[] parseMetadata(JSONParser parser)
+ throws IOException {
+ String[] result = new String[2];
+ int event = 0;
+ for (;;) {
+ event = parser.nextEvent();
+ switch (event) {
+ case JSONParser.STRING:
+ String value = parser.getString();
+ if (parser.wasKey()) {
+ if ("name".equals(value)) {
+ if (parser.nextEvent() == JSONParser.STRING) {
+ result[0] = parser.getString();
+ }
+ } else if ("creationTimestamp".equals(value)) {
+ if (parser.nextEvent() == JSONParser.STRING) {
+ result[1] = parser.getString();
+ }
+ }
+ }
+ break;
+ case JSONParser.OBJECT_END:
+ // Done
+ return result;
+ default:
+ break;
}
- member.setUniqueId(id);
- members.add(member);
+ if (event == JSONParser.EOF)
+ break;
}
+ return result;
}
}
Modified: tomcat/trunk/res/checkstyle/org-import-control.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/res/checkstyle/org-import-control.xml?rev=1843285&r1=1843284&r2=1843285&view=diff
==============================================================================
--- tomcat/trunk/res/checkstyle/org-import-control.xml (original)
+++ tomcat/trunk/res/checkstyle/org-import-control.xml Tue Oct 9 13:56:25 2018
@@ -85,7 +85,7 @@
<subpackage name="cloud">
<allow class="org.apache.tomcat.util.codec.binary.StringUtils"/>
<allow class="org.apache.tomcat.util.net.jsse.PEMFile"/>
- <allow pkg="com.github.openjson"/>
+ <allow pkg="org.noggit"/>
</subpackage>
</subpackage>
</subpackage>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
Re: svn commit: r1843285 - in /tomcat/trunk: TOMCAT-NEXT.txt
build.properties.default build.xml java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
res/checkstyle/org-import-control.xml
Posted by Rémy Maucherat <re...@apache.org>.
On Tue, Oct 9, 2018 at 3:56 PM <re...@apache.org> wrote:
> Author: remm
> Date: Tue Oct 9 13:56:25 2018
> New Revision: 1843285
>
> URL: http://svn.apache.org/viewvc?rev=1843285&view=rev
> Log:
> Switch from OpenJSON to Noggit.
>
> Modified:
> tomcat/trunk/TOMCAT-NEXT.txt
> tomcat/trunk/build.properties.default
> tomcat/trunk/build.xml
>
> tomcat/trunk/java/org/apache/catalina/tribes/membership/cloud/KubernetesMembershipProvider.java
> tomcat/trunk/res/checkstyle/org-import-control.xml
>
Given the Noggit version number and lack of recent commits, it might be a
good idea to include the package renamed source in util. IMO. Maybe we can
talk to the author about it.
Or switch back to openjson.
Rémy