Hey guys,

I checked in some work into the branch
https://github.com/kanakb/helix. Here is a summary

(1) I have ZNRecord and ZNRecordDelta are kept as is in api. I think
we need to revisit them and rework them

(2) I have all ids retained with the json deserialization info.
Removing that would have been a lot of rework and I was focussed on
moving files into API this first go around. We need to clean up the
@Json annotations

(3) I have a model package but I decided to hold off on moving all
models into that package because there were some internal
dependencies, so I opted to use interfaces for the time being until we
untangle some of the dependencies of model on core at which point we
can drop the interfaces and move the model into api cleanly. So bear
with those IInterface naming conventions, its an eyesore for a reason.

(4) Please note the builder pattern I introduced, there are abstract
builders in API and the implementations are in core. I decided to
avoid writing plumbing and get something quick going so leveraged
apache commons discovery. You can see the pattern in the builder
packages in api.

(5) API has third party dependencies on google-guava,
apache-commons-discovery and jackson. We need to bring this down to a
very minimum as we work through the API cleanup

(6) I added a SerializableZNRecord in org.apache.helix in core because
I did not want serializer references in the api package. It felt like
an implementation detail

(7) I added a AbstractRebalancerConfig in
org.apache.helix.controller.rebalancer.config package in core. Reason
was the serializer references again.

(8) Most apis use <T extends interface> pattern so that we dont have
to cast objects in the core project.

(9) Note the ids classes are final deliberately. I would like to keep
the constructors private but they are accessed in some places so had
to keep them open.

(10) I moved most of the enums into api.

(11) StateModelDefId was referencing an internal class for a constant
"SchedulerTaskQueue", I moved that into api and now everywhere the
core class was referenced I reference the constant id value.

I think I got everything, there is still a lot to be done but I did
not want to keep going off the deep end and wanted to give everyone a
chance to review, so we can rework as necessary.

Apologies if I have missed out on formatting in some places, I tried
to do a thorough job but I am sure I have fallen short in places. It
has been quite some time since I worked on maven builds so let me know
if I missed anything in the maven builds.

Thanks,

Sandeep

Reply via email to