Author: vgritsenko Date: Tue Aug 7 06:44:56 2007 New Revision: 563499 URL: http://svn.apache.org/viewvc?view=rev&rev=563499 Log: start all threads at once
Modified: xml/xindice/trunk/java/tests/src/org/apache/xindice/core/CollectionTest.java Modified: xml/xindice/trunk/java/tests/src/org/apache/xindice/core/CollectionTest.java URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/tests/src/org/apache/xindice/core/CollectionTest.java?view=diff&rev=563499&r1=563498&r2=563499 ============================================================================== --- xml/xindice/trunk/java/tests/src/org/apache/xindice/core/CollectionTest.java (original) +++ xml/xindice/trunk/java/tests/src/org/apache/xindice/core/CollectionTest.java Tue Aug 7 06:44:56 2007 @@ -153,53 +153,61 @@ } public void testConcurrentCreateCollection() throws Exception { + final int THREADS = 10; final String name = "create"; - try { - final int THREADS = 10; - Thread[] threads = new Thread[THREADS]; - final Counter count = new Counter(); - - for (int i = 0; i < THREADS; i++) { + final Object go = new Object(); + final Counter count = new Counter(); - threads[i] = new Thread() { - public void run() { + Thread[] threads = new Thread[THREADS]; + for (int i = 0; i < THREADS; i++) { + threads[i] = new Thread() { + public void run() { + synchronized (go) { try { - db.createCollection(name, new Configuration( - DOMParser.toDocument( - "<collection compressed='true' name='" + name + "' inline-metadata='true'>" + - " <filer class='org.apache.xindice.core.filer.BTreeFiler' />" + - "</collection>"), false - )); - } catch (DBException e) { - if (e.faultCode == FaultCodes.COL_DUPLICATE_COLLECTION) { - count.incCount(); - } else { - throw new RuntimeException("Failure: " + e); - } - } catch (XindiceException e) { - // ignore + go.wait(); + } catch (InterruptedException e) { /* ignored */ } + } + + try { + db.createCollection(name, new Configuration( + DOMParser.toDocument( + "<collection compressed='true' name='" + name + "' inline-metadata='true'>" + + " <filer class='org.apache.xindice.core.filer.BTreeFiler' />" + + "</collection>"), false + )); + } catch (DBException e) { + if (e.faultCode == FaultCodes.COL_DUPLICATE_COLLECTION) { + count.incCount(); + } else { + throw new RuntimeException("Failure: " + e); } + } catch (XindiceException e) { + // ignore } - }; - } + } + }; + threads[i].setName("CollectionTest" + i); + threads[i].start(); + } - for (int i = 0; i < THREADS; i++) { - threads[i].start(); + try { + // Start all the threads at once + Thread.sleep(250); + synchronized (go) { + go.notifyAll(); } - for (int i = 0; i < THREADS; i++) { threads[i].join(); } - - assertEquals(THREADS - 1, count.getCount()); - } finally { Collection col = db.getCollection(name); - if (col != null) { - db.dropCollection(col); - } + if (col != null) { + db.dropCollection(col); + } } + + assertEquals(THREADS - 1, count.getCount()); } private class Counter {