Flaky test fix
authorRay Matharu <rmatharu@linkedin.com>
Tue, 11 Dec 2018 18:34:55 +0000 (10:34 -0800)
committerPrateek Maheshwari <pmaheshwari@apache.org>
Tue, 11 Dec 2018 18:34:55 +0000 (10:34 -0800)
MockStorageEngine has a static list of incomingMessageEnvelopes, which was a non thread-safe ArrayList.
However in case of parallel restore (recent change), this needs to be a thread-safe list.

This causes a StorageRecoveryTool test to be flaky.

Author: Ray Matharu <rmatharu@linkedin.com>

Reviewers: Shanthoosh Venkatraman <svenkata@linkedin.com>

Closes #851 from rmatharu/flakytestfix

samza-core/src/test/java/org/apache/samza/storage/MockStorageEngine.java

index 4f71a54..fda1355 100644 (file)
@@ -21,8 +21,10 @@ package org.apache.samza.storage;
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Iterator;
 
+import java.util.List;
 import org.apache.samza.system.IncomingMessageEnvelope;
 import org.apache.samza.system.SystemStreamPartition;
 
@@ -35,7 +37,9 @@ public class MockStorageEngine implements StorageEngine {
   public static String storeName;
   public static File storeDir;
   public static SystemStreamPartition ssp;
-  public static ArrayList<IncomingMessageEnvelope> incomingMessageEnvelopes = new ArrayList<IncomingMessageEnvelope>();
+
+  // Thread-safe list is required because the list is shared across StorageEngine instances
+  public static List<IncomingMessageEnvelope> incomingMessageEnvelopes = Collections.synchronizedList(new ArrayList<>());
   public static StoreProperties storeProperties;
 
   public MockStorageEngine(String storeName, File storeDir, SystemStreamPartition changeLogSystemStreamPartition, StoreProperties properties) {