+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
>
>

Reply via email to