You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by sk...@apache.org on 2013/12/17 12:45:13 UTC
git commit: [OLINGO-84] reproduce multithreaded issue
Updated Branches:
refs/heads/master 9511aabab -> 57b9bc276
[OLINGO-84] reproduce multithreaded issue
Project: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/commit/57b9bc27
Tree: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/tree/57b9bc27
Diff: http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/diff/57b9bc27
Branch: refs/heads/master
Commit: 57b9bc276ae4d8b02aff1d6cb94cd9006c02523c
Parents: 9511aab
Author: Stephan Klevenz <sk...@apache.org>
Authored: Tue Dec 17 12:45:06 2013 +0100
Committer: Stephan Klevenz <sk...@apache.org>
Committed: Tue Dec 17 12:45:06 2013 +0100
----------------------------------------------------------------------
.../data/AnnotationsInMemoryDsTest.java | 70 ++++++++++++--------
1 file changed, 41 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-olingo-odata2/blob/57b9bc27/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java
----------------------------------------------------------------------
diff --git a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java
index 71e0f86..07da4d5 100644
--- a/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java
+++ b/odata2-annotation-processor/annotation-processor-core/src/test/java/org/apache/olingo/odata2/core/annotation/data/AnnotationsInMemoryDsTest.java
@@ -21,6 +21,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.apache.olingo.odata2.api.annotation.edm.EdmKey;
@@ -55,24 +56,27 @@ public class AnnotationsInMemoryDsTest {
datasource = new AnnotationInMemoryDs(Building.class.getPackage().getName(), false);
edmProvider = new AnnotationEdmProvider(Building.class.getPackage().getName());
}
-
+
@Test
@Ignore
public void multiThreadedSyncOnBuildingsTest() throws Exception {
final EdmEntitySet edmEntitySet = createMockedEdmEntitySet("Buildings");
+ CountDownLatch latch;
List<Thread> threads = new ArrayList<Thread>();
int max = 500;
+
+ latch = new CountDownLatch(max);
for (int i = 0; i < max; i++) {
- threads.add(createBuildingThread(datasource, edmEntitySet, String.valueOf("10")));
+ threads.add(createBuildingThread(latch, datasource, edmEntitySet, String.valueOf("10")));
}
-
+
for (Thread thread : threads) {
thread.start();
}
- TimeUnit.MILLISECONDS.sleep(1000);
-
+ latch.await(60, TimeUnit.SECONDS);
+
DataStore<Building> ds = datasource.getDataStore(Building.class);
Collection<Building> buildings = ds.read();
Assert.assertEquals(max, buildings.size());
@@ -87,7 +91,7 @@ public class AnnotationsInMemoryDsTest {
@EdmProperty
public String name;
}
-
+
@Test
@Ignore
public void multiThreadedSyncCreateReadTest() throws Exception {
@@ -96,39 +100,44 @@ public class AnnotationsInMemoryDsTest {
final AnnotationInMemoryDs localDs = new AnnotationInMemoryDs(SimpleEntity.class.getPackage().getName(), true);
final AnnotationEdmProvider localProvider = new AnnotationEdmProvider(ac);
final EdmEntitySet edmEntitySet = createMockedEdmEntitySet(localProvider, "SimpleEntitySet");
+ final CountDownLatch latch;
List<Thread> threads = new ArrayList<Thread>();
int max = 500;
+ latch = new CountDownLatch(max);
for (int i = 0; i < max; i++) {
- Runnable run = new Runnable() {
- @Override
- public void run() {
- SimpleEntity se = new SimpleEntity();
- se.id = Integer.valueOf(String.valueOf(System.currentTimeMillis()).substring(8));
- se.name = "Name: " + System.currentTimeMillis();
- try {
- localDs.createData(edmEntitySet, se);
- } catch (Exception ex) {
- throw new RuntimeException(ex);
+ Runnable run = new Runnable() {
+ @Override
+ public void run() {
+ SimpleEntity se = new SimpleEntity();
+ se.id = Integer.valueOf(String.valueOf(System.currentTimeMillis()).substring(8));
+ se.name = "Name: " + System.currentTimeMillis();
+ try {
+ localDs.createData(edmEntitySet, se);
+ } catch (Exception ex) {
+ throw new RuntimeException(ex);
+ }finally{
+ latch.countDown();
+ }
}
- }
- };
+ };
threads.add(new Thread(run));
}
-
+
for (Thread thread : threads) {
thread.start();
}
- TimeUnit.MILLISECONDS.sleep(500);
-
+ latch.await(60, TimeUnit.SECONDS);
+
DataStore<SimpleEntity> ds = localDs.getDataStore(SimpleEntity.class);
Collection<SimpleEntity> buildings = ds.read();
Assert.assertEquals(max, buildings.size());
}
- private Thread createBuildingThread(final DataSource datasource, final EdmEntitySet edmEntitySet, final String id) {
+ private Thread createBuildingThread(final CountDownLatch latch, final DataSource datasource,
+ final EdmEntitySet edmEntitySet, final String id) {
Runnable run = new Runnable() {
@Override
public void run() {
@@ -138,8 +147,12 @@ public class AnnotationsInMemoryDsTest {
try {
datasource.createData(edmEntitySet, building);
} catch (Exception ex) {
+ ex.printStackTrace();
throw new RuntimeException(ex);
}
+ finally {
+ latch.countDown();
+ }
}
};
@@ -154,7 +167,7 @@ public class AnnotationsInMemoryDsTest {
Building building = new Building();
building.setName("Common Building");
-
+
final int roomsCount = 10;
List<Room> rooms = new ArrayList<Room>();
for (int i = 0; i < roomsCount; i++) {
@@ -163,7 +176,7 @@ public class AnnotationsInMemoryDsTest {
datasource.createData(roomsEntitySet, room);
rooms.add(room);
}
-
+
building.getRooms().addAll(rooms);
datasource.createData(buildingsEntitySet, building);
@@ -173,11 +186,11 @@ public class AnnotationsInMemoryDsTest {
Building read = (Building) datasource.readData(buildingsEntitySet, keys);
Assert.assertEquals("Common Building", read.getName());
Assert.assertEquals("1", read.getId());
-
+
// execute
Object relatedData = datasource.readRelatedData(
buildingsEntitySet, building, roomsEntitySet, Collections.EMPTY_MAP);
-
+
// validate
Assert.assertTrue("Result is no collection.", relatedData instanceof Collection);
Collection<Room> relatedRooms = (Collection<Room>) relatedData;
@@ -189,7 +202,6 @@ public class AnnotationsInMemoryDsTest {
}
}
-
@Test
public void createSimpleEntity() throws Exception {
EdmEntitySet edmEntitySet = createMockedEdmEntitySet("Buildings");
@@ -319,8 +331,8 @@ public class AnnotationsInMemoryDsTest {
private EdmEntitySet createMockedEdmEntitySet(final String entitySetName) throws ODataException {
return createMockedEdmEntitySet(edmProvider, entitySetName);
}
-
- private EdmEntitySet createMockedEdmEntitySet(AnnotationEdmProvider edmProvider, final String entitySetName)
+
+ private EdmEntitySet createMockedEdmEntitySet(AnnotationEdmProvider edmProvider, final String entitySetName)
throws ODataException {
EntitySet entitySet = edmProvider.getEntitySet(DEFAULT_CONTAINER, entitySetName);
FullQualifiedName entityType = entitySet.getEntityType();