Hi Dave,

these are not dependencies that are needed (or would be pulled) from
the Pulsar build.

The JMH is only used if someone wants to run a benchmark on the
LightProto code. Pulsar does not depend on that.

>From Pulsar build we would need:
 1. At build time -> The LightProto Maven Plugin with the generator module
 2. At runtime (and in Apache release) -> No dependencies


Matteo



--
Matteo Merli
<matteo.me...@gmail.com>

On Wed, Dec 23, 2020 at 10:20 AM Dave Fisher <w...@apache.org> wrote:
>
> Hi Matteo,
>
> I looked at the dependencies in Splunk LightPro and the following are not 
> acceptable in an Apache Binary:
>
>             <dependency>
>                 <groupId>org.openjdk.jmh</groupId>
>                 <artifactId>jmh-core</artifactId>
>                 <version>${jmh.version}</version>
>             </dependency>
>             <dependency>
>                 <groupId>org.openjdk.jmh</groupId>
>                 <artifactId>jmh-generator-annprocess</artifactId>
>                 <version>${jmh.version}</version>
>                 <scope>provided</scope>
>             </dependency>
>
> These are GPL according to mvnrepository.com.
>
> The other dependencies are fine and all class A or B.
>
> Have a look at https://www.apache.org/legal/resolved.html
>
> Regards,
> Dave
>
> > On Dec 23, 2020, at 9:35 AM, Matteo Merli <mme...@apache.org> wrote:
> >
> > ## Motivation
> >
> > In the Pulsar wire protocol, we are using Google Protobuf in order to 
> > perform
> > serialization/deserialization of the commands that are exchanged between
> > clients and brokers.
> >
> > Because of the overhead involved with the regular Protobuf implementation, 
> > since
> > very early on, we have been using a modified version of Protobuf 2.4.1.
> > The modifications were done to ensure a more efficient serialization code 
> > that
> > used thread local caches for the objects used in the process.
> >
> > There are few issues with the current approach:
> > 1. The patch to the Protobuf code generator is only based on version 2.4.1 
> > and
> >    cannot be upgraded to newer Protobuf versions
> > 2. The new Protobuf version, 3.xx, do have the same performance issues as 
> > the
> >    2.x versions.
> > 3. The thread-local approach for reusing objects is not ideal. Thread-local
> >    access is not free and it would be better to instead cache the root 
> > objects
> >    only.
> >
> > ## Goal
> >
> > Have an efficient and maintainable way to perform 
> > serialization/deserialization
> > of Pulsar protocol.
> >
> > The current proposal is to switch from the patched Protobuf 2.4.1 and use a
> > different code generator, Splunk LightProto:
> > https://github.com/splunk/lightproto.
> >
> > This code generator has the following features/goals:
> >
> > 1. Generate the fastest possible Java code for Protobuf SerDe
> > 2. 100% Compatible with proto2 definition and wire protocol
> > 3. Zero-copy deserialization using Netty ByteBuf
> > 4. Deserialize from direct memory
> > 5. Zero heap allocations in serialization / deserialization
> > 6. Lazy deserialization of strings and bytes
> > 7. Reusable mutable objects
> > 8. No runtime dependency library
> > 9. Java based code generator with Maven plugin
> >
> > There is extensive testing to ensure the generated code serializes and 
> > parses
> > the same bytes in the same way as the Google Protobuf does.
> >
> >
> > --
> > Matteo Merli
> > <mme...@apache.org>
>

Reply via email to