@Override public IndexCreator createDeferredSchemaIndex( Label label ) { return delegate.createDeferredSchemaIndex( label ); }
private long dbWithIndexAndSingleIndexedNode() throws Exception { IndexPopulator populator = mock( IndexPopulator.class ); IndexProvider provider = mock( IndexProvider.class ); when( provider.getProviderDescriptor() ).thenReturn( DESCRIPTOR ); when( provider.getPopulator( any( StoreIndexDescriptor.class ), any( IndexSamplingConfig.class ) ) ) .thenReturn( populator ); when( provider.bless( any( IndexDescriptor.class ) ) ).thenCallRealMethod(); BatchInserter inserter = newBatchInserterWithIndexProvider( singleInstanceIndexProviderFactory( KEY, provider ), provider.getProviderDescriptor() ); inserter.createDeferredSchemaIndex( label("Hacker") ).on( "handle" ).create(); long nodeId = inserter.createNode( map( "handle", "Jakewins" ), label( "Hacker" ) ); inserter.shutdown(); return nodeId; }
@Test public void shouldRunIndexPopulationJobAtShutdown() throws Throwable { // GIVEN IndexPopulator populator = mock( IndexPopulator.class ); IndexProvider provider = mock( IndexProvider.class ); IndexAccessor accessor = mock( IndexAccessor.class ); when( provider.getProviderDescriptor() ).thenReturn( DESCRIPTOR ); when( provider.getPopulator( any( StoreIndexDescriptor.class ), any( IndexSamplingConfig.class ) ) ).thenReturn( populator ); when( populator.sampleResult() ).thenReturn( new IndexSample() ); when( provider.getOnlineAccessor( any( StoreIndexDescriptor.class ), any( IndexSamplingConfig.class ) ) ).thenReturn( accessor ); when( provider.bless( any( IndexDescriptor.class ) ) ).thenCallRealMethod(); BatchInserter inserter = newBatchInserterWithIndexProvider( singleInstanceIndexProviderFactory( KEY, provider ), provider.getProviderDescriptor() ); inserter.createDeferredSchemaIndex( label( "Hacker" ) ).on( "handle" ).create(); long nodeId = inserter.createNode( map( "handle", "Jakewins" ), label( "Hacker" ) ); // WHEN inserter.shutdown(); // THEN verify( provider ).init(); verify( provider ).start(); verify( provider ).getPopulator( any( StoreIndexDescriptor.class ), any( IndexSamplingConfig.class ) ); verify( populator ).create(); verify( populator ).add( argThat( matchesCollection( add( nodeId, internalIndex.schema(), Values.of( "Jakewins" ) ) ) ) ); verify( populator ).verifyDeferredConstraints( any( NodePropertyAccessor.class ) ); verify( populator ).close( true ); verify( provider ).stop(); verify( provider ).shutdown(); }
@Test public void shouldNotAllowCreationOfDuplicateIndex() { // GIVEN BatchInserter inserter = globalInserter; String labelName = "Hacker1-" + denseNodeThreshold; // WHEN inserter.createDeferredSchemaIndex( label( labelName ) ).on( "handle" ).create(); try { inserter.createDeferredSchemaIndex( label( labelName ) ).on( "handle" ).create(); fail( "Should have thrown exception." ); } catch ( ConstraintViolationException e ) { // THEN Good } }
@Test public void shouldNotAllowDuplicatedIndexes() { // Given Label label = label( "Person3-" + denseNodeThreshold ); String property = "name"; BatchInserter inserter = globalInserter; // When inserter.createDeferredSchemaIndex( label ).on( property ).create(); try { inserter.createDeferredSchemaIndex( label ).on( property ).create(); fail( "Exception expected" ); } catch ( ConstraintViolationException e ) { // Then assertEquals( "Index for given {label;property} already exists", e.getMessage() ); } }
@Test public void shouldIndexNodesWithMultipleLabels() throws Exception { // Given File path = dbRule.databaseLayout().databaseDirectory(); BatchInserter inserter = BatchInserters.inserter( path, fileSystemRule.get() ); inserter.createNode( map( "name", "Bob" ), label( "User" ), label( "Admin" ) ); inserter.createDeferredSchemaIndex( label( "User" ) ).on( "name" ).create(); inserter.createDeferredSchemaIndex( label( "Admin" ) ).on( "name" ).create(); // When inserter.shutdown(); // Then GraphDatabaseService db = dbRule.getGraphDatabaseAPI(); try ( Transaction tx = db.beginTx() ) { assertThat( count( db.findNodes( label( "User" ), "name", "Bob" ) ), equalTo(1L) ); assertThat( count( db.findNodes( label( "Admin" ), "name", "Bob" ) ), equalTo(1L) ); } finally { db.shutdown(); } }
@Test public void shouldNotIndexNodesWithWrongLabel() throws Exception { // Given File file = new File( dbRule.getDatabaseDirAbsolutePath() ); BatchInserter inserter = BatchInserters.inserter( file, fileSystemRule.get() ); inserter.createNode( map("name", "Bob"), label( "User" ), label("Admin")); inserter.createDeferredSchemaIndex( label( "Banana" ) ).on( "name" ).create(); // When inserter.shutdown(); // Then GraphDatabaseService db = dbRule.getGraphDatabaseAPI(); try ( Transaction tx = db.beginTx() ) { assertThat( count( db.findNodes( label( "Banana" ), "name", "Bob" ) ), equalTo( 0L ) ); } finally { db.shutdown(); } }
@Test public void shouldNotAllowCreationOfDeferredSchemaIndexAfterConstraintOnSameKeys() { // GIVEN BatchInserter inserter = globalInserter; String labelName = "Hacker4-" + denseNodeThreshold; // WHEN inserter.createDeferredConstraint( label( labelName ) ).assertPropertyIsUnique( "handle" ).create(); try { inserter.createDeferredSchemaIndex( label( labelName ) ).on( "handle" ).create(); fail( "Should have thrown exception." ); } catch ( ConstraintViolationException e ) { // THEN Good } }
@Test public void shouldNotAllowCreationOfDeferredSchemaConstraintAfterIndexOnSameKeys() { // GIVEN BatchInserter inserter = globalInserter; String labelName = "Hacker3-" + denseNodeThreshold; // WHEN inserter.createDeferredSchemaIndex( label( labelName ) ).on( "handle" ).create(); try { inserter.createDeferredConstraint( label( labelName ) ).assertPropertyIsUnique( "handle" ).create(); fail( "Should have thrown exception." ); } catch ( ConstraintViolationException e ) { // THEN Good } }
@Test public void shouldNotAllowCreationOfUniquenessConstraintAndIndexOnSameLabelAndProperty() { // Given Label label = label( "Person1-" + denseNodeThreshold ); String property = "name"; BatchInserter inserter = globalInserter; // When inserter.createDeferredConstraint( label ).assertPropertyIsUnique( property ).create(); try { inserter.createDeferredSchemaIndex( label ).on( property ).create(); fail( "Exception expected" ); } catch ( ConstraintViolationException e ) { // Then assertEquals( "Index for given {label;property} already exists", e.getMessage() ); } }
@Test public void shouldCreateDeferredSchemaIndexesInEmptyDatabase() throws Exception { // GIVEN BatchInserter inserter = newBatchInserter(); // WHEN IndexDefinition definition = inserter.createDeferredSchemaIndex( label( "Hacker" ) ).on( "handle" ).create(); // THEN assertEquals( "Hacker", single( definition.getLabels() ).name() ); assertEquals( asCollection( iterator( "handle" ) ), Iterables.asCollection( definition.getPropertyKeys() ) ); inserter.shutdown(); }
@Test public void batchInserterShouldUseConfiguredIndexProvider() throws Exception { Config config = Config.defaults( stringMap( default_schema_provider.name(), schemaIndex.providerName() ) ); BatchInserter inserter = newBatchInserter( config ); inserter.createDeferredSchemaIndex( TestLabels.LABEL_ONE ).on( "key" ).create(); inserter.shutdown(); GraphDatabaseService db = graphDatabaseService( config ); awaitIndexesOnline( db ); try ( Transaction tx = db.beginTx() ) { DependencyResolver dependencyResolver = ((GraphDatabaseAPI) db).getDependencyResolver(); ThreadToStatementContextBridge threadToStatementContextBridge = dependencyResolver.resolveDependency( ThreadToStatementContextBridge.class ); KernelTransaction kernelTransaction = threadToStatementContextBridge.getKernelTransactionBoundToThisThread( true ); TokenRead tokenRead = kernelTransaction.tokenRead(); SchemaRead schemaRead = kernelTransaction.schemaRead(); int labelId = tokenRead.nodeLabel( TestLabels.LABEL_ONE.name() ); int propertyId = tokenRead.propertyKey( "key" ); IndexReference index = schemaRead.index( labelId, propertyId ); assertTrue( unexpectedIndexProviderMessage( index ), schemaIndex.providerName().contains( index.providerKey() ) ); assertTrue( unexpectedIndexProviderMessage( index ), schemaIndex.providerName().contains( index.providerVersion() ) ); tx.success(); } finally { db.shutdown(); } }
@Override public IndexCreator createDeferredSchemaIndex( Label label ) { return delegate.createDeferredSchemaIndex( label ); }
private void createDeferredSchema() { inserter.createDeferredSchemaIndex(NODE_LABEL).on(NODE_ID).create(); inserter.createDeferredSchemaIndex(NODE_LABEL).on(COMMUNITY).create(); inserter.createDeferredSchemaIndex(NODE_LABEL).on(NODE_COMMUNITY).create(); }
public void finish() { inserter.createDeferredSchemaIndex(WikiLabel.Page).on("title").create(); inserter.shutdown(); }