I agree with Mike that whatever changes in behavior are made to the Java client 
library should also be made in the C++ and C# libraries.

Sarge

> On 15 Feb, 2017, at 08:02, Michael Stolz <mst...@pivotal.io> wrote:
> 
> I have strong fears that if we make these wholesale changes to existing
> APIs we're going to end up breaking lots of existing code.
> 
> For instance, if we make destroyRegion propagate when it never did before,
> we may end up destroying a server side region in production that wasn't
> expected.
> 
> I will advocate for being more explicit about operations that are going to
> be performed on the server.
> 
> The other fear I have is that if we make all of these server side
> operations available to the Java client but not to the C++ and C# clients
> we will once again be making our C++ and C# users feel orphaned.
> 
> 
> --
> Mike Stolz
> Principal Engineer, GemFire Product Manager
> Mobile: +1-631-835-4771
> 
> On Wed, Feb 15, 2017 at 9:44 AM, Swapnil Bawaskar <sbawas...@pivotal.io>
> wrote:
> 
>> GEODE-1887 <https://issues.apache.org/jira/browse/GEODE-1887> was filed to
>> make sure that the user experience while using Geode is similar to RDBMS
>> and other data products out there. While reviewing the pull request
>> <https://github.com/apache/geode/pull/390> I realized that we need to make
>> other operations propagate to the server as well. These include:
>> - invalidateRegion()
>> - destroyRegion()
>> - getSnapshotService()
>> - getEntry()
>> - keySet()
>> - values()
>> - isDestroyed()
>> - containsValueForKey()
>> - containsKey()
>> - containsValue()
>> - entrySet()
>> 
>> Also, rather than have a user "create" a PROXY region, which is just a
>> handle to a server side region, I would like to propose that
>> clientCache.getRegion("name") actually creates and returns a PROXY region
>> even if one was not created earlier/through cache.xml. So, in summary, the
>> workflow on the client would be:
>> 
>> ClientCacheFactory cacheFactory = new ClientCacheFactory();
>> cacheFactory.addPoolLocator("localhost", 10334);
>> ClientCache clientCache = cacheFactory.create();
>> 
>> Region students = clientCache.getRegion("students");
>> students.put("student1", "foo");
>> assert students.size() == 1;
>> 
>> If a client wants to have a near cache, they can still "create" a
>> CACHING_PROXY region.
>> 
>> For a CACHING_PROXY, I propose that we leave the default implementation
>> unchanged, i.e. all operations work locally on the client (except CRUD
>> operations that are always propagated to the server). In the case where the
>> client wishes to perform operations on the server, I propose that we
>> introduce a new method:
>> 
>> /**
>> * @return
>> */
>> Region<K, V> serverView();
>> 
>> so that all operations on the returned view (Region) are performed on the
>> server.
>> 
>> In the longer term, we should break up Region into two interfaces, one that
>> has methods that only work on the client (like registerInterest and
>> serverView()) and other for the server.
>> 
>> Thanks!
>> Swapnil.
>> 

Reply via email to