You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@manifoldcf.apache.org by kw...@apache.org on 2011/12/18 09:36:56 UTC
svn commit: r1220353 [10/11] - in
/incubator/lcf/branches/CONNECTORS-286/warthog-reimport: ./
src/main/java/org/apache/warthog/api/
src/main/java/org/apache/warthog/bytekeyvalue/
src/main/java/org/apache/warthog/common/ src/main/java/org/apache/warthog...
Modified: incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/InMemTransactionImpl.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/InMemTransactionImpl.java?rev=1220353&r1=1220352&r2=1220353&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/InMemTransactionImpl.java (original)
+++ incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/InMemTransactionImpl.java Sun Dec 18 08:36:52 2011
@@ -1,172 +1,172 @@
-/* $Id: InMemTransactionImpl.java 1208500 2011-11-30 16:38:45Z kwright $ */
-
-/**
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package org.apache.warthog.tests;
-
-import org.apache.warthog.api.*;
-import org.apache.warthog.keyvalue.*;
-import org.apache.warthog.transactionalkeyvaluestore.*;
-import java.util.*;
-
-/** This class implements a transaction that is in progress, completely in memory.
-*/
-public class InMemTransactionImpl implements WHTransaction
-{
- protected WHAtomicKeyValueStore underlyingStore;
-
- protected KeyMap checkData = new KeyMap();
- protected KeyMap localData = null;
-
- /** Constructor */
- public InMemTransactionImpl(WHAtomicKeyValueStore underlyingStore)
- {
- this.underlyingStore = underlyingStore;
- }
-
- /** Set a value. May be null. */
- public void put(WHKey key, WHKeyValue value)
- throws WHException
- {
- if (localData == null)
- localData = new KeyMap();
- localData.put(key,value);
- }
-
- /** Get a value. Null returned if no value. */
- public WHKeyValue get(WHKey key)
- throws WHException
- {
- if (localData != null)
- {
- if (localData.containsKey(key))
- return localData.get(key);
- }
- if (checkData.containsKey(key))
- return checkData.get(key);
- WHKeyValue value = underlyingStore.get(key);
- checkData.put(key,value);
- return value;
- }
-
- /** Check to see if this transaction has become inconsistent.
- * If so, a WHDeadlockException is thrown.
- */
- public void check()
- throws WHException
- {
- underlyingStore.check(checkData);
- }
-
- /** Commit this transaction */
- public void commit()
- throws WHException
- {
- if (localData != null)
- underlyingStore.setAll(checkData,localData);
- else
- underlyingStore.check(checkData);
- }
-
- /** Abandon this transaction.
- * This is called as a nicety to free any resources associated with the
- * transaction. The implementation should also be robust as far as
- * freeing resources if this method is NOT called, but might perform
- * the necessary logic in a finalizer at an arbitrary time.
- */
- public void abandon()
- {
- // Does nothing so long as the entire temporary transaction is in
- // memory.
- }
-
- /** Local implementation of WHKey/WHValue map */
- protected static class KeyMap implements WHKeyMap
- {
- protected Map<WrappedKey,WHKeyValue> map = new HashMap<WrappedKey,WHKeyValue>();
-
- public KeyMap()
- {
- }
-
- /** Get a value from the map.
- */
- public WHKeyValue get(WHKey key)
- throws WHException
- {
- return map.get(new WrappedKey(key));
- }
-
- /** Iterate over the keys in the map.
- */
- public WHKeyIterator iterator()
- throws WHException
- {
- return new KeyIterator(map.keySet().iterator());
- }
-
- /** Get the size of the map.
- */
- public long size()
- throws WHException
- {
- return (long)map.size();
- }
-
- /** Check if the map contains the specified key.
- */
- public boolean containsKey(WHKey key)
- {
- return map.containsKey(new WrappedKey(key));
- }
-
- /** Put a value.
- */
- public void put(WHKey key, WHKeyValue value)
- {
- map.put(new WrappedKey(key),value);
- }
- }
-
- /** Key iterator for KeyMap */
- protected static class KeyIterator implements WHKeyIterator
- {
- protected Iterator<WrappedKey> iterator;
-
- public KeyIterator(Iterator<WrappedKey> iterator)
- {
- this.iterator = iterator;
- }
-
- /** Check if there is another value */
- public boolean hasNext()
- throws WHException
- {
- return iterator.hasNext();
- }
-
- /** Get the next value */
- public WHKey next()
- throws WHException
- {
- return iterator.next().getKey();
- }
-
- }
-
-}
+/* $Id$ */
+
+/**
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.apache.warthog.tests;
+
+import org.apache.warthog.api.*;
+import org.apache.warthog.keyvalue.*;
+import org.apache.warthog.transactionalkeyvaluestore.*;
+import java.util.*;
+
+/** This class implements a transaction that is in progress, completely in memory.
+*/
+public class InMemTransactionImpl implements WHTransaction
+{
+ protected WHAtomicKeyValueStore underlyingStore;
+
+ protected KeyMap checkData = new KeyMap();
+ protected KeyMap localData = null;
+
+ /** Constructor */
+ public InMemTransactionImpl(WHAtomicKeyValueStore underlyingStore)
+ {
+ this.underlyingStore = underlyingStore;
+ }
+
+ /** Set a value. May be null. */
+ public void put(WHKey key, WHKeyValue value)
+ throws WHException
+ {
+ if (localData == null)
+ localData = new KeyMap();
+ localData.put(key,value);
+ }
+
+ /** Get a value. Null returned if no value. */
+ public WHKeyValue get(WHKey key)
+ throws WHException
+ {
+ if (localData != null)
+ {
+ if (localData.containsKey(key))
+ return localData.get(key);
+ }
+ if (checkData.containsKey(key))
+ return checkData.get(key);
+ WHKeyValue value = underlyingStore.get(key);
+ checkData.put(key,value);
+ return value;
+ }
+
+ /** Check to see if this transaction has become inconsistent.
+ * If so, a WHDeadlockException is thrown.
+ */
+ public void check()
+ throws WHException
+ {
+ underlyingStore.check(checkData);
+ }
+
+ /** Commit this transaction */
+ public void commit()
+ throws WHException
+ {
+ if (localData != null)
+ underlyingStore.setAll(checkData,localData);
+ else
+ underlyingStore.check(checkData);
+ }
+
+ /** Abandon this transaction.
+ * This is called as a nicety to free any resources associated with the
+ * transaction. The implementation should also be robust as far as
+ * freeing resources if this method is NOT called, but might perform
+ * the necessary logic in a finalizer at an arbitrary time.
+ */
+ public void abandon()
+ {
+ // Does nothing so long as the entire temporary transaction is in
+ // memory.
+ }
+
+ /** Local implementation of WHKey/WHValue map */
+ protected static class KeyMap implements WHKeyMap
+ {
+ protected Map<WrappedKey,WHKeyValue> map = new HashMap<WrappedKey,WHKeyValue>();
+
+ public KeyMap()
+ {
+ }
+
+ /** Get a value from the map.
+ */
+ public WHKeyValue get(WHKey key)
+ throws WHException
+ {
+ return map.get(new WrappedKey(key));
+ }
+
+ /** Iterate over the keys in the map.
+ */
+ public WHKeyIterator iterator()
+ throws WHException
+ {
+ return new KeyIterator(map.keySet().iterator());
+ }
+
+ /** Get the size of the map.
+ */
+ public long size()
+ throws WHException
+ {
+ return (long)map.size();
+ }
+
+ /** Check if the map contains the specified key.
+ */
+ public boolean containsKey(WHKey key)
+ {
+ return map.containsKey(new WrappedKey(key));
+ }
+
+ /** Put a value.
+ */
+ public void put(WHKey key, WHKeyValue value)
+ {
+ map.put(new WrappedKey(key),value);
+ }
+ }
+
+ /** Key iterator for KeyMap */
+ protected static class KeyIterator implements WHKeyIterator
+ {
+ protected Iterator<WrappedKey> iterator;
+
+ public KeyIterator(Iterator<WrappedKey> iterator)
+ {
+ this.iterator = iterator;
+ }
+
+ /** Check if there is another value */
+ public boolean hasNext()
+ throws WHException
+ {
+ return iterator.hasNext();
+ }
+
+ /** Get the next value */
+ public WHKey next()
+ throws WHException
+ {
+ return iterator.next().getKey();
+ }
+
+ }
+
+}
Propchange: incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/InMemTransactionImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/InMemTransactionImpl.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/InMemTransactionalStoreImpl.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/InMemTransactionalStoreImpl.java?rev=1220353&r1=1220352&r2=1220353&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/InMemTransactionalStoreImpl.java (original)
+++ incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/InMemTransactionalStoreImpl.java Sun Dec 18 08:36:52 2011
@@ -1,46 +1,46 @@
-/* $Id: InMemTransactionalStoreImpl.java 1205763 2011-11-24 09:15:57Z kwright $ */
-
-/**
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-package org.apache.warthog.tests;
-
-import org.apache.warthog.api.*;
-import org.apache.warthog.keyvalue.*;
-import org.apache.warthog.transactionalkeyvaluestore.*;
-
-/** Class implementing a transactional key/value store completely in memory.
-*/
-public class InMemTransactionalStoreImpl implements WHTransactionalStore
-{
- /** Underlying atomic key/value store */
- protected WHAtomicKeyValueStore underlyingStore;
-
- /** Constructor. */
- public InMemTransactionalStoreImpl(WHAtomicKeyValueStore underlyingStore)
- {
- this.underlyingStore = underlyingStore;
- }
-
- /** Create a transaction. */
- public WHTransaction createTransaction()
- throws WHException
- {
- return new InMemTransactionImpl(this.underlyingStore);
- }
-
-}
+/* $Id$ */
+
+/**
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package org.apache.warthog.tests;
+
+import org.apache.warthog.api.*;
+import org.apache.warthog.keyvalue.*;
+import org.apache.warthog.transactionalkeyvaluestore.*;
+
+/** Class implementing a transactional key/value store completely in memory.
+*/
+public class InMemTransactionalStoreImpl implements WHTransactionalStore
+{
+ /** Underlying atomic key/value store */
+ protected WHAtomicKeyValueStore underlyingStore;
+
+ /** Constructor. */
+ public InMemTransactionalStoreImpl(WHAtomicKeyValueStore underlyingStore)
+ {
+ this.underlyingStore = underlyingStore;
+ }
+
+ /** Create a transaction. */
+ public WHTransaction createTransaction()
+ throws WHException
+ {
+ return new InMemTransactionImpl(this.underlyingStore);
+ }
+
+}
Propchange: incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/InMemTransactionalStoreImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/InMemTransactionalStoreImpl.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/MultiThreadTest.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/MultiThreadTest.java?rev=1220353&r1=1220352&r2=1220353&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/MultiThreadTest.java (original)
+++ incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/MultiThreadTest.java Sun Dec 18 08:36:52 2011
@@ -1,473 +1,473 @@
-/* $Id: MultiThreadTest.java 1212814 2011-12-10 15:26:17Z kwright $ */
-
-/**
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.apache.warthog.tests;
-
-import org.apache.warthog.api.*;
-import org.apache.warthog.transactionalkeyvaluestore.*;
-import org.apache.warthog.keyvaluetablestore.*;
-import org.apache.warthog.keyvalue.*;
-import org.apache.warthog.common.*;
-import org.junit.*;
-import static org.junit.Assert.*;
-import java.util.*;
-
-public class MultiThreadTest
-{
-
- @Test
- public void singleThreadBaselineTest()
- throws Exception
- {
- doWrites(1);
- }
-
- @Test
- public void writeOnlyTest()
- throws Exception
- {
- doWrites(24);
- }
-
- protected void doWrites(int threadCount)
- throws Exception
- {
- int totalInserts = 10000;
-
- int repeatCount = totalInserts/threadCount;
-
- WHAtomicKeyValueStore store = new InMemAtomicNativeNonblockingKeyValueStore(16777216);
-
- WHTableStore ts = new TableStore(new InMemNativeTransactionalStoreImpl(store));
-
- ts.beginTransaction();
- ts.createTable("testtable",new String[]{"colA","colB","colC","colD","colE","colF","colG","colH","colI","colJ"});
- ts.commitTransaction();
-
- ts.beginTransaction();
- WHTable table = ts.lookupTable("testtable");
- ts.createIndex("testindex1",table,
- new String[]{"colB","colA"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.createIndex("testindex2",table,
- new String[]{"colD","colC"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.createIndex("testindex3",table,
- new String[]{"colF","colE"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.createIndex("testindex4",table,
- new String[]{"colH","colG"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.createIndex("testindex5",table,
- new String[]{"colJ","colI"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.commitTransaction();
-
- InsertThread[] threads = new InsertThread[threadCount];
- for (int i = 0 ; i < threadCount ; i++)
- {
- threads[i] = new InsertThread("Worker thread "+i,store,repeatCount);
- }
-
- long startTime = System.currentTimeMillis();
- for (int i = 0 ; i < threadCount ; i++)
- {
- threads[i].start();
- }
-
- // Join at the end
-
- int contentions = 0;
- for (int i = 0 ; i < threadCount ; i++)
- {
- threads[i].join();
- Throwable e = threads[i].getException();
- if (e != null)
- {
- if (e instanceof Error)
- throw (Error)e;
- if (e instanceof RuntimeException)
- throw (RuntimeException)e;
- throw (Exception)e;
- }
- contentions += threads[i].getContentions();
- }
-
- System.out.println(Integer.toString(totalInserts)+" writes across "+
- Integer.toString(threadCount)+" threads took "+
- new Long(System.currentTimeMillis()-startTime)+" ms and had "+
- Integer.toString(contentions)+" contention retries");
- }
-
- @Test
- public void writeQueryTest()
- throws Exception
- {
- int totalCount = 10000/4;
- int threadCount = 24;
-
- int repeatCount = totalCount/threadCount;
-
- WHAtomicKeyValueStore store = new InMemAtomicNativeNonblockingKeyValueStore(16777216);
-
- WHTableStore ts = new TableStore(new InMemNativeTransactionalStoreImpl(store));
-
- ts.beginTransaction();
- ts.createTable("testtable",new String[]{"colA","colB","colC","colD","colE","colF","colG","colH","colI","colJ"});
- ts.commitTransaction();
-
- ts.beginTransaction();
- WHTable table = ts.lookupTable("testtable");
- ts.createIndex("testindex1",table,
- new String[]{"colB","colA"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.createIndex("testindex2",table,
- new String[]{"colD","colC"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.createIndex("testindex3",table,
- new String[]{"colF","colE"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.createIndex("testindex4",table,
- new String[]{"colH","colG"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.createIndex("testindex5",table,
- new String[]{"colJ","colI"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.commitTransaction();
-
- TaskThread[] threads = new TaskThread[threadCount];
- for (int i = 0 ; i < threadCount ; i++)
- {
- threads[i] = new TaskThread("Worker thread "+i,store,repeatCount);
- }
-
- long startTime = System.currentTimeMillis();
- for (int i = 0 ; i < threadCount ; i++)
- {
- threads[i].start();
- }
-
- // Join at the end
-
- int contentions = 0;
- for (int i = 0 ; i < threadCount ; i++)
- {
- threads[i].join();
- Throwable e = threads[i].getException();
- if (e != null)
- {
- if (e instanceof Error)
- throw (Error)e;
- if (e instanceof RuntimeException)
- throw (RuntimeException)e;
- throw (Exception)e;
- }
- contentions += threads[i].getContentions();
- }
-
- System.out.println(Integer.toString(threadCount*repeatCount)+" writes and "+
- Integer.toString(threadCount*repeatCount*3)+" reads across "+
- Integer.toString(threadCount)+" threads took "+
- new Long(System.currentTimeMillis()-startTime)+" ms and had "+
- Integer.toString(contentions)+" contention retries");
- }
-
- // Protected methods
-
- protected static String randomString(Random r)
- {
- return new Long(randomLong(r)).toString();
- }
-
- protected static long randomLong(Random r)
- {
- return r.nextLong();
- }
-
- protected static class InsertThread extends Thread
- {
- protected int repeatCount;
- protected int contentions = 0;
- protected WHAtomicKeyValueStore store;
- protected Throwable exception;
- protected Random r = new Random();
-
- public InsertThread(String name, WHAtomicKeyValueStore store, int repeatCount)
- {
- super();
- this.repeatCount = repeatCount;
- this.store = store;
- setName(name);
- }
-
- public void run()
- {
- try
- {
- WHTableStore ts = new TableStore(new InMemNativeTransactionalStoreImpl(store));
- performInserts(ts);
- }
- catch (Throwable e)
- {
- exception = e;
- }
- }
-
- public Throwable getException()
- {
- return exception;
- }
-
- public int getContentions()
- {
- return contentions;
- }
-
- protected void backOff()
- throws InterruptedException
- {
- contentions++;
- //Thread.sleep(r.nextInt(100));
- Thread.yield();
- }
-
- protected void performInserts(WHTableStore ts)
- throws InterruptedException, WHException
- {
- // Task consists of a certain number of inserts and queries
- for (int i = 0 ; i < repeatCount ; i++)
- {
- // Add a row
- while (true)
- {
- ts.beginTransaction();
- try
- {
- WHTable table = ts.lookupTable("testtable");
- table.insertRow(new String[]{"colA","colB","colC","colD","colE","colF","colG","colH","colI","colJ"},
- new WHValue[]{
- new LongValue(randomLong(r)),new StringValue(randomString(r)),
- new LongValue(randomLong(r)),new StringValue(randomString(r)),
- new LongValue(randomLong(r)),new StringValue(randomString(r)),
- new LongValue(randomLong(r)),new StringValue(randomString(r)),
- new LongValue(randomLong(r)),new StringValue(randomString(r))});
- ts.commitTransaction();
- break;
- }
- catch (WHConcurrencyException e)
- {
- backOff();
- continue;
- }
- finally
- {
- ts.abandonTransaction();
- }
- }
- }
- }
-
- }
-
- protected static class TaskThread extends Thread
- {
- protected int repeatCount;
- protected int contentions = 0;
- protected WHAtomicKeyValueStore store;
- protected Throwable exception;
- protected Random r = new Random();
-
- public TaskThread(String name, WHAtomicKeyValueStore store, int repeatCount)
- {
- super();
- this.repeatCount = repeatCount;
- this.store = store;
- setName(name);
- }
-
- public void run()
- {
- try
- {
- WHTableStore ts = new TableStore(new InMemNativeTransactionalStoreImpl(store));
- performTask(ts);
- }
- catch (Throwable e)
- {
- exception = e;
- }
- }
-
- public Throwable getException()
- {
- return exception;
- }
-
- public int getContentions()
- {
- return contentions;
- }
-
- protected void backOff()
- throws InterruptedException
- {
- contentions++;
- //Thread.sleep(r.nextInt(100));
- Thread.yield();
- }
-
- protected void performTask(WHTableStore ts)
- throws InterruptedException, WHException
- {
- // Task consists of a certain number of inserts and queries
- for (int i = 0 ; i < repeatCount ; i++)
- {
- // Add a row
- while (true)
- {
- ts.beginTransaction();
- try
- {
- WHTable table = ts.lookupTable("testtable");
- table.insertRow(new String[]{"colA","colB","colC","colD","colE","colF","colG","colH","colI","colJ"},
- new WHValue[]{
- new LongValue(randomLong(r)),new StringValue(randomString(r)),
- new LongValue(randomLong(r)),new StringValue(randomString(r)),
- new LongValue(randomLong(r)),new StringValue(randomString(r)),
- new LongValue(randomLong(r)),new StringValue(randomString(r)),
- new LongValue(randomLong(r)),new StringValue(randomString(r))});
- ts.commitTransaction();
- break;
- }
- catch (WHConcurrencyException e)
- {
- backOff();
- continue;
- }
- finally
- {
- ts.abandonTransaction();
- }
- }
-
- // Do a query
- while (true)
- {
- ts.beginTransaction();
- try
- {
- WHIndex index = ts.lookupIndex("testindex1");
- WHAccessor accessor = index.buildAccessor(new IndexCriteria[]{
- new IndexBetween(new StringValue("1"),new StringValue("2")),
- null},null);
- while (true)
- {
- if (accessor.getCurrentRowID() == null)
- break;
- accessor.advance();
- }
- ts.commitTransaction();
- break;
- }
- catch (WHConcurrencyException e)
- {
- backOff();
- continue;
- }
- finally
- {
- ts.abandonTransaction();
- }
- }
-
- // Do another query
- while (true)
- {
- ts.beginTransaction();
- try
- {
- WHIndex index = ts.lookupIndex("testindex2");
- WHAccessor accessor = index.buildAccessor(new IndexCriteria[]{
- new IndexBetween(new StringValue("23"),new StringValue("25")),
- null},null);
- while (true)
- {
- if (accessor.getCurrentRowID() == null)
- break;
- accessor.advance();
- }
- ts.commitTransaction();
- break;
- }
- catch (WHConcurrencyException e)
- {
- backOff();
- continue;
- }
- finally
- {
- ts.abandonTransaction();
- }
- }
-
- // Do a third query
- while (true)
- {
- ts.beginTransaction();
- try
- {
- WHIndex index = ts.lookupIndex("testindex3");
- WHAccessor accessor = index.buildAccessor(new IndexCriteria[]{
- new IndexBetween(new StringValue("02"),new StringValue("04")),
- null},null);
- while (true)
- {
- if (accessor.getCurrentRowID() == null)
- break;
- accessor.advance();
- }
- ts.commitTransaction();
- break;
- }
- catch (WHConcurrencyException e)
- {
- backOff();
- continue;
- }
- finally
- {
- ts.abandonTransaction();
- }
- }
-
- }
- }
-
- }
-
+/* $Id$ */
+
+/**
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.warthog.tests;
+
+import org.apache.warthog.api.*;
+import org.apache.warthog.transactionalkeyvaluestore.*;
+import org.apache.warthog.keyvaluetablestore.*;
+import org.apache.warthog.keyvalue.*;
+import org.apache.warthog.common.*;
+import org.junit.*;
+import static org.junit.Assert.*;
+import java.util.*;
+
+public class MultiThreadTest
+{
+
+ @Test
+ public void singleThreadBaselineTest()
+ throws Exception
+ {
+ doWrites(1);
+ }
+
+ @Test
+ public void writeOnlyTest()
+ throws Exception
+ {
+ doWrites(24);
+ }
+
+ protected void doWrites(int threadCount)
+ throws Exception
+ {
+ int totalInserts = 10000;
+
+ int repeatCount = totalInserts/threadCount;
+
+ WHAtomicKeyValueStore store = new InMemAtomicNativeNonblockingKeyValueStore(16777216);
+
+ WHTableStore ts = new TableStore(new InMemNativeTransactionalStoreImpl(store));
+
+ ts.beginTransaction();
+ ts.createTable("testtable",new String[]{"colA","colB","colC","colD","colE","colF","colG","colH","colI","colJ"});
+ ts.commitTransaction();
+
+ ts.beginTransaction();
+ WHTable table = ts.lookupTable("testtable");
+ ts.createIndex("testindex1",table,
+ new String[]{"colB","colA"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.createIndex("testindex2",table,
+ new String[]{"colD","colC"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.createIndex("testindex3",table,
+ new String[]{"colF","colE"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.createIndex("testindex4",table,
+ new String[]{"colH","colG"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.createIndex("testindex5",table,
+ new String[]{"colJ","colI"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.commitTransaction();
+
+ InsertThread[] threads = new InsertThread[threadCount];
+ for (int i = 0 ; i < threadCount ; i++)
+ {
+ threads[i] = new InsertThread("Worker thread "+i,store,repeatCount);
+ }
+
+ long startTime = System.currentTimeMillis();
+ for (int i = 0 ; i < threadCount ; i++)
+ {
+ threads[i].start();
+ }
+
+ // Join at the end
+
+ int contentions = 0;
+ for (int i = 0 ; i < threadCount ; i++)
+ {
+ threads[i].join();
+ Throwable e = threads[i].getException();
+ if (e != null)
+ {
+ if (e instanceof Error)
+ throw (Error)e;
+ if (e instanceof RuntimeException)
+ throw (RuntimeException)e;
+ throw (Exception)e;
+ }
+ contentions += threads[i].getContentions();
+ }
+
+ System.out.println(Integer.toString(totalInserts)+" writes across "+
+ Integer.toString(threadCount)+" threads took "+
+ new Long(System.currentTimeMillis()-startTime)+" ms and had "+
+ Integer.toString(contentions)+" contention retries");
+ }
+
+ @Test
+ public void writeQueryTest()
+ throws Exception
+ {
+ int totalCount = 10000/4;
+ int threadCount = 24;
+
+ int repeatCount = totalCount/threadCount;
+
+ WHAtomicKeyValueStore store = new InMemAtomicNativeNonblockingKeyValueStore(16777216);
+
+ WHTableStore ts = new TableStore(new InMemNativeTransactionalStoreImpl(store));
+
+ ts.beginTransaction();
+ ts.createTable("testtable",new String[]{"colA","colB","colC","colD","colE","colF","colG","colH","colI","colJ"});
+ ts.commitTransaction();
+
+ ts.beginTransaction();
+ WHTable table = ts.lookupTable("testtable");
+ ts.createIndex("testindex1",table,
+ new String[]{"colB","colA"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.createIndex("testindex2",table,
+ new String[]{"colD","colC"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.createIndex("testindex3",table,
+ new String[]{"colF","colE"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.createIndex("testindex4",table,
+ new String[]{"colH","colG"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.createIndex("testindex5",table,
+ new String[]{"colJ","colI"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.commitTransaction();
+
+ TaskThread[] threads = new TaskThread[threadCount];
+ for (int i = 0 ; i < threadCount ; i++)
+ {
+ threads[i] = new TaskThread("Worker thread "+i,store,repeatCount);
+ }
+
+ long startTime = System.currentTimeMillis();
+ for (int i = 0 ; i < threadCount ; i++)
+ {
+ threads[i].start();
+ }
+
+ // Join at the end
+
+ int contentions = 0;
+ for (int i = 0 ; i < threadCount ; i++)
+ {
+ threads[i].join();
+ Throwable e = threads[i].getException();
+ if (e != null)
+ {
+ if (e instanceof Error)
+ throw (Error)e;
+ if (e instanceof RuntimeException)
+ throw (RuntimeException)e;
+ throw (Exception)e;
+ }
+ contentions += threads[i].getContentions();
+ }
+
+ System.out.println(Integer.toString(threadCount*repeatCount)+" writes and "+
+ Integer.toString(threadCount*repeatCount*3)+" reads across "+
+ Integer.toString(threadCount)+" threads took "+
+ new Long(System.currentTimeMillis()-startTime)+" ms and had "+
+ Integer.toString(contentions)+" contention retries");
+ }
+
+ // Protected methods
+
+ protected static String randomString(Random r)
+ {
+ return new Long(randomLong(r)).toString();
+ }
+
+ protected static long randomLong(Random r)
+ {
+ return r.nextLong();
+ }
+
+ protected static class InsertThread extends Thread
+ {
+ protected int repeatCount;
+ protected int contentions = 0;
+ protected WHAtomicKeyValueStore store;
+ protected Throwable exception;
+ protected Random r = new Random();
+
+ public InsertThread(String name, WHAtomicKeyValueStore store, int repeatCount)
+ {
+ super();
+ this.repeatCount = repeatCount;
+ this.store = store;
+ setName(name);
+ }
+
+ public void run()
+ {
+ try
+ {
+ WHTableStore ts = new TableStore(new InMemNativeTransactionalStoreImpl(store));
+ performInserts(ts);
+ }
+ catch (Throwable e)
+ {
+ exception = e;
+ }
+ }
+
+ public Throwable getException()
+ {
+ return exception;
+ }
+
+ public int getContentions()
+ {
+ return contentions;
+ }
+
+ protected void backOff()
+ throws InterruptedException
+ {
+ contentions++;
+ //Thread.sleep(r.nextInt(100));
+ Thread.yield();
+ }
+
+ protected void performInserts(WHTableStore ts)
+ throws InterruptedException, WHException
+ {
+ // Task consists of a certain number of inserts and queries
+ for (int i = 0 ; i < repeatCount ; i++)
+ {
+ // Add a row
+ while (true)
+ {
+ ts.beginTransaction();
+ try
+ {
+ WHTable table = ts.lookupTable("testtable");
+ table.insertRow(new String[]{"colA","colB","colC","colD","colE","colF","colG","colH","colI","colJ"},
+ new WHValue[]{
+ new LongValue(randomLong(r)),new StringValue(randomString(r)),
+ new LongValue(randomLong(r)),new StringValue(randomString(r)),
+ new LongValue(randomLong(r)),new StringValue(randomString(r)),
+ new LongValue(randomLong(r)),new StringValue(randomString(r)),
+ new LongValue(randomLong(r)),new StringValue(randomString(r))});
+ ts.commitTransaction();
+ break;
+ }
+ catch (WHConcurrencyException e)
+ {
+ backOff();
+ continue;
+ }
+ finally
+ {
+ ts.abandonTransaction();
+ }
+ }
+ }
+ }
+
+ }
+
+ protected static class TaskThread extends Thread
+ {
+ protected int repeatCount;
+ protected int contentions = 0;
+ protected WHAtomicKeyValueStore store;
+ protected Throwable exception;
+ protected Random r = new Random();
+
+ public TaskThread(String name, WHAtomicKeyValueStore store, int repeatCount)
+ {
+ super();
+ this.repeatCount = repeatCount;
+ this.store = store;
+ setName(name);
+ }
+
+ public void run()
+ {
+ try
+ {
+ WHTableStore ts = new TableStore(new InMemNativeTransactionalStoreImpl(store));
+ performTask(ts);
+ }
+ catch (Throwable e)
+ {
+ exception = e;
+ }
+ }
+
+ public Throwable getException()
+ {
+ return exception;
+ }
+
+ public int getContentions()
+ {
+ return contentions;
+ }
+
+ protected void backOff()
+ throws InterruptedException
+ {
+ contentions++;
+ //Thread.sleep(r.nextInt(100));
+ Thread.yield();
+ }
+
+ protected void performTask(WHTableStore ts)
+ throws InterruptedException, WHException
+ {
+ // Task consists of a certain number of inserts and queries
+ for (int i = 0 ; i < repeatCount ; i++)
+ {
+ // Add a row
+ while (true)
+ {
+ ts.beginTransaction();
+ try
+ {
+ WHTable table = ts.lookupTable("testtable");
+ table.insertRow(new String[]{"colA","colB","colC","colD","colE","colF","colG","colH","colI","colJ"},
+ new WHValue[]{
+ new LongValue(randomLong(r)),new StringValue(randomString(r)),
+ new LongValue(randomLong(r)),new StringValue(randomString(r)),
+ new LongValue(randomLong(r)),new StringValue(randomString(r)),
+ new LongValue(randomLong(r)),new StringValue(randomString(r)),
+ new LongValue(randomLong(r)),new StringValue(randomString(r))});
+ ts.commitTransaction();
+ break;
+ }
+ catch (WHConcurrencyException e)
+ {
+ backOff();
+ continue;
+ }
+ finally
+ {
+ ts.abandonTransaction();
+ }
+ }
+
+ // Do a query
+ while (true)
+ {
+ ts.beginTransaction();
+ try
+ {
+ WHIndex index = ts.lookupIndex("testindex1");
+ WHAccessor accessor = index.buildAccessor(new IndexCriteria[]{
+ new IndexBetween(new StringValue("1"),new StringValue("2")),
+ null},null);
+ while (true)
+ {
+ if (accessor.getCurrentRowID() == null)
+ break;
+ accessor.advance();
+ }
+ ts.commitTransaction();
+ break;
+ }
+ catch (WHConcurrencyException e)
+ {
+ backOff();
+ continue;
+ }
+ finally
+ {
+ ts.abandonTransaction();
+ }
+ }
+
+ // Do another query
+ while (true)
+ {
+ ts.beginTransaction();
+ try
+ {
+ WHIndex index = ts.lookupIndex("testindex2");
+ WHAccessor accessor = index.buildAccessor(new IndexCriteria[]{
+ new IndexBetween(new StringValue("23"),new StringValue("25")),
+ null},null);
+ while (true)
+ {
+ if (accessor.getCurrentRowID() == null)
+ break;
+ accessor.advance();
+ }
+ ts.commitTransaction();
+ break;
+ }
+ catch (WHConcurrencyException e)
+ {
+ backOff();
+ continue;
+ }
+ finally
+ {
+ ts.abandonTransaction();
+ }
+ }
+
+ // Do a third query
+ while (true)
+ {
+ ts.beginTransaction();
+ try
+ {
+ WHIndex index = ts.lookupIndex("testindex3");
+ WHAccessor accessor = index.buildAccessor(new IndexCriteria[]{
+ new IndexBetween(new StringValue("02"),new StringValue("04")),
+ null},null);
+ while (true)
+ {
+ if (accessor.getCurrentRowID() == null)
+ break;
+ accessor.advance();
+ }
+ ts.commitTransaction();
+ break;
+ }
+ catch (WHConcurrencyException e)
+ {
+ backOff();
+ continue;
+ }
+ finally
+ {
+ ts.abandonTransaction();
+ }
+ }
+
+ }
+ }
+
+ }
+
}
\ No newline at end of file
Propchange: incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/MultiThreadTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/MultiThreadTest.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified: incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/PerformanceTest.java
URL: http://svn.apache.org/viewvc/incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/PerformanceTest.java?rev=1220353&r1=1220352&r2=1220353&view=diff
==============================================================================
--- incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/PerformanceTest.java (original)
+++ incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/PerformanceTest.java Sun Dec 18 08:36:52 2011
@@ -1,121 +1,121 @@
-/* $Id: PerformanceTest.java 1208116 2011-11-29 22:36:26Z kwright $ */
-
-/**
-* Licensed to the Apache Software Foundation (ASF) under one or more
-* contributor license agreements. See the NOTICE file distributed with
-* this work for additional information regarding copyright ownership.
-* The ASF licenses this file to You under the Apache License, Version 2.0
-* (the "License"); you may not use this file except in compliance with
-* the License. You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-package org.apache.warthog.tests;
-
-import org.apache.warthog.api.*;
-import org.apache.warthog.transactionalkeyvaluestore.*;
-import org.apache.warthog.keyvaluetablestore.*;
-import org.apache.warthog.keyvalue.*;
-import org.apache.warthog.common.*;
-import org.junit.*;
-import static org.junit.Assert.*;
-import java.util.*;
-
-public class PerformanceTest
-{
-
- @Test
- public void rowCreateTest()
- throws Exception
- {
- WHTableStore ts = new TableStore(new InMemNativeTransactionalStoreImpl(new InMemAtomicNativeKeyValueStore(16777216)));
-
- ts.beginTransaction();
- ts.createTable("testtable",new String[]{"colA","colB","colC","colD","colE","colF","colG","colH","colI","colJ"});
- ts.commitTransaction();
-
- ts.beginTransaction();
- WHTable table = ts.lookupTable("testtable");
- ts.createIndex("testindex1",table,
- new String[]{"colB","colA"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.createIndex("testindex2",table,
- new String[]{"colD","colC"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.createIndex("testindex3",table,
- new String[]{"colF","colE"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.createIndex("testindex4",table,
- new String[]{"colH","colG"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.createIndex("testindex5",table,
- new String[]{"colJ","colI"},
- new String[]{"org.apache.warthog.common.StringComparatorAscending",
- "org.apache.warthog.common.LongComparatorAscending"},false);
- ts.commitTransaction();
-
- int rowCount = 10000;
- Random r = new Random();
- String[] str1Values = new String[rowCount];
- long[] long1Values = new long[rowCount];
- String[] str2Values = new String[rowCount];
- long[] long2Values = new long[rowCount];
- String[] str3Values = new String[rowCount];
- long[] long3Values = new long[rowCount];
- String[] str4Values = new String[rowCount];
- long[] long4Values = new long[rowCount];
- String[] str5Values = new String[rowCount];
- long[] long5Values = new long[rowCount];
- for (int i = 0 ; i < rowCount ; i++)
- {
- str1Values[i] = randomString(r);
- long1Values[i] = randomLong(r);
- str2Values[i] = randomString(r);
- long2Values[i] = randomLong(r);
- str3Values[i] = randomString(r);
- long3Values[i] = randomLong(r);
- str4Values[i] = randomString(r);
- long4Values[i] = randomLong(r);
- str5Values[i] = randomString(r);
- long5Values[i] = randomLong(r);
- }
- long startTime = System.currentTimeMillis();
- for (int i = 0 ; i < rowCount ; i++)
- {
- ts.beginTransaction();
- table = ts.lookupTable("testtable");
- table.insertRow(new String[]{"colA","colB","colC","colD","colE","colF","colG","colH","colI","colJ"},
- new WHValue[]{
- new LongValue(long1Values[i]),new StringValue(str1Values[i]),
- new LongValue(long2Values[i]),new StringValue(str2Values[i]),
- new LongValue(long3Values[i]),new StringValue(str3Values[i]),
- new LongValue(long4Values[i]),new StringValue(str4Values[i]),
- new LongValue(long5Values[i]),new StringValue(str5Values[i])});
- ts.commitTransaction();
- }
- System.out.println("Create of "+Integer.toString(rowCount)+" rows took "+new Long(System.currentTimeMillis() - startTime).toString()+" ms");
- }
-
- // Protected methods
-
- protected static String randomString(Random r)
- {
- return new Long(randomLong(r)).toString();
- }
-
- protected static long randomLong(Random r)
- {
- return r.nextLong();
- }
-
+/* $Id$ */
+
+/**
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.warthog.tests;
+
+import org.apache.warthog.api.*;
+import org.apache.warthog.transactionalkeyvaluestore.*;
+import org.apache.warthog.keyvaluetablestore.*;
+import org.apache.warthog.keyvalue.*;
+import org.apache.warthog.common.*;
+import org.junit.*;
+import static org.junit.Assert.*;
+import java.util.*;
+
+public class PerformanceTest
+{
+
+ @Test
+ public void rowCreateTest()
+ throws Exception
+ {
+ WHTableStore ts = new TableStore(new InMemNativeTransactionalStoreImpl(new InMemAtomicNativeKeyValueStore(16777216)));
+
+ ts.beginTransaction();
+ ts.createTable("testtable",new String[]{"colA","colB","colC","colD","colE","colF","colG","colH","colI","colJ"});
+ ts.commitTransaction();
+
+ ts.beginTransaction();
+ WHTable table = ts.lookupTable("testtable");
+ ts.createIndex("testindex1",table,
+ new String[]{"colB","colA"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.createIndex("testindex2",table,
+ new String[]{"colD","colC"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.createIndex("testindex3",table,
+ new String[]{"colF","colE"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.createIndex("testindex4",table,
+ new String[]{"colH","colG"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.createIndex("testindex5",table,
+ new String[]{"colJ","colI"},
+ new String[]{"org.apache.warthog.common.StringComparatorAscending",
+ "org.apache.warthog.common.LongComparatorAscending"},false);
+ ts.commitTransaction();
+
+ int rowCount = 10000;
+ Random r = new Random();
+ String[] str1Values = new String[rowCount];
+ long[] long1Values = new long[rowCount];
+ String[] str2Values = new String[rowCount];
+ long[] long2Values = new long[rowCount];
+ String[] str3Values = new String[rowCount];
+ long[] long3Values = new long[rowCount];
+ String[] str4Values = new String[rowCount];
+ long[] long4Values = new long[rowCount];
+ String[] str5Values = new String[rowCount];
+ long[] long5Values = new long[rowCount];
+ for (int i = 0 ; i < rowCount ; i++)
+ {
+ str1Values[i] = randomString(r);
+ long1Values[i] = randomLong(r);
+ str2Values[i] = randomString(r);
+ long2Values[i] = randomLong(r);
+ str3Values[i] = randomString(r);
+ long3Values[i] = randomLong(r);
+ str4Values[i] = randomString(r);
+ long4Values[i] = randomLong(r);
+ str5Values[i] = randomString(r);
+ long5Values[i] = randomLong(r);
+ }
+ long startTime = System.currentTimeMillis();
+ for (int i = 0 ; i < rowCount ; i++)
+ {
+ ts.beginTransaction();
+ table = ts.lookupTable("testtable");
+ table.insertRow(new String[]{"colA","colB","colC","colD","colE","colF","colG","colH","colI","colJ"},
+ new WHValue[]{
+ new LongValue(long1Values[i]),new StringValue(str1Values[i]),
+ new LongValue(long2Values[i]),new StringValue(str2Values[i]),
+ new LongValue(long3Values[i]),new StringValue(str3Values[i]),
+ new LongValue(long4Values[i]),new StringValue(str4Values[i]),
+ new LongValue(long5Values[i]),new StringValue(str5Values[i])});
+ ts.commitTransaction();
+ }
+ System.out.println("Create of "+Integer.toString(rowCount)+" rows took "+new Long(System.currentTimeMillis() - startTime).toString()+" ms");
+ }
+
+ // Protected methods
+
+ protected static String randomString(Random r)
+ {
+ return new Long(randomLong(r)).toString();
+ }
+
+ protected static long randomLong(Random r)
+ {
+ return r.nextLong();
+ }
+
}
\ No newline at end of file
Propchange: incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/PerformanceTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: incubator/lcf/branches/CONNECTORS-286/warthog-reimport/src/test/java/org/apache/warthog/tests/PerformanceTest.java
------------------------------------------------------------------------------
svn:keywords = Id