You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ds...@apache.org on 2017/10/26 00:09:34 UTC

[geode] branch feature/GEODE-3781 updated: unit test now does actual inserts

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

dschneider pushed a commit to branch feature/GEODE-3781
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/feature/GEODE-3781 by this push:
     new 51dcaf0  unit test now does actual inserts
51dcaf0 is described below

commit 51dcaf067de627cb190e4558a0ecba09bf058e8e
Author: Darrel Schneider <ds...@pivotal.io>
AuthorDate: Wed Oct 25 17:09:15 2017 -0700

    unit test now does actual inserts
---
 .../geode/connectors/jdbc/JDBCAsyncWriter.java     | 28 ++++++++------
 .../apache/geode/connectors/jdbc/JDBCManager.java  |  3 +-
 .../jdbc/JDBCAsyncWriterIntegrationTest.java       | 45 +++++++++++++++++-----
 3 files changed, 53 insertions(+), 23 deletions(-)

diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/JDBCAsyncWriter.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/JDBCAsyncWriter.java
index 0d6d55f..97709cb 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/JDBCAsyncWriter.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/JDBCAsyncWriter.java
@@ -19,6 +19,7 @@ import java.util.Properties;
 
 import org.apache.geode.cache.asyncqueue.AsyncEvent;
 import org.apache.geode.cache.asyncqueue.AsyncEventListener;
+import org.apache.geode.cache.query.internal.DefaultQuery;
 import org.apache.geode.pdx.PdxInstance;
 
 /*
@@ -43,18 +44,23 @@ public class JDBCAsyncWriter implements AsyncEventListener {
   @Override
   public boolean processEvents(List<AsyncEvent> events) {
     totalEvents += events.size();
-    // TODO: set threadLocal to force PDXInstance
-    for (AsyncEvent event : events) {
-      // TODO: in some cases getDeserializedValue may return non-PdxInstance.
-      // In that case need to serialize and deserialize.
-      try {
-        PdxInstance value = (PdxInstance) event.getDeserializedValue();
-        this.manager.write(event.getRegion(), event.getOperation(), event.getKey(), value);
-        successfulEvents += 1;
-      } catch (RuntimeException ex) {
-        // TODO: need to log exceptions here
-        throw ex;
+    // TODO: have a better API that lets you do this
+    DefaultQuery.setPdxReadSerialized(true);
+    try {
+      for (AsyncEvent event : events) {
+        // TODO: in some cases getDeserializedValue may return non-PdxInstance.
+        // In that case need to serialize and deserialize.
+        try {
+          PdxInstance value = (PdxInstance) event.getDeserializedValue();
+          this.manager.write(event.getRegion(), event.getOperation(), event.getKey(), value);
+          successfulEvents += 1;
+        } catch (RuntimeException ex) {
+          // TODO: need to log exceptions here
+          throw ex;
+        }
       }
+    } finally {
+      DefaultQuery.setPdxReadSerialized(false);
     }
     return true;
   }
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/JDBCManager.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/JDBCManager.java
index c9031f1..49c948d 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/JDBCManager.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/JDBCManager.java
@@ -226,8 +226,7 @@ public class JDBCManager {
   }
 
   private String getKeyColumnName(String tableName) {
-    // TODO Auto-generated method stub
-    return null;
+    return "id"; // TODO: do not hard code this!
   }
 
   private String getTableName(Region region) {
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JDBCAsyncWriterIntegrationTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JDBCAsyncWriterIntegrationTest.java
index c3ab71e..173ec62 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JDBCAsyncWriterIntegrationTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/JDBCAsyncWriterIntegrationTest.java
@@ -20,6 +20,7 @@ import static org.assertj.core.api.Assertions.*;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
 import java.sql.Statement;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
@@ -31,9 +32,9 @@ import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionFactory;
 import org.apache.geode.cache.RegionShortcut;
-import org.apache.geode.cache.asyncqueue.AsyncEventQueue;
 import org.apache.geode.connectors.jdbc.JDBCAsyncWriter;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
+import org.apache.geode.pdx.PdxInstance;
 import org.apache.geode.test.junit.categories.IntegrationTest;
 import org.awaitility.Awaitility;
 
@@ -82,7 +83,8 @@ public class JDBCAsyncWriterIntegrationTest {
     Class.forName(driver);
     conn = DriverManager.getConnection(connectionURL);
     stmt = conn.createStatement();
-    stmt.execute("Create Table " + regionTableName + " (id varchar(10), name varchar(10))");
+    stmt.execute(
+        "Create Table " + regionTableName + " (id varchar(10), name varchar(10), age int)");
   }
 
   public void closeDB() throws Exception {
@@ -96,7 +98,7 @@ public class JDBCAsyncWriterIntegrationTest {
       conn.close();
     }
   }
-  
+
   private Properties getRequiredProperties() {
     Properties props = new Properties();
     props.setProperty("driver", this.driver);
@@ -106,9 +108,13 @@ public class JDBCAsyncWriterIntegrationTest {
 
   @Test
   public void canInstallJDBCAsyncWriterOnRegion() {
-    Region employees = createRegionWithJDBCAsyncWriter("employees", getRequiredProperties());
-    employees.put("1", "Emp1");
-    employees.put("2", "Emp2");
+    Region employees = createRegionWithJDBCAsyncWriter(regionTableName, getRequiredProperties());
+    PdxInstance pdx1 = cache.createPdxInstanceFactory("Employee").writeString("name", "Emp1")
+        .writeInt("age", 55).create();
+    PdxInstance pdx2 = cache.createPdxInstanceFactory("Employee").writeString("name", "Emp2")
+        .writeInt("age", 21).create();
+    employees.put("1", pdx1);
+    employees.put("2", pdx2);
 
     Awaitility.await().atMost(30, TimeUnit.SECONDS)
         .until(() -> assertThat(jdbcWriter.getTotalEvents()).isEqualTo(2));
@@ -117,15 +123,19 @@ public class JDBCAsyncWriterIntegrationTest {
 
   @Test
   public void jdbcAsyncWriterCanWriteToDatabase() throws Exception {
-    Region employees = createRegionWithJDBCAsyncWriter("employees", getRequiredProperties());
-
-    employees.put("1", "Emp1");
-    employees.put("2", "Emp2");
+    Region employees = createRegionWithJDBCAsyncWriter(regionTableName, getRequiredProperties());
+    PdxInstance pdx1 = cache.createPdxInstanceFactory("Employee").writeString("name", "Emp1")
+        .writeInt("age", 55).writeInt("id", 3).create();
+    PdxInstance pdx2 = cache.createPdxInstanceFactory("Employee").writeString("name", "Emp2")
+        .writeInt("age", 21).create();
+    employees.put("1", pdx1);
+    employees.put("2", pdx2);
 
     Awaitility.await().atMost(30, TimeUnit.SECONDS)
         .until(() -> assertThat(jdbcWriter.getSuccessfulEvents()).isEqualTo(2));
 
     validateTableRowCount(2);
+    printTable();
   }
 
   private Region createRegionWithJDBCAsyncWriter(String regionName, Properties props) {
@@ -146,4 +156,19 @@ public class JDBCAsyncWriterIntegrationTest {
     assertThat(size).isEqualTo(expected);
   }
 
+  private void printTable() throws Exception {
+    ResultSet rs = stmt.executeQuery("select * from " + regionTableName);
+    ResultSetMetaData rsmd = rs.getMetaData();
+    int columnsNumber = rsmd.getColumnCount();
+    while (rs.next()) {
+      for (int i = 1; i <= columnsNumber; i++) {
+        if (i > 1)
+          System.out.print(",  ");
+        String columnValue = rs.getString(i);
+        System.out.print(rsmd.getColumnName(i) + ": " + columnValue);
+      }
+      System.out.println("");
+    }
+  }
+
 }

-- 
To stop receiving notification emails like this one, please contact
['"commits@geode.apache.org" <co...@geode.apache.org>'].