You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bb...@apache.org on 2018/12/05 22:19:12 UTC

[geode-native] branch develop updated: GEODE-5769: remove app domain context (#412)

This is an automated email from the ASF dual-hosted git repository.

bbender pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-native.git


The following commit(s) were added to refs/heads/develop by this push:
     new d258c24  GEODE-5769: remove app domain context (#412)
d258c24 is described below

commit d258c24e5c53ce12108146b57c31966a4245d19f
Author: Matthew Reddington <mr...@pivotal.io>
AuthorDate: Wed Dec 5 14:19:07 2018 -0800

    GEODE-5769: remove app domain context (#412)
    
    * Remove appDomainContext and add query test
    * Updated the tests to pass consistently.
---
 clicache/integration-test2/CMakeLists.txt |   1 +
 clicache/integration-test2/QueryTest.cs   | 202 ++++++++++++++++++++++++++++++
 cppcache/src/TcrChunkedContext.hpp        |  11 +-
 3 files changed, 204 insertions(+), 10 deletions(-)

diff --git a/clicache/integration-test2/CMakeLists.txt b/clicache/integration-test2/CMakeLists.txt
index f555ef1..e122168 100644
--- a/clicache/integration-test2/CMakeLists.txt
+++ b/clicache/integration-test2/CMakeLists.txt
@@ -38,6 +38,7 @@ add_library( ${PROJECT_NAME} SHARED
     CacheXml.cs
     CacheXmlTests.cs
     CqOperationTest.cs
+    QueryTest.cs
     RegionTest.cs
     RegionSSLTest.cs
     Position.cs
diff --git a/clicache/integration-test2/QueryTest.cs b/clicache/integration-test2/QueryTest.cs
new file mode 100644
index 0000000..17fc292
--- /dev/null
+++ b/clicache/integration-test2/QueryTest.cs
@@ -0,0 +1,202 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.IO;
+using Xunit;
+using System.Diagnostics;
+using System.Threading;
+
+namespace Apache.Geode.Client.IntegrationTests
+{
+  public class QueryOrder : IPdxSerializable
+  {
+    private const string ORDER_ID_KEY_ = "order_id";
+    private const string NAME_KEY_ = "name";
+    private const string QUANTITY_KEY_ = "quantity";
+    public long OrderId { get; set; }
+    public string Name { get; set; }
+    public short Quantity { get; set; }
+    // A default constructor is required for deserialization
+    public QueryOrder() { }
+    public QueryOrder(int orderId, string name, short quantity)
+    {
+      OrderId = orderId;
+      Name = name;
+      Quantity = quantity;
+    }
+    public override string ToString()
+    {
+      return string.Format("Order: [{0}, {1}, {2}]", OrderId, Name, Quantity);
+    }
+    public void ToData(IPdxWriter output)
+    {
+      output.WriteLong(ORDER_ID_KEY_, OrderId);
+      output.MarkIdentityField(ORDER_ID_KEY_);
+      output.WriteString(NAME_KEY_, Name);
+      output.MarkIdentityField(NAME_KEY_);
+      output.WriteInt(QUANTITY_KEY_, Quantity);
+      output.MarkIdentityField(QUANTITY_KEY_);
+    }
+    public void FromData(IPdxReader input)
+    {
+      OrderId = input.ReadLong(ORDER_ID_KEY_);
+      Name = input.ReadString(NAME_KEY_);
+      Quantity = (short)input.ReadInt(QUANTITY_KEY_);
+    }
+    public static IPdxSerializable CreateDeserializable()
+    {
+      return new QueryOrder();
+    }
+  }
+
+
+  [Trait("Category", "Integration")]
+  public class QueryTest : TestBase, IDisposable
+  {
+    private readonly Cache cache_;
+
+    public QueryTest()
+    {
+      var cacheFactory = new CacheFactory()
+          .Set("log-level", "error");
+      cache_ = cacheFactory.Create();
+    }
+
+    public void Dispose()
+    {
+      cache_.Close();
+    }
+
+    [Fact]
+    public void PdxSerializableQueryHaveCorrectValues()
+    {
+      using (var cluster_ = new Cluster(CreateTestCaseDirectoryName(), 1, 1))
+      {
+        Assert.Equal(cluster_.Start(), true);
+        Assert.Equal(cluster_.Gfsh.create()
+            .region()
+            .withName("cqTestRegion")
+            .withType("REPLICATE")
+            .execute(), 0);
+        cache_.TypeRegistry.RegisterPdxType(QueryOrder.CreateDeserializable);
+        var poolFactory = cache_.GetPoolFactory()
+            .AddLocator("localhost", cluster_.Gfsh.LocatorPort);
+        var pool = poolFactory
+            .SetSubscriptionEnabled(true)
+            .Create("pool");
+
+        var regionFactory = cache_.CreateRegionFactory(RegionShortcut.PROXY)
+            .SetPoolName("pool");
+
+        var region = regionFactory.Create<string, QueryOrder>("cqTestRegion");
+
+        var queryService = pool.GetQueryService();
+
+        Debug.WriteLine("Putting and changing Position objects in the region");
+        var order1 = new QueryOrder(1, "product x", 23);
+        var order2 = new QueryOrder(2, "product y", 37);
+        var order3 = new QueryOrder(3, "product z", 101);
+
+        region.Put("order1", order1);
+
+        region.Put("order2", order2);
+
+        region.Put("order3", order3);
+
+        order1.Quantity = 20;
+        region.Put("order1", order1);
+
+        order2.Quantity = 45;
+        region.Put("order2", order2);
+
+        order3.Quantity = 11;
+        region.Put("order3", order3);
+
+        var results = region.Query<QueryOrder>("SELECT * FROM /cqTestRegion WHERE quantity > 30");
+        Assert.Equal(results.Size, 1UL);
+        Assert.Equal(results[0].Name, "product y");
+
+        region.Clear();
+      }
+    }
+
+    [Fact]
+    public void DataSerializableQueryHaveCorrectValues()
+    {
+      using (var cluster_ = new Cluster(CreateTestCaseDirectoryName(), 1, 1))
+      {
+        Assert.Equal(cluster_.Start(), true);
+        Assert.Equal(cluster_.Gfsh.deploy()
+            .withJar(Config.JavaobjectJarPath)
+            .execute(), 0);
+        Assert.Equal(cluster_.Gfsh.create()
+            .region()
+            .withName("cqTestRegion")
+            .withType("REPLICATE")
+            .execute(), 0);
+
+        cluster_.Gfsh.executeFunction()
+            .withId("InstantiateDataSerializable")
+            .withMember("DataSerializableQueryHaveCorre_server_0")
+            .execute();
+
+        cache_.TypeRegistry.RegisterType(Position.CreateDeserializable, 22);
+
+        var poolFactory = cache_.GetPoolFactory()
+            .AddLocator("localhost", cluster_.Gfsh.LocatorPort);
+        var pool = poolFactory
+            .SetSubscriptionEnabled(true)
+            .Create("pool");
+
+        var regionFactory = cache_.CreateRegionFactory(RegionShortcut.PROXY)
+            .SetPoolName("pool");
+
+        var region = regionFactory.Create<string, Position>("cqTestRegion");
+
+        Debug.WriteLine("Putting and changing Position objects in the region");
+        var order1 = new Position("GOOG", 23);
+        var order2 = new Position("IBM", 37);
+        var order3 = new Position("PVTL", 101);
+
+        region.Put("order1", order1);
+        var Value = region["order1"];
+
+        region.Put("order2", order2);
+
+        order1.SharesOutstanding = 55;
+        region.Put("order1", order1);
+
+        order2.SharesOutstanding = 77;
+        region.Put("order2", order2);
+
+        order2.SharesOutstanding = 11;
+        region.Put("order2", order2);
+
+        region.Remove("order1");
+
+        region.Put("order3", order3);
+
+        var results = region.Query<Position>("SELECT * FROM /cqTestRegion WHERE sharesOutstanding > 50");
+        Assert.Equal(results.Size, 1UL);
+        Assert.Equal(results[0].SecId, "PVTL");
+
+        region.Clear();
+      }
+    }
+  }
+}
diff --git a/cppcache/src/TcrChunkedContext.hpp b/cppcache/src/TcrChunkedContext.hpp
index 3e548c2..e5df84c 100644
--- a/cppcache/src/TcrChunkedContext.hpp
+++ b/cppcache/src/TcrChunkedContext.hpp
@@ -41,7 +41,6 @@ class TcrChunkedResult {
   ACE_Semaphore* m_finalizeSema;
   std::shared_ptr<Exception> m_ex;
   bool m_inSameThread;
-  std::unique_ptr<AppDomainContext> appDomainContext;
 
  protected:
   uint16_t m_dsmemId;
@@ -56,7 +55,6 @@ class TcrChunkedResult {
       : m_finalizeSema(nullptr),
         m_ex(nullptr),
         m_inSameThread(false),
-        appDomainContext(createAppDomainContext()),
         m_dsmemId(0) {}
   virtual ~TcrChunkedResult() {}
   void setFinalizeSemaphore(ACE_Semaphore* finalizeSema) {
@@ -73,14 +71,7 @@ class TcrChunkedResult {
   void fireHandleChunk(const uint8_t* bytes, int32_t len,
                        uint8_t isLastChunkWithSecurity,
                        const CacheImpl* cacheImpl) {
-    if (appDomainContext) {
-      appDomainContext->run(
-          [this, bytes, len, isLastChunkWithSecurity, cacheImpl]() {
-            handleChunk(bytes, len, isLastChunkWithSecurity, cacheImpl);
-          });
-    } else {
-      handleChunk(bytes, len, isLastChunkWithSecurity, cacheImpl);
-    }
+    handleChunk(bytes, len, isLastChunkWithSecurity, cacheImpl);
   }
 
   /**