Sorry about the delayed reply.

We saw interesting issues when we were using eclipse with a different
environment. So the build on the prompt (using maven) would work well while
the following run on eclipse would through a class-related exception. I
agree that this was only a configuration issue (we had many jdks in one
machine and eclipse used a different one), but wanted to enforce the API
checks. Hence the patch.

+matteo since he's looking at moving the build to Java8. We could have a
signature check for jdk1.8 as well.

Thanks,
Arun

On Mon, Jun 13, 2016 at 1:24 PM, Enrico Olivelli <[email protected]>
wrote:

> Honestly I've been running BookKeeper on java8 in production since at
> least 2 years and I have never got java8-related issues.
> Do you think that that change on ConcurrentHashMap would be actually
> source of problems? Can you file a JIRA?
>
> Regards
> Enrico
>
> Il Mer 8 Giu 2016 20:23 Arun M. Krishnakumar <[email protected]> ha
> scritto:
>
>> (Rebooting an old thread about running binaries compiled for jdk1.7 while
>> using a jdk1.8 compilation environment and runtime)
>>
>> Just to be safe, I used maven's animal-sniffer plugin (
>> http://www.mojohaus.org/animal-sniffer/animal-sniffer-maven-plugin/)
>> that's recommended by maven and built bookkeeper. It found one issue in
>> ConcurrentHashMap.keySet whose definition changes from 1.7 to 1.8.
>>
>> The patch that fixes this follows. Could we add this plugin to the
>> codebase so that we can safely use an older version of jdk ?
>>
>>
>> diff --git
>> a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
>> b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
>> index 12ad303..8ff1e98 100644
>> ---
>> a/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
>> +++
>> b/bookkeeper-server/src/main/java/org/apache/bookkeeper/proto/PerChannelBookieClient.java
>> @@ -21,6 +21,7 @@ import java.io.IOException;
>>  import java.nio.channels.ClosedChannelException;
>>  import java.util.ArrayDeque;
>>  import java.util.Collections;
>> +import java.util.Enumeration;
>>  import java.util.Queue;
>>  import java.util.Set;
>>  import java.util.concurrent.ConcurrentHashMap;
>> @@ -814,7 +815,9 @@ public class PerChannelBookieClient extends
>> SimpleChannelHandler implements Chan
>>          // in case they get a write failure on the socket. The one who
>>          // successfully removes the key from the map is the one
>> responsible for
>>          // calling the application callback.
>> -        for (CompletionKey key : completionObjects.keySet()) {
>> +        Enumeration<CompletionKey> keys = completionObjects.keys();
>> +        while (keys.hasMoreElements()) {
>> +            CompletionKey key = keys.nextElement();
>>              switch (key.operationType) {
>>                  case ADD_ENTRY:
>>                      errorOutAddKey(key, rc);
>>
>> diff --git a/pom.xml b/pom.xml
>> index 496a687..fec12f6 100644
>> --- a/pom.xml
>> +++ b/pom.xml
>> @@ -197,6 +197,31 @@
>>              </configuration>
>>            </plugin>
>>            <plugin>
>> +            <groupId>org.codehaus.mojo</groupId>
>> +            <artifactId>animal-sniffer-maven-plugin</artifactId>
>> +            <version>1.15</version>
>> +            <executions>
>> +              <execution>
>> +                <id>check-java-version</id>
>> +                <phase>verify</phase>
>> +                <goals>
>> +                  <goal>check</goal>
>> +                </goals>
>> +                <configuration>
>> +                <ignores>
>> +
>>  <ignore>com.sun.management.OperatingSystemMXBean</ignore>
>> +
>>  <ignore>com.sun.management.UnixOperatingSystemMXBean</ignore>
>> +                </ignores>
>> +                  <signature>
>> +                    <groupId>org.codehaus.mojo.signature</groupId>
>> +                    <artifactId>java17</artifactId>
>> +                    <version>1.0</version>
>> +                  </signature>
>> +                </configuration>
>> +              </execution>
>> +            </executions>
>> +          </plugin>
>> +          <plugin>
>>              <groupId>org.apache.maven.plugins</groupId>
>>              <artifactId>maven-surefire-plugin</artifactId>
>>              <version>2.19.1</version>
>>
>>
>> Thanks,
>> Arun
>>
>> On Wed, Apr 20, 2016 at 1:32 PM, Enrico Olivelli <[email protected]>
>> wrote:
>>
>>> Don't worry. Java code compiled for Java7 runs without changes for java8
>>> usually.
>>> That instruction tells that the java byte code is to be compatible with
>>> Java7 virtual jams and newer versions.
>>>
>>> Cheers
>>> Enrico
>>>
>>> Il Mer 20 Apr 2016 20:25 Arun M. Krishnakumar <[email protected]> ha
>>> scritto:
>>>
>>> > Thanks Enrico for the feedback.
>>> >
>>> > I am new to Maven so am trying to understand this better. I see that
>>> the
>>> > pom.xml in the base bookkeeper directory has the following lines:
>>> >
>>> >       <plugin>
>>> >         <artifactId>maven-compiler-plugin</artifactId>
>>> >         <version>3.0</version>
>>> >         <configuration>
>>> > *          <source>1.7</source>*
>>> > *          <target>1.7</target>*
>>> >           <compilerArguments>
>>> >         <Werror />
>>> >         <Xlint:deprecation />
>>> >         <Xlint:unchecked />
>>> >       </compilerArguments>
>>> >         </configuration>
>>> >       </plugin>
>>> >
>>> > So it looks like the source can make use of only Java 7 features
>>> currently.
>>> >
>>> > Also, when I do the following:
>>> > 1. Build using "mvn clean install -DskipTests" from the bookkeeper
>>> > directory
>>> > 2. Get the Bookie.class from the "bookkeeper-server-4.4.0-SNAPSHOT.jar"
>>> > file
>>> > 3. javap -verbose Bookie.class  | grep -i "Major"
>>> >
>>> > I get the value 51 which indicates that the class has been built for
>>> Java
>>> > 7. So my understanding of your mail is that the Java 7 binaries
>>> generated
>>> > run well on Java 8 JVM. Is that accurate ?
>>> >
>>> > My worry was about the incompatibilities that have been mentioned in
>>> the
>>> > compatibility docs.
>>> >
>>> > Thanks,
>>> > Arun
>>> >
>>> >
>>> >
>>> >
>>> > On Tue, Apr 19, 2016 at 11:35 PM, Enrico Olivelli <[email protected]
>>> >
>>> > wrote:
>>> >
>>> > > Hi Arun,
>>> > > BookKeeper 4.3.2 is compiled for java6. New  upcoming release will
>>> > leverage
>>> > > Java7 features like autocloseable.
>>> > > There is no need to change the pom.xml in order to make it compatible
>>> > with
>>> > > java8.
>>> > > I'm running it on java8 since ever.
>>> > >
>>> > > --Enrico
>>> > >
>>> > > Il Mer 20 Apr 2016 05:16 Arun M. Krishnakumar <[email protected]>
>>> ha
>>> > > scritto:
>>> > >
>>> > > > Hi,
>>> > > >
>>> > > > We are moving to Java 8 at our company since Java 7 has reached
>>> its end
>>> > > of
>>> > > > life and our IT policies require the move.
>>> > > >
>>> > > > Is there a plan to officially announce support for Bookkeeper on
>>> JDK
>>> > 1.8
>>> > > ?
>>> > > > If it is already present or if a support matrix is documented
>>> somewhere
>>> > > > could someone please point me to it ?
>>> > > >
>>> > > > I see in the pom.xml that there is still the 1.7 version
>>> specified. I
>>> > > have
>>> > > > run the bookkeeper tests and our own higher level tests on 1.8 and
>>> > there
>>> > > > are no failures. If needed, I can raise a bug for it with the
>>> pom.xml
>>> > > > patch.
>>> > > >
>>> > > > Thanks,
>>> > > > Arun
>>> > > >
>>> > > --
>>> > >
>>> > >
>>> > > -- Enrico Olivelli
>>> > >
>>> >
>>> --
>>>
>>>
>>> -- Enrico Olivelli
>>>
>>
>> --
>
>
> -- Enrico Olivelli
>

Reply via email to