Noted, thanks! Robert
On Thu, 2016-09-01 at 15:55 +0200, Michael Dürig wrote: > See https://issues.apache.org/jira/browse/OAK-4741 > > On 1.9.16 3:44 , Michael Dürig wrote: > > > > > > The reason for this is that MemoryNodeStore requires as > > MemoryNodeState > > passed to its constructor. Apparently this is not the case here: > > > > > > > > NodeState base = > > > ModifiedNodeState.squeeze(builder.getNodeState()); > > > NodeStore store = new MemoryNodeStore(base); > > > NodeTypeRegistry.registerBuiltIn(RootFactory.createSystem > > > Root( > > > store, new EditorHook(new > > > CompositeEditorProvider( > > > new NamespaceEditorProvider(), > > > new TypeEditorProvider())), null, null, null, > > > null)); > > > > This is not documented nor does that constructor have the right > > signature. This is a bug and I'll file an issue for it once I come > > around to it. > > > > Michael > > > > On 1.9.16 2:37 , Robert Munteanu wrote: > > > > > > On Thu, 2016-09-01 at 12:19 +0200, Michael Dürig wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > I have a failing test in my fork at > > > > > > > > > > https://github.com/rombert/jackrabbit-oak/ > > > > > > > > > > If I run ReadWriteNamespaceRegistryTest from Eclipse it picks > > > > > up > > > > > all > > > > > fixtures - including the Multiplexing one I added - and fails > > > > > with > > > > > that > > > > > one. > > > > > > > > > > Getting this isolated would be hard since it requires a full > > > > > NodeStore > > > > > implementation whose NodeState and NodeBuilder > > > > > implementations > > > > > don't > > > > > extend the memory-based ones. > > > > > > > > Can you share the stack trace of the failing test? Or is this > > > > not > > > > helpful as there are too many modifications of Oak's core parts > > > > in > > > > your > > > > fork? Otherwise please share and indicate which revision of Oak > > > > this > > > > fork is based on. > > > > > > I've pasted the stack trace at the end. > > > > > > As for my changes I have not touched the core parts of oak, the > > > 'java' > > > part is contained in plugins/multiplex and spi/mount . I've > > > recently > > > merged trunk up to r1758729. > > > > > > I am wondering whether the InitialContent wraps the NodeState in > > > a new > > > NodeStore only because it does not have access to the originating > > > NodeStore. That would give an indication of a possible solution. > > > > > > Robert > > > > > > ReadWriteNamespaceRegistryTest.testMappings > > > org.apache.jackrabbit.oak.plugins.name.ReadWriteNamespaceRegistry > > > Test > > > [MultiplexingSegmentFixture with a mount under /tmp] > > > testMappings[MultiplexingSegmentFixture with a mount under > > > /tmp](org.apache.jackrabbit.oak.plugins.name.ReadWriteNamespaceRe > > > gistry > > > Test) > > > java.lang.IllegalArgumentException > > > at > > > com.google.common.base.Preconditions.checkArgument(Preconditions. > > > java:7 > > > 7) > > > at > > > org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore.merge(Me > > > moryNo > > > deStore.java:126) > > > at > > > org.apache.jackrabbit.oak.core.MutableRoot.commit(MutableRoot.jav > > > a:249) > > > at > > > org.apache.jackrabbit.oak.core.SystemRoot.commit(SystemRoot.java: > > > 35) > > > at > > > org.apache.jackrabbit.oak.core.MutableRoot.commit(MutableRoot.jav > > > a:260) > > > at > > > org.apache.jackrabbit.oak.core.SystemRoot.commit(SystemRoot.java: > > > 35) > > > at > > > org.apache.jackrabbit.oak.plugins.name.ReadWriteNamespaceRegistry > > > .regis > > > terNamespace(ReadWriteNamespaceRegistry.java:94) > > > at > > > org.apache.jackrabbit.commons.cnd.TemplateBuilderFactory.setNames > > > pace(T > > > emplateBuilderFactory.java:92) > > > at > > > org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader.doName > > > Space( > > > CompactNodeTypeDefReader.java:246) > > > at > > > org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader.parse( > > > Compac > > > tNodeTypeDefReader.java:200) > > > at > > > org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader.<init> > > > (Compa > > > ctNodeTypeDefReader.java:163) > > > at > > > org.apache.jackrabbit.commons.cnd.CompactNodeTypeDefReader.<init> > > > (Compa > > > ctNodeTypeDefReader.java:139) > > > at > > > org.apache.jackrabbit.commons.cnd.CndImporter.registerNodeTypes(C > > > ndImpo > > > rter.java:147) > > > at > > > org.apache.jackrabbit.oak.plugins.nodetype.write.NodeTypeRegistry > > > .regis > > > terNodeTypes(NodeTypeRegistry.java:109) > > > at > > > org.apache.jackrabbit.oak.plugins.nodetype.write.NodeTypeRegistry > > > .regis > > > ter(NodeTypeRegistry.java:104) > > > at > > > org.apache.jackrabbit.oak.plugins.nodetype.write.NodeTypeRegistry > > > .regis > > > terBuiltIn(NodeTypeRegistry.java:86) > > > at > > > org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.i > > > nitial > > > ize(InitialContent.java:120) > > > at > > > org.apache.jackrabbit.oak.spi.lifecycle.CompositeInitializer.init > > > ialize > > > (CompositeInitializer.java:48) > > > at > > > org.apache.jackrabbit.oak.spi.lifecycle.OakInitializer.initialize > > > (OakIn > > > itializer.java:42) > > > at > > > org.apache.jackrabbit.oak.Oak.createNewContentRepository(Oak.java > > > :635) > > > at > > > org.apache.jackrabbit.oak.Oak.createContentRepository(Oak.java:62 > > > 3) > > > at > > > org.apache.jackrabbit.oak.Oak.createContentSession(Oak.java:737) > > > at > > > org.apache.jackrabbit.oak.plugins.name.ReadWriteNamespaceRegistry > > > Test.c > > > reateContentSession(ReadWriteNamespaceRegistryTest.java:42) > > > at > > > org.apache.jackrabbit.oak.plugins.name.ReadWriteNamespaceRegistry > > > Test.t > > > estMappings(ReadWriteNamespaceRegistryTest.java:47) > > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > > > Method) > > > at > > > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorI > > > mpl.ja > > > va:57) > > > at > > > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodA > > > ccesso > > > rImpl.java:43) > > > at java.lang.reflect.Method.invoke(Method.java:606) > > > at > > > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(Frame > > > workMe > > > thod.java:50) > > > at > > > org.junit.internal.runners.model.ReflectiveCallable.run(Reflectiv > > > eCalla > > > ble.java:12) > > > at > > > org.junit.runners.model.FrameworkMethod.invokeExplosively(Framewo > > > rkMeth > > > od.java:47) > > > at > > > org.junit.internal.runners.statements.InvokeMethod.evaluate(Invok > > > eMetho > > > d.java:17) > > > at > > > org.junit.internal.runners.statements.RunAfters.evaluate(RunAfter > > > s.java > > > :27) > > > at > > > org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) > > > at > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4Clas > > > sRunne > > > r.java:78) > > > at > > > org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4Clas > > > sRunne > > > r.java:57) > > > at > > > org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) > > > at > > > org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) > > > at > > > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) > > > at > > > org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) > > > at > > > org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) > > > at org.junit.runners.ParentRunner.run(ParentRunner.java:363) > > > at org.junit.runners.Suite.runChild(Suite.java:128) > > > at org.junit.runners.Suite.runChild(Suite.java:27) > > > at > > > org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) > > > at > > > org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) > > > at > > > org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) > > > at > > > org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) > > > at > > > org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) > > > at org.junit.runners.ParentRunner.run(ParentRunner.java:363) > > > at > > > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JU > > > nit4Te > > > stReference.java:86) > > > at > > > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecu > > > tion.j > > > ava:38) > > > at > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(R > > > emoteT > > > estRunner.java:459) > > > at > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(R > > > emoteT > > > estRunner.java:678) > > > at > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(Remote > > > TestRu > > > nner.java:382) > > > at > > > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(Remot > > > eTestR > > > unner.java:192) > > > > > > > > > > > > > > > Michaelo > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > Robert > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Michael > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Robert > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Michael > > > > > > > > > > > > > > > > > > > > > > > > On 1.9.16 9:36 , Robert Munteanu wrote: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > I'm working on implementing a custom node store which > > > > > > > > > multiplexes > > > > > > > > > other > > > > > > > > > node stores. > > > > > > > > > > > > > > > > > > Adding it as a fixture in oak-it results in a test > > > > > > > > > failure > > > > > > > > > in > > > > > > > > > > > > > > > > > > ReadWriteNamespaceRegistryTest.testMappings [1] > > > > > > > > > > > > > > > > > > The reason is > > > > > > > > > that > > > > > > > > > org.apache.jackrabbit.oak.plugins.nodetype.write.Init > > > > > > > > > ialCon > > > > > > > > > tent > > > > > > > > > class wraps the passed nodeStore into a > > > > > > > > > MemoryNodeStore, > > > > > > > > > and > > > > > > > > > that > > > > > > > > > memory node store later on receives a builder which > > > > > > > > > is not > > > > > > > > > MemoryNodeBuilder [2] → IllegalArgumentException. > > > > > > > > > > > > > > > > > > I'm not familiar enough with that class to propose a > > > > > > > > > fix, > > > > > > > > > but > > > > > > > > > effectively it forces all builders to be > > > > > > > > > MemoryNodeBuilders, > > > > > > > > > which > > > > > > > > > is > > > > > > > > > too restrictive IMO. > > > > > > > > > > > > > > > > > > Is this a bug to file or something that I need to > > > > > > > > > live with > > > > > > > > > when > > > > > > > > > implementing a new NodeStore? > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > > > > > > > > Robert > > > > > > > > > > > > > > > > > > > > > > > > > > > [1]: https://github.com/apache/jackrabbit-oak/blob/64 > > > > > > > > > f48874 > > > > > > > > > ac4a > > > > > > > > > ab6e > > > > > > > > > 0ffb > > > > > > > > > 085e07642ffa44d8c7ca/oak- > > > > > > > > > it/src/test/java/org/apache/jackrabbit/oak/plugins/na > > > > > > > > > me/Rea > > > > > > > > > dWri > > > > > > > > > teNa > > > > > > > > > mesp > > > > > > > > > aceRegistryTest.java#L46 > > > > > > > > > [2]: https://github.com/apache/jackrabbit-oak/blob/64 > > > > > > > > > f48874 > > > > > > > > > ac4a > > > > > > > > > ab6e > > > > > > > > > 0ffb > > > > > > > > > 085e07642ffa44d8c7ca/oak- > > > > > > > > > core/src/main/java/org/apache/jackrabbit/oak/plugins/ > > > > > > > > > nodety > > > > > > > > > pe/w > > > > > > > > > rite > > > > > > > > > /Ini > > > > > > > > > tialContent.java#L119 > > > > > > > > > > > > > > > > > > > > > > > >
