+1

On Tue, Sep 18, 2012 at 10:17 AM, Jun Rao <jun...@gmail.com> wrote:
> Makes sense. Could you file a jira to track this?
>
> Thanks,
>
> Jun
>
> On Tue, Sep 18, 2012 at 9:22 AM, Jay Kreps <jay.kr...@gmail.com> wrote:
>
>> Hey Guys,
>>
>> Just a friendly (and hopefully not too annoying) reminder about code
>> layering. We have a couple of different systems that need to remain
>> independent and not know about each other. Some examples of this are the
>> network layer, the log system, the replication system, the controller code,
>> etc. Various pieces of API-specific logic sit on top of these layers and
>> integrate them into the functionality the system provides. The goal is to
>> make these lower layers have the cleanest, most logical, and most general
>> possible APIs that wrap up all the complicated stuff that they do.
>>
>> An easy way to tell if we are doing the right thing is to think about how
>> well the lowest levels of code makes sense if picked up and used on its own
>> without the rest of kafka.
>>
>> Here is an example where we ended up breaking that layering:
>>   Log.scala:
>>     def getOffsetsBefore(request: OffsetRequest): Array[Long]
>>
>> We clearly didn't get the layering right here either. The method takes a
>> OffsetRequest object, but the Log shouldn't know anything about the API
>> layer. The implementation of the method is a bunch of logic very specific
>> to some of the oddities of this API.
>>
>> The right way to implement this would be to add a more general API to get
>> LogSegments from the log. Then in the API layer add all the specific types
>> of filtering and munging needed to fullfill the contract of the API. What I
>> have seen is that when we don't focus on this we end up with lots and lots
>> of odd APIs and it tends to make the code really hard to evolve or to
>> reason about what it is that the subsystem does.
>>
>> This is not a major problem, but being a little more rigorous at these
>> layers helps keep the code beautiful. :-)
>>
>> Cheers,
>>
>> -Jay
>>

Reply via email to