You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2021/11/14 00:33:17 UTC

[geode] branch wip/corrupt-client updated: Export file apparently wants to be called *.gfd.

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

jensdeppe pushed a commit to branch wip/corrupt-client
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/wip/corrupt-client by this push:
     new 898748a  Export file apparently wants to be called *.gfd.
898748a is described below

commit 898748a3528a19f711038aaeb5d44318e7262f5f
Author: Jens Deppe <jd...@vmware.com>
AuthorDate: Sat Nov 13 16:31:16 2021 -0800

    Export file apparently wants to be called *.gfd.
    
    - Ensure fn is compatible with 9.8.
---
 .../org/apache/geode/ExportLocalDataFunction.java  | 49 ++++++++++------------
 .../geode/pdx/CorruptPdxClientServerDUnitTest.java | 30 +++++++------
 .../apache/geode/pdx/internal/PdxWriterImpl.java   |  1 +
 3 files changed, 40 insertions(+), 40 deletions(-)

diff --git a/geode-core/src/distributedTest/java/org/apache/geode/ExportLocalDataFunction.java b/geode-core/src/distributedTest/java/org/apache/geode/ExportLocalDataFunction.java
index 3aac1c2..d7c1044 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/ExportLocalDataFunction.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/ExportLocalDataFunction.java
@@ -22,11 +22,7 @@ import java.util.Arrays;
 import java.util.Map;
 import java.util.Properties;
 
-import org.apache.logging.log4j.Logger;
-
-import org.apache.geode.LogWriter;
 import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.Declarable;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.execute.Function;
@@ -40,49 +36,48 @@ import org.apache.geode.cache.snapshot.SnapshotOptions.SnapshotFormat;
 import org.apache.geode.internal.cache.CachedDeserializable;
 import org.apache.geode.internal.cache.EntrySnapshot;
 import org.apache.geode.internal.cache.RegionEntry;
-import org.apache.geode.logging.internal.log4j.api.LogService;
 
-public class ExportLocalDataFunction implements Function<String>, Declarable {
+public class ExportLocalDataFunction implements Function<Object[]>, Declarable {
 
   private static final long serialVersionUID = 4380042210718815441L;
-  private static final Logger logger = LogService.getLogger();
 
-  public ExportLocalDataFunction() {
-  }
+  public ExportLocalDataFunction() {}
 
-  public void execute(final FunctionContext<String> context) {
-    logger.info("DEBUG: Executing ExportLocalDataFunction on {}", context.getMemberName());
+  public void execute(final FunctionContext<Object[]> context) {
+    final Cache cache = context.getCache();
+    final LogWriter logger = cache.getLogger();
 
-    // Get file name parameter
-    final String fileName = context.getArguments();
+    logger.info("EXPORT: Executing ExportLocalDataFunction on " + cache.getName());
 
-    if (fileName == null) {
-      throw new IllegalArgumentException(getId() + " requires an export filename as parameter");
+    Object[] arguments = context.getArguments();
+    String directoryName = null;
+    if (arguments != null && arguments.length > 0) {
+      directoryName = (String) arguments[0];
     }
 
-    final Cache cache = context.getCache();
-    final String memberName = cache.getName();
-    final LogWriter logger = cache.getLogger();
+    final String memberName = context.getMemberName();
 
     // Get local data set
     final RegionFunctionContext rfc = (RegionFunctionContext) context;
     final Region<Object, Object> localData = PartitionRegionHelper.getLocalDataForContext(rfc);
 
     // Create the file
-    final File file = new File(fileName);
+    final String fileName =
+        "server_" + memberName + "_region_" + localData.getName() + "_snapshot.gfd";
+    final File file = new File(directoryName, fileName);
 
     // Export local data set
     final RegionSnapshotService<Object, Object> service = localData.getSnapshotService();
     try {
-      logger.warning(
+      logger.warning("EXPORT: " +
           currentThread().getName() + ": Exporting " + localData.size() + " entries in region "
-              + localData.getName() + " to file " + file.getAbsolutePath() + " started");
+          + localData.getName() + " to file " + file.getAbsolutePath() + " started");
       final SnapshotOptions<Object, Object> options = service.createOptions();
       options.setFilter(getRejectingFilter(localData, logger));
       service.save(file, SnapshotFormat.GEMFIRE, options);
-      logger.warning(
+      logger.warning("EXPORT: " +
           currentThread().getName() + ": Exporting " + localData.size() + " entries in region "
-              + localData.getName() + " to file " + file.getAbsolutePath() + " completed");
+          + localData.getName() + " to file " + file.getAbsolutePath() + " completed");
     } catch (Exception e) {
       context.getResultSender().sendException(e);
       return;
@@ -91,11 +86,12 @@ public class ExportLocalDataFunction implements Function<String>, Declarable {
     context.getResultSender().lastResult(true);
   }
 
-  private <K, V> SnapshotFilter<K, V> getRejectingFilter(final Region<K, V> localData, final LogWriter logger) {
+  private <K, V> SnapshotFilter<K, V> getRejectingFilter(final Region<K, V> localData,
+      final LogWriter logger) {
     return entry -> {
       boolean accept = true;
       try {
-        //noinspection ResultOfMethodCallIgnored
+        // noinspection ResultOfMethodCallIgnored
         entry.getValue();
       } catch (Exception e) {
         final byte[] valueBytes = getValueBytes(entry);
@@ -141,6 +137,5 @@ public class ExportLocalDataFunction implements Function<String>, Declarable {
     return false;
   }
 
-  public void init(Properties properties) {
-  }
+  public void init(Properties properties) {}
 }
diff --git a/geode-core/src/distributedTest/java/org/apache/geode/pdx/CorruptPdxClientServerDUnitTest.java b/geode-core/src/distributedTest/java/org/apache/geode/pdx/CorruptPdxClientServerDUnitTest.java
index 7b9f45a..89e2517 100644
--- a/geode-core/src/distributedTest/java/org/apache/geode/pdx/CorruptPdxClientServerDUnitTest.java
+++ b/geode-core/src/distributedTest/java/org/apache/geode/pdx/CorruptPdxClientServerDUnitTest.java
@@ -18,10 +18,8 @@ import static org.apache.geode.distributed.ConfigurationProperties.LOCATORS;
 import static org.apache.geode.distributed.ConfigurationProperties.SERIALIZABLE_OBJECT_FILTER;
 import static org.apache.geode.test.dunit.rules.ClusterStartupRule.getCache;
 import static org.apache.geode.test.dunit.rules.ClusterStartupRule.getClientCache;
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
 
-import java.io.IOError;
 import java.io.IOException;
 import java.util.Properties;
 
@@ -30,7 +28,6 @@ import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
 import org.apache.geode.ExportLocalDataFunction;
-import org.apache.geode.cache.DataPolicy;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionShortcut;
 import org.apache.geode.cache.client.ClientCache;
@@ -64,8 +61,12 @@ public class CorruptPdxClientServerDUnitTest {
     properties.put(SERIALIZABLE_OBJECT_FILTER, "org.apache.geode.**");
     properties.put(LOCATORS, String.format("localhost[%d]", locatorPort));
 
-    final MemberVM server1 = cluster.startServerVM(1, properties);
-    final MemberVM server2 = cluster.startServerVM(2, properties);
+    final MemberVM server1 = cluster.startServerVM(1, x -> x
+        .withProperties(properties)
+        .withPDXReadSerialized());
+    final MemberVM server2 = cluster.startServerVM(2, x -> x
+        .withProperties(properties)
+        .withPDXReadSerialized());
     final ClientVM client = cluster.startClientVM(3,
         cf -> cf.withLocatorConnection(locatorPort));
 
@@ -80,7 +81,8 @@ public class CorruptPdxClientServerDUnitTest {
 
     client.invoke(() -> {
       final ClientCache cache = getClientCache();
-      final Region<Object, Object> region = cache.createClientRegionFactory(ClientRegionShortcut.PROXY).create("testSimplePdx");
+      final Region<Object, Object> region =
+          cache.createClientRegionFactory(ClientRegionShortcut.PROXY).create("testSimplePdx");
       region.put(1, new SimpleClass(1, (byte) 1));
       region.put(2, new SimpleClass(2, (byte) 2));
       PdxWriterImpl.breakIt = true;
@@ -93,10 +95,12 @@ public class CorruptPdxClientServerDUnitTest {
 
     final SerializableRunnableIF checkValue = () -> {
       final Region<Object, Object> region = getServerRegion();
-      assertThat(region.get(1)).isEqualTo(new SimpleClass(1, (byte) 1));
-      assertThat(region.get(2)).isEqualTo(new SimpleClass(2, (byte) 2));
-      assertThatThrownBy(() -> region.get(3)).hasRootCauseInstanceOf(IOException.class).hasRootCauseMessage("Unknown header byte 0");
-      assertThatThrownBy(() -> region.get(4)).hasRootCauseInstanceOf(IOException.class).hasRootCauseMessage("Unknown header byte 0");
+      // assertThat(region.get(1)).isEqualTo(new SimpleClass(1, (byte) 1));
+      // assertThat(region.get(2)).isEqualTo(new SimpleClass(2, (byte) 2));
+      assertThatThrownBy(() -> region.get(3)).hasRootCauseInstanceOf(IOException.class)
+          .hasRootCauseMessage("Unknown header byte 0");
+      assertThatThrownBy(() -> region.get(4)).hasRootCauseInstanceOf(IOException.class)
+          .hasRootCauseMessage("Unknown header byte 0");
     };
 
     server1.invoke(checkValue);
@@ -105,12 +109,12 @@ public class CorruptPdxClientServerDUnitTest {
     client.invoke(() -> {
       final Region<Object, Object> region = getClientCache().getRegion(REGION_NAME);
       ResultCollector resultCollector = FunctionService.onRegion(region)
-          .setArguments("/dev/null")
+          // .setArguments(new Object[] {"/dev/null"})
           .execute(new ExportLocalDataFunction());
       resultCollector.getResult();
 
-//      region.remove(3);
-//      region.destroy(4);
+      region.remove(3);
+      region.destroy(4);
     });
 
   }
diff --git a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxWriterImpl.java b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxWriterImpl.java
index 21160bb..9794aac 100644
--- a/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxWriterImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/pdx/internal/PdxWriterImpl.java
@@ -866,6 +866,7 @@ public class PdxWriterImpl implements PdxWriter {
   private HeapDataOutputStream.LongUpdater lu;
 
   public static volatile boolean breakIt = false;
+
   private void writeHeader() {
     if (breakIt) {
       this.os.write((byte) 0);