From: Bryan T. <tho...@us...> - 2007-12-04 20:30:36
|
Update of /cvsroot/cweb/generic-native-test/src/java/org/CognitiveWeb/generic/core/ndx In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv26687/src/java/org/CognitiveWeb/generic/core/ndx Modified Files: TestAll.java AbstractIndexTest.java TestLongTypeIndex.java Log Message: working through changes to variable length text fields embedded within multi-field keys to support GOM and the sparse row store. Index: AbstractIndexTest.java =================================================================== RCS file: /cvsroot/cweb/generic-native-test/src/java/org/CognitiveWeb/generic/core/ndx/AbstractIndexTest.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** AbstractIndexTest.java 1 Dec 2007 10:57:59 -0000 1.7 --- AbstractIndexTest.java 4 Dec 2007 20:30:32 -0000 1.8 *************** *** 77,80 **** --- 77,84 ---- * @version $Id$ * + * FIXME {@link TestUntypedHomogenousIntegerIndex} and friends should select their + * keys randomly from the appropriate value type rather than choosing the value + * type randomly. + * * @todo Add tests for more of the methods on the ILinkSetIndex API. Are there * features being tested by <code>generic-test</code> that are not being *************** *** 939,943 **** * reopen. */ ! Op gen = new Op(.2f, .05f, .2f, .005f, .2f, .005f, .001f, .001f, .005f, .0005f); return gen; --- 943,947 ---- * reopen. */ ! Op gen = new Op(.2f, .05f, .2f, .005f, .2f, .005f, .001f, .001f, .0001f, .0005f); return gen; *************** *** 1255,1262 **** * @todo indexEverything, duplicateKeys, sortNullsToEnd */ ! ILinkSetIndexClass indexClass = assocClass.addIndexClass(valueClass); Generic g = new Generic(om); LinkSet linkSet = g.getLinkSet(assocClass); LinkSetIndex ndx = (LinkSetIndex) linkSet.getIndex(valueClass); --- 1259,1271 ---- * @todo indexEverything, duplicateKeys, sortNullsToEnd */ ! // ILinkSetIndexClass indexClass = assocClass.addIndexClass(valueClass); + // object collects the link set. Generic g = new Generic(om); + + // the link set. LinkSet linkSet = g.getLinkSet(assocClass); + + // the link set index. LinkSetIndex ndx = (LinkSetIndex) linkSet.getIndex(valueClass); *************** *** 1293,1303 **** // fetch the object. Generic t = (Generic) om.fetch(oid.longValue()); - // delete the object. - t.remove(); - oids.remove(oid); if (logOps) { System.err.println("log: op#" + (optotal + 1) + "=" + gen.getName(op) + ", oid=" + oid); } break; --- 1302,1312 ---- // fetch the object. Generic t = (Generic) om.fetch(oid.longValue()); if (logOps) { System.err.println("log: op#" + (optotal + 1) + "=" + gen.getName(op) + ", oid=" + oid); } + // delete the object. + t.remove(); + oids.remove(oid); break; *************** *** 1314,1325 **** // fetch the object. Generic t = (Generic) om.fetch(oid.longValue()); - // add to the link set. - t.set(assocClass, g); if (logOps) { System.err.println("log: op#" + (optotal + 1) + "=" + gen.getName(op) + ", oid=" + oid); } break; } case Op.unlink: { /* --- 1323,1335 ---- // fetch the object. Generic t = (Generic) om.fetch(oid.longValue()); if (logOps) { System.err.println("log: op#" + (optotal + 1) + "=" + gen.getName(op) + ", oid=" + oid); } + // add to the link set. + t.set(assocClass, g); break; } + case Op.unlink: { /* *************** *** 1332,1341 **** // fetch the object. Generic t = (Generic) om.fetch(oid.longValue()); - // remove from the link set. - t.set(assocClass, null); if (logOps) { System.err.println("log: op#" + (optotal + 1) + "=" + gen.getName(op) + ", oid=" + oid); } break; } --- 1342,1351 ---- // fetch the object. Generic t = (Generic) om.fetch(oid.longValue()); if (logOps) { System.err.println("log: op#" + (optotal + 1) + "=" + gen.getName(op) + ", oid=" + oid); } + // remove from the link set. + t.set(assocClass, null); break; } *************** *** 1347,1357 **** Generic t = (Generic) om.fetch(oid.longValue()); // set the property value ! t.set(valueClass, keyGen.nextKey() ); if (logOps) { System.err.println("log: op#" + (optotal + 1) + "=" ! + gen.getName(op) + ", oid=" + oid); } break; } case Op.clear: { // randomly choose an existing object. --- 1357,1370 ---- Generic t = (Generic) om.fetch(oid.longValue()); // set the property value ! final Object newValue = keyGen.nextKey(); if (logOps) { System.err.println("log: op#" + (optotal + 1) + "=" ! + gen.getName(op) + ", oid=" + oid + ", newValue=[" ! + newValue + "]"); } + final Object oldValue = t.set(valueClass, newValue ); break; } + case Op.clear: { // randomly choose an existing object. *************** *** 1359,1368 **** // fetch the object. Generic t = (Generic) om.fetch(oid.longValue()); - // clear the property value - t.set(valueClass, null); if (logOps) { System.err.println("log: op#" + (optotal + 1) + "=" + gen.getName(op) + ", oid=" + oid); } break; } --- 1372,1381 ---- // fetch the object. Generic t = (Generic) om.fetch(oid.longValue()); if (logOps) { System.err.println("log: op#" + (optotal + 1) + "=" + gen.getName(op) + ", oid=" + oid); } + // clear the property value + final Object oldValue = t.set(valueClass, null); break; } *************** *** 1371,1375 **** if (logOps||true) { System.err.println("log: op#" + (optotal + 1) + "=" ! + gen.getName(op)); } ndx.rebuildIndex(); --- 1384,1388 ---- if (logOps||true) { System.err.println("log: op#" + (optotal + 1) + "=" ! + gen.getName(op)+", nentries="+ndx.size()); } ndx.rebuildIndex(); *************** *** 1378,1381 **** --- 1391,1398 ---- case Op.verify: { + if (logOps) { + System.err.println("log: op#" + (optotal + 1) + "=" + + gen.getName(op)); + } verify(linkSet, ndx); break; *************** *** 1794,1801 **** */ public void test_stress() { doStressTest(// ! 10000,// maxCreated ! 100000,// maxOps getOpGenerator(),// true//logOps --- 1811,1823 ---- */ public void test_stress() { + + final int maxCreated = 10000; + + final int maxOps = 10000; + // final int maxOps = 100000; doStressTest(// ! maxCreated, ! maxOps, getOpGenerator(),// true//logOps Index: TestAll.java =================================================================== RCS file: /cvsroot/cweb/generic-native-test/src/java/org/CognitiveWeb/generic/core/ndx/TestAll.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** TestAll.java 14 Jun 2006 15:27:53 -0000 1.4 --- TestAll.java 4 Dec 2007 20:30:32 -0000 1.5 *************** *** 48,51 **** --- 48,53 ---- package org.CognitiveWeb.generic.core.ndx; + import org.CognitiveWeb.generic.core.ndx.AbstractIndexTest.TestOp; + import junit.framework.Test; import junit.framework.TestCase; *************** *** 83,86 **** --- 85,92 ---- TestSuite suite = new TestSuite(TestAll.class.getName()); + // test suite for a test helper class. + suite.addTestSuite(TestOp.class); + + // strongly typed link set index test suites. suite.addTestSuite(TestByteTypeIndex.class); suite.addTestSuite(TestCharacterTypeIndex.class); *************** *** 92,99 **** suite.addTestSuite(TestStringTypeIndex.class); suite.addTestSuite(TestUntypedHomogenousStringIndex.class); suite.addTestSuite(TestUntypedHomogenousIntegerIndex.class); suite.addTestSuite(TestUntypedHomogenousFloatIndex.class); ! suite.addTestSuite(TestUntypedHeterogenousIndex.class); --- 98,107 ---- suite.addTestSuite(TestStringTypeIndex.class); + // untyped link set index test suites where all values are a specific type. suite.addTestSuite(TestUntypedHomogenousStringIndex.class); suite.addTestSuite(TestUntypedHomogenousIntegerIndex.class); suite.addTestSuite(TestUntypedHomogenousFloatIndex.class); ! ! // untyped link set index test suite where value types are random. suite.addTestSuite(TestUntypedHeterogenousIndex.class); Index: TestLongTypeIndex.java =================================================================== RCS file: /cvsroot/cweb/generic-native-test/src/java/org/CognitiveWeb/generic/core/ndx/TestLongTypeIndex.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** TestLongTypeIndex.java 10 Jun 2006 18:15:53 -0000 1.3 --- TestLongTypeIndex.java 4 Dec 2007 20:30:32 -0000 1.4 *************** *** 48,52 **** --- 48,57 ---- package org.CognitiveWeb.generic.core.ndx; + import org.CognitiveWeb.generic.core.AbstractBTree; + import org.CognitiveWeb.generic.core.Generic; + import org.CognitiveWeb.generic.core.LinkSet; import org.CognitiveWeb.generic.core.LinkSetIndex; + import org.CognitiveWeb.generic.core.PropertyClass; + import org.CognitiveWeb.generic.core.om.ObjectManager; /** *************** *** 72,74 **** --- 77,235 ---- } + /** + * Test for a bug appearing during the stress tests. The bug has been + * resolved. The source of the problem was that the bigdata btree object + * needed to be explicitly flushed to the backing store and the native long + * identifer for the btree updated to the new btree metadata record. This + * was done by adding {@link AbstractBTree#saveBTree()} + * <p> + * The log of relevant events was: + * + * <pre> + * log: op#833=create, oid=237 + * log: op#911=set, oid=237, newValue=[-1239459367612892870] + * log: op#922=set, oid=237, newValue=[5701148150371898969] + * log: op#1200=set, oid=237, newValue=[7448135811865118996] + * log: op#2483=set, oid=237, newValue=[5130596228767878500] + * log: op#2498=link, oid=237 + * log: op#2726=set, oid=237, newValue=[1751842764225356122] + * + * log: op#1939=verify + * log: op#2553=rebuild + * log: op#2703=reopen + * + * lots of commits: + * ... + * log: op#2281=commit + * log: op#2339=commit + * log: op#2479=commit + * log: op#2578=commit + * </pre> + * + * and resulted in an {@link IllegalStateException} on op#2726. + * <p> + * This test explores the same sequence of operations on a generic object in + * an attempt to an exception similar to + * + * <pre> + * java.lang.IllegalStateException: key=[-57, 51, -118, 22, 69, -85, 13, 100, -128, 0, 0, 0, 0, 0, 0, -19] + * at com.bigdata.gom.MyBTree.remove(MyBTree.java:229) + * at org.CognitiveWeb.generic.core.LinkSetIndex.removeInternalKey(LinkSetIndex.java:2339) + * at org.CognitiveWeb.generic.core.LinkSetIndex.drop(LinkSetIndex.java:2469) + * at org.CognitiveWeb.generic.core.LinkSetIndex.propertyChange(LinkSetIndex.java:1883) + * at org.CognitiveWeb.generic.core.GenericData.firePropertyChangeEvent(GenericData.java:1764) + * at org.CognitiveWeb.generic.core.Generic.firePropertyChangeEvent(Generic.java:2053) + * at org.CognitiveWeb.generic.core.GenericData.set(GenericData.java:966) + * at org.CognitiveWeb.generic.core.Generic.set(Generic.java:772) + * at org.CognitiveWeb.generic.core.ndx.AbstractIndexTest.doStressTest(AbstractIndexTest.java:1356) + * at org.CognitiveWeb.generic.core.ndx.AbstractIndexTest.test_stress(AbstractIndexTest.java:1801) + * at jrockit.reflect.VirtualNativeMethodInvoker.invoke(Ljava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;(Unknown Source) + * at java.lang.reflect.Method.invoke(Ljava.lang.Object;[Ljava.lang.Object;I)Ljava.lang.Object;(Unknown Source) + * at junit.framework.TestCase.runTest(TestCase.java:154) + * at junit.framework.TestCase.runBare(TestCase.java:127) + * at junit.framework.TestResult$1.protect(TestResult.java:106) + * at junit.framework.TestResult.runProtected(TestResult.java:124) + * at junit.framework.TestResult.run(TestResult.java:109) + * at junit.framework.TestCase.run(TestCase.java:118) + * at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128) + * at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) + * at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460) + * at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673) + * at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386) + * at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) + * </pre> + */ + public void test_bug01() { + + ObjectManager om = getNativeObjectManager(); + + /* + * Enter a nested native transaction. + */ + int counter = om.beginNativeTransaction(); + + PropertyClass assocClass = (PropertyClass) om + .getPropertyClass(getUniquePropertyName("assoc")); + + PropertyClass valueClass = (PropertyClass) om + .getPropertyClass(getUniquePropertyName("value")); + + /* + * Set the property type constraint (if any) specified by the test + * class. When set to a non-null value this makes the index strongly + * typed. + */ + + final Class cls = getType(); + + valueClass.setType( cls ); + + // object collects the link set. + Generic g = new Generic(om); + + // the link set. + LinkSet linkSet = g.getLinkSet(assocClass); + + // the link set index. + LinkSetIndex ndx = (LinkSetIndex) linkSet.getIndex(valueClass); + + /* + * + * log: op#833=create, oid=237 + * log: op#911=set, oid=237, newValue=[-1239459367612892870] + * log: op#922=set, oid=237, newValue=[5701148150371898969] + * log: op#1200=set, oid=237, newValue=[7448135811865118996] + * log: op#1939=verify + * log: op#2483=set, oid=237, newValue=[5130596228767878500] + * log: op#2498=link, oid=237 + * log: op#2553=rebuild + * log: op#2703=reopen + * log: op#2726=set, oid=237, newValue=[1751842764225356122] + */ + { + + // create + Generic t = new Generic(om); + // set + t.set(valueClass,Long.valueOf(-1239459367612892870L)); + // set + t.set(valueClass,Long.valueOf(5701148150371898969L)); + // set + t.set(valueClass,Long.valueOf(7448135811865118996L)); + // set + t.set(valueClass,Long.valueOf(5130596228767878500L)); + // link + t.set(assocClass,g); + // rebuild + ((LinkSetIndex)g.getLinkSet(assocClass).getExistingIndex(valueClass)).rebuildIndex(); + // reopen + { + /* + * Incantation to reopen the store and fetch the various + * objects. + */ + counter = om.commitNativeTransaction( counter ); + assertEquals("counter",0,counter); + om = reopenNativeStore(); + counter = om.beginNativeTransaction(); + assertEquals("counter",1,counter); + g = (Generic) om.fetch(g.getOID()); + assocClass = (PropertyClass) om.fetch(assocClass.getOID()); + valueClass = (PropertyClass) om.fetch(valueClass.getOID()); + linkSet = g.getLinkSet(assocClass); + ndx = (LinkSetIndex) linkSet.getIndex(valueClass); + + t = (Generic) om.fetch(t.getOID()); + } + /* + * set - caused exception since (a) the BTree has not been flushed + * to the store; and (b) the address of the BTree metadata record + * had not been updated on the GOM AbstractBTree implementation. + */ + t.set(valueClass,Long.valueOf(1751842764225356122L)); + + } + + } + } |