inthefabric / Fabric

The collective mind awaits your input.
www.inthefabric.com
Other
5 stars 0 forks source link

Reintroduce Byte and Boolean database node properties #4

Closed zachkinstner closed 11 years ago

zachkinstner commented 11 years ago

The recent Titan 0.3.1 fix (from https://github.com/thinkaurelius/titan/issues/222) should now allow typed properties and indexes for Byte, Boolean, and others. Update Fabric to support changes from this fix.

zachkinstner commented 11 years ago

I have forked Titan and I'm working on building 0.3.1 from source to test the fix.

zachkinstner commented 11 years ago

Relevant code changes:

zachkinstner commented 11 years ago

When trying to perform a Maven install on the Titan code, I receive several errors during the testing phase. They all look similar to this:

Running com.thinkaurelius.titan.blueprints.BerkeleyJEBlueprintsTest
Testing testVertexEquality...
Opening graph in: /var/folders/f2/km_d4prn53q7_xdcv1jw7yvr0000gn/T//titan-test/standard
Encountered error in testVertexEquality
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.thinkaurelius.titan.blueprints.TitanBlueprintsTest.doTestSuite(TitanBlueprintsTest.java:117)
    at com.thinkaurelius.titan.blueprints.TitanBlueprintsTest.doTestSuite(TitanBlueprintsTest.java:105)
    at com.thinkaurelius.titan.blueprints.TitanBlueprintsTest.testVertexTestSuite(TitanBlueprintsTest.java:31)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at junit.framework.TestCase.runTest(TestCase.java:168)
    at junit.framework.TestCase.runBare(TestCase.java:134)
    at junit.framework.TestResult$1.protect(TestResult.java:110)
    at junit.framework.TestResult.runProtected(TestResult.java:128)
    at junit.framework.TestResult.run(TestResult.java:113)
    at junit.framework.TestCase.run(TestCase.java:124)
    at junit.framework.TestSuite.runTest(TestSuite.java:232)
    at junit.framework.TestSuite.run(TestSuite.java:227)
    at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
    at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:249)
    at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:142)
    at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:113)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:104)
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Caused by: java.lang.Error: Unresolved compilation problems: 
    ByteSerializer cannot be resolved to a type
    ShortSerializer cannot be resolved to a type
    CharacterSerializer cannot be resolved to a type
    BooleanSerializer cannot be resolved to a type
    The method registerClass(Class<FullFloat>, int) from the type Serializer refers to the missing type FullFloat
    FullFloat cannot be resolved to a type
    The method registerClass(Class<FullDouble>, int) from the type Serializer refers to the missing type FullDouble
    FullDouble cannot be resolved to a type

    at com.thinkaurelius.titan.graphdb.database.serialize.SerializerInitialization.initialize(SerializerInitialization.java:41)
    at com.thinkaurelius.titan.graphdb.database.serialize.kryo.KryoSerializer.<init>(KryoSerializer.java:52)
    at com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.getSerializer(GraphDatabaseConfiguration.java:413)
    at com.thinkaurelius.titan.graphdb.database.StandardTitanGraph.<init>(StandardTitanGraph.java:70)
    at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:40)
    at com.thinkaurelius.titan.blueprints.BerkeleyJEBlueprintsTest.generateGraph(BerkeleyJEBlueprintsTest.java:39)
    at com.thinkaurelius.titan.blueprints.BerkeleyJEBlueprintsTest.generateGraph(BerkeleyJEBlueprintsTest.java:27)
    at com.tinkerpop.blueprints.VertexTestSuite.testVertexEquality(VertexTestSuite.java:27)
    ... 32 more

I'm not sure why "ByteSerializer cannot be resolved to a type". I may have something configured incorrectly in Eclipse. Did I mention I'm new to Java development? ;) In the meantime, perhaps someone (@mbroecheler?) knows how to resolve this.

zachkinstner commented 11 years ago

Skipping the Maven test step allowed the build to finish successfully. When I added the new Titan files to Rexster 2.3.0 and ran it, I got the same error:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    ByteSerializer cannot be resolved to a type
    ShortSerializer cannot be resolved to a type
    CharacterSerializer cannot be resolved to a type
    BooleanSerializer cannot be resolved to a type
    The method registerClass(Class<FullFloat>, int) from the type Serializer refers to the missing type FullFloat
    FullFloat cannot be resolved to a type
    The method registerClass(Class<FullDouble>, int) from the type Serializer refers to the missing type FullDouble
    FullDouble cannot be resolved to a type

    at com.thinkaurelius.titan.graphdb.database.serialize.SerializerInitialization.initialize(SerializerInitialization.java:41)
    at com.thinkaurelius.titan.graphdb.database.serialize.kryo.KryoSerializer.<init>(KryoSerializer.java:52)
    at com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.getSerializer(GraphDatabaseConfiguration.java:413)
    at com.thinkaurelius.titan.graphdb.database.StandardTitanGraph.<init>(StandardTitanGraph.java:70)
    at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:40)
    at com.thinkaurelius.titan.tinkerpop.rexster.TitanGraphConfiguration.configureGraphInstance(TitanGraphConfiguration.java:27)
    at com.tinkerpop.rexster.config.GraphConfigurationContainer.getGraphFromConfiguration(GraphConfigurationContainer.java:128)
    at com.tinkerpop.rexster.config.GraphConfigurationContainer.<init>(GraphConfigurationContainer.java:54)
    at com.tinkerpop.rexster.server.XmlRexsterApplication.<init>(XmlRexsterApplication.java:26)
    at com.tinkerpop.rexster.Application.<init>(Application.java:72)
    at com.tinkerpop.rexster.Application.main(Application.java:156)
zachkinstner commented 11 years ago

I have resolved the "Unresolved compilation problems" issue. In Eclipse, I had imported only the top "titan" Maven project. I (incorrectly) assumed that Eclipse would handle the sub-projects (like "titan-core") automatically. The Maven install was successful (skipping tests) once I imported all the sub-projects individually into Eclipse.

zachkinstner commented 11 years ago

I have created a new "titan-0.3.1" branch for Fabric, due to the issues found in thinkaurelius/titan#235. Fabric integration tests depend on saveGraphSON producing the correct output data -- each integration test reloads the database using that output data.

zachkinstner commented 11 years ago

This task is dependent upon issue https://github.com/tinkerpop/blueprints/issues/395. In the meantime (for "master" branch"), use Integer for Byte, and Object for Boolean.

mbroecheler commented 11 years ago

There is an issue in Titan with byte.class and Byte.class (likewise for some other primitives). This has been fixed and will be released with 0.3.1.

On Wed, Apr 24, 2013 at 12:15 PM, Zach Kinstner notifications@github.comwrote:

This task is dependent upon issue tinkerpop/blueprints#395https://github.com/tinkerpop/blueprints/issues/395. In the meantime (for "master" branch"), use Integer for Byte, and Object for Boolean.

— Reply to this email directly or view it on GitHubhttps://github.com/inthefabric/Fabric/issues/4#issuecomment-16958222 .

Matthias Broecheler http://www.matthiasb.com