+1 to what Jake said. -Dan
On Wed, Dec 4, 2019 at 11:32 PM Owen Nichols <onich...@pivotal.io> wrote: > +1 for a short-term solution in 1.11 while we discuss a more complete > proposal for 1.12 > > On Wed, Dec 4, 2019 at 10:09 PM Jacob Barrett <jbarr...@pivotal.io> wrote: > > > I think we can tone down the inflammatory statements. It is well > > established that, like any legacy code base, Geode has issues. One of > them > > is a less than ideal set of APIs for certain tasks. Whatever the issues > > were in the past with getting APIs adjusted to suit the SDG project > should > > be left in the past and we can work forward on a new strategy. > > > > The term public API is redundant, if its designated API then it is > public. > > Let’s also be clear that "internal API” is not a thing, if it is internal > > it is not an API. The language semantics of public/private are not what > > defines and API. As such, relying on internal classes tor work around > > deficiencies in a API is dangerous and should only be done as a stopgap > > measure while addressing the API’s deficiency. Java, up until 9, lacked > any > > clear distinction of internals vs API so, like many projects, Geode chose > > the “internal” package name to denote things that are not to be consume > as > > API. As we go forward with Java 9 modules support these will be enforced > by > > the runtime and compilers. > > > > A JIRA should be opened to address the API deficiency. When the API is > > enhanced then the internal class usage should be replaced immediately > with > > the API. It is unreasonable to expect an upstream project to maintain > > internal classes as though they are API or expect them to address > > deficiencies in the API if they are not communicated. It is also > > unreasonable for the upstream project to ignore obvious deficiencies in > its > > APIs and should use these issues raised by downstream projects to > > prioritize improvements. Work needs to be done on both these projects to > > make improvements. > > > > To resolve the issues raised below let’s get some JIRAs and/or RFCs > opened > > to address the APIs the SDG needs to work. Let’s work to burn down this > > debt of internal class usage in SDG to avoid issues like this in the > > future. I am sure we can figure out a short term solution to address the > > immediate compile issues, whether that’s making a unit test into an > > integration test, refactoring the internals to not blindly cast, or > > whatever. We can then work out a strategy to address this the correct way > > in the develop branch for 1.12. > > > > -Jake > > > > > > > > > On Dec 4, 2019, at 6:20 PM, John Blum <jb...@pivotal.io> wrote: > > > > > > If you must know, there are important test cases in both SBDG and SSDG > to > > > be able to register (and subsequently unregister) the "mock" Pool with > > the > > > PoolManager, which unfortunately is a consequence of the SDG > > > PoolFactoryBean's design being reliant on the PoolManager (to resolve > the > > > Pool), and to some extent, the PoolFactory API (to create the Pool) in > > the > > > first place. Of course, there is no other way to "resolve" a reference > > to > > > a Pool from Geode (other than ClientCache.geDefaultPool()), AFAIK. > > > > > > Unfortunately, STDG (or SDG) would not need to import "internal" APIs > if > > > Apache Geode's public API was properly maintained and evolved to > address > > a > > > new use cases. For example (and again), see GEODE-7532 > > > <https://issues.apache.org/jira/browse/GEODE-7532> [1]. > > > > > > It turns out, there are many, many cases like GEODE-7532 > > > <https://issues.apache.org/jira/browse/GEODE-7532> [1], with classes > and > > > methods containing useful functions buried deep down inside Geode > > > "internal" packages. The o.a.g.distributed.internal.MemberListener > > > interface comes to mind. It is not difficult to see how his interface > > > would be useful in both frameworks & tooling (e.g. for management & > > > monitoring). > > > > > > Or, how about the poor resource management/cleanup Apache Geode fails > to > > do > > > properly w.r.t. SSL Sockets, that STDG now needs to account for > > > < > > > https://github.com/spring-projects/spring-test-data-geode/blob/master/spring-data-geode-test/src/main/java/org/springframework/data/gemfire/tests/integration/IntegrationTestsSupport.java#L119-L139 > > > > > > [2] > > > when running automated integration tests. > > > > > > I think there was another example > > > <https://markmail.org/message/5juxxnkttzjndidg> [3] recently, which > STDG > > > must account for <https://markmail.org/message/5juxxnkttzjndidg> [4] > as > > > well. > > > > > > Serializer registration/unregistration is yet another area. The > laundry > > > list is quite long! > > > > > > The whole notion of Apache Geode's "internal" API is horribly broken, > > > especially when the public API often comes up short. > > > > > > What troubles me is that we see the recommended changes in GEODE-7532 > as > > a > > > "bandaid". Really? > > > > > > It does not matter whether these classes are "internal" or not, nor > > whether > > > they are used (externally) or not, so long as they are used properly. > If > > > they are "public" there is simply no guarantee they won't be used, and > > you > > > cannot expect "internal" problems to not have external consequences. > > > > > > SIDE NOTE: Of course, this is further predicated on the fact those > > > "internal" classes were designed/implemented correctly in the first > > place, > > > which they also, were not! > > > > > > I down voted for several reasons: > > > > > > 1. First, YES, because this blocks SBDG from moving to Apache Geode > 1.11, > > > and perhaps, more importantly... > > > 2. Because the Pool management in PoolManagerImpl A) refers to the Pool > > as > > > PoolImpl despite taking a reference to Pool, and B) exposes the > > > implementation of the usage tracking logic (which is a clear violation > of > > > "encapsulation" and a series code smell) > > > 3. And because the IllegalStateException message is not accurate nor > was > > it > > > very informative (e.g. "what Regions"). > > > 4. Or because 2A by (along with GEODE-7159 > > > <https://issues.apache.org/jira/browse/GEODE-7159> [5]) will most > > > definitely cause problems for us later, especially since these problems > > > will be time delayed (invoked during resource cleanup) making them hard > > to > > > pinpoint and very confusing to users. > > > > > > Also, imagine a scenario where Geode offers different Pool > > implementations, > > > beyond PoolImpl. Why else would Geode provide a PoolFactory interface > if > > > not to encapsulate creation, configuration and initialization of > > different > > > types of Pools.... part of that *Open/Closed* principle. There is no > > point > > > to have a PoolFactory otherwise since the PoolManager could have simply > > > created Pools. Ironically, the PoolFactory is not something that is > used > > > in this way and therefore became an unnecessary layer of indirection. > > #sigh > > > > > > In addition, the recommended changes in GEODE-7531 are not invasive > > > what-so-ever, and will not adversely affect Geode 1 way or another. > > > > > > In closing, anytime the overall code quality of Geode comes into > question > > > (and there is a lot to question with this codebase), which can, and > most > > > likely will affect our end-users experience, and it HAS and DOES, you > > > better believe and I am going to call this out. > > > > > > -j > > > > > > > > > [1] https://issues.apache.org/jira/browse/GEODE-7532 > > > [2] > > > > > > https://github.com/spring-projects/spring-test-data-geode/blob/master/spring-data-geode-test/src/main/java/org/springframework/data/gemfire/tests/integration/IntegrationTestsSupport.java#L119-L139 > > > [3] https://markmail.org/message/5juxxnkttzjndidg > > > [4] https://markmail.org/message/5juxxnkttzjndidg > > > [5] https://issues.apache.org/jira/browse/GEODE-7159 > > > > > > On Wed, Dec 4, 2019 at 6:12 PM Robert Houghton <rhough...@pivotal.io> > > wrote: > > > > > >> @udo, if one needs to use a strong word like 'offender', then the > > offender > > >> is the one using an internal API. Geode is under no obligation to > > maintain > > >> or "fix" these for any project. > > >> > > >> Is there a Jira, github issue, or pull-request to promote the internal > > >> class to the public space? Is there a feature request to uncouple this > > >> class you want to use in Spring? > > >> > > >> Is Spring the tail wagging the dog for Geode releases? > > >> > > >> > > >> On Wed, Dec 4, 2019, 17:59 Udo Kohlmeyer <u...@apache.com> wrote: > > >> > > >>> @Dan, > > >>> > > >>> I will add my -1 to this. > > >>> > > >>> I understand your argument of "let's solve the problem by removing > the > > >>> offender". > > >>> > > >>> But in reality who is the offender? Is it the one class that is using > > an > > >>> "internal" api OR is it the implementation itself that is to tightly > > >>> coupled that extending it is impossible? > > >>> > > >>> STDG right now is trying to create a test, to test functionality that > > >>> requires it to inject/mock a Pool. The smallest piece of the code, > not > > >>> the WHOLE PoolManager. But the system does not allow for the > injection > > >>> of a `Pool` (which btw all the methods on the `PoolManagerImpl` has > as > > >>> arguments). It casts every generic `Pool` to its implementation. This > > is > > >>> a very limiting factor. > > >>> > > >>> I understand that delaying a release is not optimal, but how much > > effort > > >>> to we believe it to be to clean up the code that so tightly couples > > >>> implementations together. > > >>> > > >>> I think we also must not forget that John, like many of us, is a > > >>> committer and PMC member on Geode. He also happens to be the main > > >>> committer on SDG, SBDG, SSDG, STDG. But if he feels that a release > > >>> should not go out without fixing a limiting feature to the Geode > > >>> project, then he may do so. > > >>> > > >>> I also feel that this is a limiting factor. > > >>> > > >>> The only difference is that I am not the main committer on the Spring > > >>> data projects for Geode. John is merely trying to get the best > outcome > > >>> for both projects. > > >>> > > >>> --Udo > > >>> > > >>> On 12/4/19 4:39 PM, Dan Smith wrote: > > >>>>> Quite frankly the reasons STDG (or dependent projects downstream > like > > >>> SDG, > > >>>>> SBDG, SSDG) are doing what it is (they are) doing is irrelevant to > > >> point > > >>>>> articulated in the description of GEODE-753. > > >>>>> > > >>>> What bothers me here is not your suggestions in GEODE-1753, but the > > >> fact > > >>>> that you are vetoing a Geode release because STDG is using an > internal > > >>>> Geode method and had a problem. > > >>>> > > >>>> How hard is it to remove the use of PoolManagerImpl from STDG? If we > > >> can > > >>>> fix the issue there, that seems better than putting bandaids into > the > > >>>> release branch so STDG can continue to use internal APIs. > > >>>> > > >>>> -Dan > > >>>> > > >>> > > >> > > > > > > > > > -- > > > -John > > > Spring Data Team > > > > >