Hi John! How did the addition of getOnlineLocators() cause SDG build to fail? I checked [9] but I couldn't quite grok what happened. I would've thought that adding would be ok but removing could potentially break SDG.
The InternalDataSerializer change was probably mine. I reduced scope of methods and variables where possible. Sorry about that. Do you need me to restore getSerializer to public? On Wed, May 17, 2017 at 4:42 PM, John Blum <jb...@pivotal.io> wrote: > Geode devs- > > I am not sure how decisions are made when changing Geode's API, but I would > caution that more care should be taken when doing so, regardless of whether > the APIs are public or not, but especially when they are public. > > Unfortunately, in this particular case, the API in question is deemed > "internal", which I know, are subject to change. However, the problem with > this is, the public API is insufficient in some cases, particularly for > "frameworks" (e.g. SDG) and "tooling" building on Geode and attempting to > uphold Geode's functional/behavioral contract. > > By way of example, a recent *Spring Data Geode* build broke > <https://build.spring.io/browse/SGF-NAG-556/log> [1] because, the > org.apache.geode.internal.InternalDataSerializer class was recently > changed. The scope of getSerializer(:Class):DataSerializer was changed > from *public > <https://github.com/apache/geode/blob/rel/v1.1.1/geode- > core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java# > L1113>* > [2] > to *private > <https://github.com/apache/geode/blob/a44585316a8d7eed35917c1dfd8293 > 15b34ce316/geode-core/src/main/java/org/apache/geode/internal/ > InternalDataSerializer.java#L1090>* > [3] > in a seemingly unrelated commit. > > There is a class > <https://github.com/spring-projects/spring-data-geode/ > blob/master/src/main/java/org/springframework/data/gemfire/ > serialization/EnumSerializer.java#L39> > [4] > in SDG that extends DataSerializer > <http://gemfire-90-javadocs.docs.pivotal.io/org/apache/ > geode/DataSerializer.html> > [5] > (in Geode's public API) but must use the InternalDataSerializer (internal > Geode API) when changes (e.g. "supported classes") to the SDG serializer > need to be "distributed" across the cluster. SDG"s serializer use to call > this getSerializer(:Class):DataSerializer method. However, in this case, > I > fixed the problem by not calling this "overloaded" method as it was not > strictly necessary. > > While I am trying to avoid the use of "internal" Geode classes and APIs in > SDG in general, as I mention above, this is not always possible. For > instance, there are a few API blunders such as the ability to register > <http://gemfire-90-javadocs.docs.pivotal.io/org/apache/ > geode/DataSerializer.html#register-java.lang.Class-> > [6] > a DataSerializer class but not "unregister" it; that is in > <https://github.com/apache/geode/blob/rel/v1.1.1/geode- > core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java# > L1077> > [7] > InternalDataSerializer. The other bad API practices on this class (i.e. > (Internal)DataSerializer) alone. > > Framework and tool developers must occasionally rely on "internal" APIs > (especially when the public API is insufficient) to order to achieve a > similar experience to Geode alone; something to keep in mind as Geode's > ecosystem grows. > > Finally, I'll also add that, I do need to know anytime the public API > changes as well. Recently the getOnlineLocators() method > <https://github.com/apache/geode/blob/61f676b0187e8918ca62f4a2ec9b6b > d3baa942d3/geode-core/src/main/java/org/apache/geode/ > cache/client/Pool.java#L210> > [8] > was added to org.apache.geode.cache.client.Pool, which caused another SDG > build <https://build.spring.io/browse/SGF-NAG-552> [9] to fail. > > Special thank you to *Nabarun* and *Diane* for the recent heads about the > LuceneQueryFactory method name change... from setResultLimit(:int) to > setLimit(:int). > > Regards, > > -- > -John > > > [1] https://build.spring.io/browse/SGF-NAG-556/log > [2] > https://github.com/apache/geode/blob/rel/v1.1.1/geode- > core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java# > L1113 > [3] > https://github.com/apache/geode/blob/a44585316a8d7eed35917c1dfd8293 > 15b34ce316/geode-core/src/main/java/org/apache/geode/internal/ > InternalDataSerializer.java#L1090 > [4] > https://github.com/spring-projects/spring-data-geode/ > blob/master/src/main/java/org/springframework/data/gemfire/ > serialization/EnumSerializer.java#L39 > [5] > http://gemfire-90-javadocs.docs.pivotal.io/org/apache/ > geode/DataSerializer.html > [6] > http://gemfire-90-javadocs.docs.pivotal.io/org/apache/ > geode/DataSerializer.html#register-java.lang.Class- > [7] > https://github.com/apache/geode/blob/rel/v1.1.1/geode- > core/src/main/java/org/apache/geode/internal/InternalDataSerializer.java# > L1077 > [8] > https://github.com/apache/geode/blob/61f676b0187e8918ca62f4a2ec9b6b > d3baa942d3/geode-core/src/main/java/org/apache/geode/ > cache/client/Pool.java#L210 > [9] https://build.spring.io/browse/SGF-NAG-552 >