I know we have folks spread across different time zones, would a 9AM PST / 4PM 
UTC discussion work?  Yes, we will post the recording afterwards but that makes 
it hard to ask live questions :-)

Anthony


> On Sep 21, 2021, at 12:14 AM, Alberto Gomez <alberto.go...@est.tech> wrote:
> 
> I think this is a great initiative. Not only are you giving a reminder about 
> the need to implement new features in a modular and pluggable way, but you 
> are also providing a real example with an already implemented not in the best 
> way feature, to show the steps to follow in the right direction for this and 
> future features.
> 
> I would be interested in attending to a live walkthrough over the details of 
> the changes.
> 
> Thanks,
> 
> Alberto
> ________________________________
> From: Jacob Barrett <jabarr...@vmware.com>
> Sent: Tuesday, September 21, 2021 3:04 AM
> To: dev@geode.apache.org <dev@geode.apache.org>
> Subject: Re: [DISCUSS] Modularizing new WAN TX Batching (and Modularization 
> Efforts in General)
> 
> Unfortunately I can’t do meetings that early. The earliest I could do that 
> day is 9am PDT.
> 
>> On Sep 20, 2021, at 3:34 PM, Anthony Baker <bak...@vmware.com> wrote:
>> 
>> The approach makes sense to me. The idea of a stable core + extensibility 
>> is a common and successful pattern in many OSS projects.
>> 
>> @Jake, you want to discuss at the next Geode Community meeting in Oct?
>> 
>> Anthony
>> 
>> 
>>> On Sep 20, 2021, at 1:48 PM, Jacob Barrett <jabarr...@vmware.com> wrote:
>>> 
>>> Devs,
>>> 
>>> We need to be doing a better job with implementing new features in a 
>>> modular and plugable way. We have had discussions in the past but we 
>>> haven’t been the best at sticking to it. Most recently we began work on a 
>>> modified version of WAN that supports transactional batching. Rather than 
>>> implement it in a plugable model we modified the existing implementation 
>>> with a new property that changes the internal behavior of the 
>>> implementation. This is a clear smell that what we have should be plugable 
>>> and modularized. I am not suggesting that we run out and define clear 
>>> public SPIs for everything or come up with some complicated plan to 
>>> re-architect everything into modules but rather that we take small steps. I 
>>> will argue that when we are adding functionality to a core service that is 
>>> the point we should consider steps to break it up into clear module 
>>> components. Think to yourself, what would it take for me to implement this 
>>> new functionality as its own module, meaning its own jar and Gradle 
>>> sub-project. As you begin to develop the solution you may find you need 
>>> some clean interfaces for it to extend from the core, that might be the 
>>> start of an internal SPI. You may find that some concrete classes you would 
>>> have normally modified just need to be extended with a few protected 
>>> methods to implement alternative logic.
>>> 
>>> I think we should focus efforts on extracting an interface to plug in 
>>> different WAN gateway implementations so that existing implementations 
>>> aren’t modified with new behavior. With proper interface extraction we can 
>>> more easily unit test around WAN gateways. By keeping implementations small 
>>> we can more easily test them in isolation. Making them all plugable allows 
>>> distributions of Geode to deliver specific implementations they would like 
>>> to support without impacting the existing implementations. It also frees 
>>> Geode to release new experimental or beta implementations of WAN gateways 
>>> without impacting the existing implementations rather than delaying 
>>> releases waiting for modified WAN gateways to be production ready and fully 
>>> tested.
>>> 
>>> In looking at the geode-wan module one might notice that it was already 
>>> designed to be plugable. Unfortunately it isn’t that easy. This SPI was 
>>> originally there to provide a way for Geode to be donated initially without 
>>> WAN support. It turns out that most of the core to WAN is actually still in 
>>> geode-core and only some of the “secret sauce” was moved into geode-wan. 
>>> The bulk of the geode-core code for WAN is actually in support of the 
>>> region queues for WAN and AEQ, so moving it into geod-wan would have cut 
>>> off AEQ. While it would be possible to utilize this SPI for providing 
>>> alternative gateway implementations it is very high level,so much of the 
>>> alternative implementations would be duplications, and it doesn’t allow for 
>>> both implementations to sit side by side at runtime. I would actually 
>>> suggest we eliminate this public SPI in favor of just the geode-wan core 
>>> module that it is and eventually migrate the region queue code into its own 
>>> module as well, but these are for another day.
>>> 
>>> Looking closer at the WAN gateways themselves there is mostly a pluggable 
>>> interface already there with the existing interfaces. I spent a little time 
>>> pulling apart an internal SPI and it was quite easy. With a small 
>>> modification to gfsh and cache xml to specify that alternative 
>>> implementation by name is all that needs to be done immediately to 
>>> configure an alternative. Without extracting too many of the common 
>>> implementation out into its own module just a few of the classes in 
>>> geode-core can be modified to provide empty implementation of key 
>>> overridable plug-in points for the TX batching implementation. The result 
>>> is that the TX batching module can be added to the classpath and be 
>>> configured as a gateway sender without injecting any of the TX batching 
>>> specific code into geode-core or geode-wan. Deeper details can be found at 
>>> the end of this discussion.
>>> 
>>> This solution isn’t perfect but it is a step in the right direction. The 
>>> more we continue to extract and extend the closer we will get to a true 
>>> pluggable architecture. The key to being successful will be to keep the 
>>> changes to the core components small and the interfaces between modules 
>>> internal. If we all make an effort towards this, both in our code and in 
>>> our reviews of others code, we can keep the efforts small and manageable.
>>> 
>>> I would love feedback and thoughts on this suggestion.
>>> 
>>> -Jake
>>> 
>> 

Reply via email to