@Override public int labelCount() { return tokenHolders.labelTokens().size(); }
@Override public String labelGetName( int labelId ) { return tokenById( tokenHolders.labelTokens(), labelId, "label" ); }
@Override public void addLabelToken( NamedToken label ) { tokenHolders.labelTokens().addToken( label ); }
private int getOrCreateLabelId( String name ) { return tokenHolders.labelTokens().getOrCreateId( name ); }
@Override public Iterator<NamedToken> labelsGetAllTokens() { ktx.assertOpen(); return tokenHolders.labelTokens().getAllTokens().iterator(); }
@Override public int nodeLabel( String name ) { ktx.assertOpen(); return tokenHolders.labelTokens().getIdByName( name ); }
@Override public boolean nodeHasLabel( long node, Label label ) { int labelId = tokenHolders.labelTokens().getIdByName( label.name() ); return labelId != NO_TOKEN && nodeHasLabel( node, labelId ); }
@Override public Label apply( long from ) { try { return label( tokenHolders.labelTokens().getTokenById( safeCastLongToInt( from ) ).name() ); } catch ( TokenNotFoundException e ) { throw new RuntimeException( e ); } } };
@Override public int labelGetOrCreateForName( String labelName ) throws IllegalTokenNameException, TooManyLabelsException { try { return getOrCreateForName( tokenHolders.labelTokens(), labelName ); } catch ( TransactionFailureException e ) { // Temporary workaround for the property store based label implementation. // Actual implementation should not depend on internal kernel exception messages like this. if ( e.getCause() instanceof UnderlyingStorageException && e.getCause().getMessage().equals( "Id capacity exceeded" ) ) { throw new TooManyLabelsException( e ); } throw e; } }
@Override public void labelGetOrCreateForNames( String[] labelNames, int[] labelIds ) throws IllegalTokenNameException, TooManyLabelsException { try { getOrCreateForNames( tokenHolders.labelTokens(), labelNames, labelIds ); } catch ( TransactionFailureException e ) { // Temporary workaround for the property store based label implementation. // Actual implementation should not depend on internal kernel exception messages like this. if ( e.getCause() instanceof UnderlyingStorageException && e.getCause().getMessage().equals( "Id capacity exceeded" ) ) { throw new TooManyLabelsException( e ); } throw e; } }
@Override public String nodeLabelName( int labelId ) throws LabelNotFoundKernelException { ktx.assertOpen(); try { return tokenHolders.labelTokens().getTokenById( labelId ).name(); } catch ( TokenNotFoundException e ) { throw new LabelNotFoundKernelException( labelId, e ); } }
if ( type == EntityType.NODE ) tokenHolders.labelTokens().getOrCreateIds( entityTokens, entityTokenIds );
private int createNewLabelId( String stringKey ) { int keyId = (int) labelTokenStore.nextId(); LabelTokenRecord record = new LabelTokenRecord( keyId ); record.setInUse( true ); record.setCreated(); Collection<DynamicRecord> keyRecords = labelTokenStore.allocateNameRecords( encodeString( stringKey ) ); record.setNameId( (int) Iterables.first( keyRecords ).getId() ); record.addNameRecords( keyRecords ); labelTokenStore.updateRecord( record ); tokenHolders.labelTokens().addToken( new NamedToken( stringKey, keyId ) ); return keyId; }
@Override public void start() throws Throwable { neoStores.makeStoreOk(); tokenHolders.propertyKeyTokens().setInitialTokens( neoStores.getPropertyKeyTokenStore().getTokens() ); tokenHolders.relationshipTypeTokens().setInitialTokens( neoStores.getRelationshipTypeTokenStore().getTokens() ); tokenHolders.labelTokens().setInitialTokens( neoStores.getLabelTokenStore().getTokens() ); neoStores.startCountStore(); // TODO: move this to counts store lifecycle loadSchemaCache(); indexingService.start(); labelScanStore.start(); idController.start(); }
tokenHolders.labelTokens().setInitialTokens( neoStores.getLabelTokenStore().getTokens() ); tokenHolders.relationshipTypeTokens().setInitialTokens( neoStores.getRelationshipTypeTokenStore().getTokens() );
@Test public void shouldRecoverCounts() throws Exception { // GIVEN Node node = createNode( label ); checkPoint(); deleteNode( node ); // WHEN crashAndRestart(); // THEN // -- really the problem was that recovery threw exception, so mostly assert that. try ( org.neo4j.internal.kernel.api.Transaction tx = db.getDependencyResolver().resolveDependency( Kernel.class ).beginTransaction( explicit, LoginContext.AUTH_DISABLED ) ) { assertEquals( 0, tx.dataRead().countsForNode( -1 ) ); final TokenHolder holder = db.getDependencyResolver().resolveDependency( TokenHolders.class ).labelTokens(); int labelId = holder.getIdByName( label.name() ); assertEquals( 0, tx.dataRead().countsForNode( labelId ) ); tx.success(); } }
@Override public String labelGetName( int labelId ) { return tokenById( tokenHolders.labelTokens(), labelId, "label" ); }
@Override public void addLabelToken( NamedToken label ) { tokenHolders.labelTokens().addToken( label ); }
@Override public int nodeLabel( String name ) { ktx.assertOpen(); return tokenHolders.labelTokens().getIdByName( name ); }
@Override public boolean nodeHasLabel( long node, Label label ) { int labelId = tokenHolders.labelTokens().getIdByName( label.name() ); return labelId != NO_TOKEN && nodeHasLabel( node, labelId ); }