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

Reply via email to