Shoot I have a personal appointment that day I can’t move at that time. We 
could schedule a special session for this or move the community meeting to a 
different day. I could do Monday or Tuesday that week at 9:00 am PDT.

> On Sep 21, 2021, at 8:14 AM, Anthony Baker <bak...@vmware.com> wrote:
> 
> 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