Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditorProvider.java =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditorProvider.java (revision 1701753) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditorProvider.java (working copy) @@ -19,7 +19,9 @@ import javax.annotation.Nonnull; import org.apache.felix.scr.annotations.Component; +import org.apache.felix.scr.annotations.Property; import org.apache.felix.scr.annotations.Service; +import org.apache.jackrabbit.oak.plugins.index.IndexConstants; import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider; import org.apache.jackrabbit.oak.spi.commit.Editor; import org.apache.jackrabbit.oak.plugins.index.IndexUpdateCallback; @@ -34,6 +36,7 @@ * */ @Component +@Property(name = IndexConstants.TYPE_PROPERTY_NAME , value = "property", propertyPrivate = true) @Service(IndexEditorProvider.class) public class PropertyIndexEditorProvider implements IndexEditorProvider { Index: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/package-info.java =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/package-info.java (revision 1701753) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/package-info.java (working copy) @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@Version("1.0") +@Version("1.0.1") @Export(optional = "provide:=true") package org.apache.jackrabbit.oak.plugins.index.property; Index: oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/RepositoryManager.java =================================================================== --- oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/RepositoryManager.java (revision 1701753) +++ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/osgi/RepositoryManager.java (working copy) @@ -29,10 +29,12 @@ import org.apache.felix.scr.annotations.Deactivate; import org.apache.felix.scr.annotations.Property; import org.apache.felix.scr.annotations.Reference; +import org.apache.felix.scr.annotations.ReferenceStrategy; import org.apache.jackrabbit.oak.Oak; import org.apache.jackrabbit.oak.commons.PropertiesUtil; import org.apache.jackrabbit.oak.osgi.OsgiWhiteboard; import org.apache.jackrabbit.oak.plugins.commit.JcrConflictHandler; +import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider; import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent; import org.apache.jackrabbit.oak.plugins.observation.CommitRateLimiter; import org.apache.jackrabbit.oak.spi.lifecycle.RepositoryInitializer; @@ -53,6 +55,10 @@ * to be configured in a custom way */ @Component(policy = ConfigurationPolicy.REQUIRE) +@Reference(referenceInterface = IndexEditorProvider.class, + target = "(type=property)", + strategy = ReferenceStrategy.LOOKUP +) public class RepositoryManager { private static final int DEFAULT_OBSERVATION_QUEUE_LENGTH = 1000; private static final boolean DEFAULT_COMMIT_RATE_LIMIT = false; Index: oak-pojosr/src/test/groovy/org/apache/jackrabbit/oak/run/osgi/AbstractRepositoryFactoryTest.groovy =================================================================== --- oak-pojosr/src/test/groovy/org/apache/jackrabbit/oak/run/osgi/AbstractRepositoryFactoryTest.groovy (revision 1701753) +++ oak-pojosr/src/test/groovy/org/apache/jackrabbit/oak/run/osgi/AbstractRepositoryFactoryTest.groovy (working copy) @@ -26,6 +26,7 @@ import org.junit.Before import org.junit.Rule import org.junit.rules.TemporaryFolder +import org.osgi.framework.BundleContext import org.osgi.framework.ServiceReference import org.osgi.service.cm.ConfigurationAdmin import org.osgi.util.tracker.ServiceTracker @@ -82,7 +83,11 @@ } protected T getServiceWithWait(Class clazz) { - ServiceTracker st = new ServiceTracker(getRegistry().bundleContext, clazz.name, null) + return getServiceWithWait(clazz, getRegistry().bundleContext) + } + + protected static T getServiceWithWait(Class clazz, BundleContext bundleContext) { + ServiceTracker st = new ServiceTracker(bundleContext, clazz.name, null) st.open() T sr = (T) st.waitForService(TimeUnit.SECONDS.toMillis(SVC_WAIT_TIME)) assert sr , "No service found for ${clazz.name}" Index: oak-pojosr/src/test/groovy/org/apache/jackrabbit/oak/run/osgi/PropertyIndexReindexingTest.groovy =================================================================== --- oak-pojosr/src/test/groovy/org/apache/jackrabbit/oak/run/osgi/PropertyIndexReindexingTest.groovy (revision 1701753) +++ oak-pojosr/src/test/groovy/org/apache/jackrabbit/oak/run/osgi/PropertyIndexReindexingTest.groovy (working copy) @@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.run.osgi +import org.apache.felix.connect.launch.PojoServiceRegistry import org.apache.felix.scr.Component import org.apache.felix.scr.ScrService import org.apache.jackrabbit.JcrConstants @@ -29,11 +30,12 @@ import org.junit.Test import javax.jcr.Node +import javax.jcr.Repository import javax.jcr.Session import static org.apache.jackrabbit.oak.run.osgi.OakOSGiRepositoryFactory.REPOSITORY_CONFIG_FILE -@Ignore("OAK-3366") +//@Ignore("OAK-3366") class PropertyIndexReindexingTest extends AbstractRepositoryFactoryTest{ @Before @@ -44,6 +46,7 @@ @Test public void propertyIndexState() throws Exception{ repository = repositoryFactory.getRepository(config) + PojoServiceRegistry registry = getRegistry() //1. Save a node with 'foo' property Session s = createAdminSession() @@ -70,15 +73,17 @@ c[0].disable() - //5. Save another node with 'foo' property - s = createAdminSession() - s.getRootNode().addNode("a2").setProperty("foo", "bar") - s.save(); s.logout(); + assert registry.getServiceReference(Repository.class.name) == null : "Repository should be unregistered " + + "if no property index editor found" - //Either last save should not have succeeded or at least reindex flag is not set to - //true + //5. Re-enable the editor and wait untill repository gets re-registered + c[0].enable() + getServiceWithWait(Repository.class, registry.bundleContext) + + //6. Reindex flag should be stable s = createAdminSession() assert false == s.getProperty("/oak:index/foo/reindex").boolean s.logout() + } }