private static void populateTokenRecord( TokenRecord record, int nameId ) { record.setInUse( true ); record.setNameId( nameId ); record.setCreated(); DynamicRecord dynamicRecord = new DynamicRecord( nameId ); dynamicRecord.setInUse( true ); dynamicRecord.setData( new byte[10] ); dynamicRecord.setCreated(); record.addNameRecord( dynamicRecord ); }
@Override public void ensureHeavy( RECORD record ) { if ( !record.isLight() ) { return; } record.addNameRecords( nameStore.getRecords( record.getNameId(), NORMAL ) ); }
@Override public String toString() { StringBuilder buf = new StringBuilder( simpleName() + '[' ); buf.append( getId() ).append( ',' ).append( inUse() ? "in" : "no" ).append( " use" ); buf.append( ",nameId=" ).append( nameId ); additionalToString( buf ); if ( !isLight() ) { for ( DynamicRecord dyn : nameRecords ) { buf.append( ',' ).append( dyn ); } } return buf.append( ']' ).toString(); }
record.setInUse( true ); byte[] data = PropertyStore.encodeString( name ); if ( data.length > dynamicIds.length * NAME_STORE_BLOCK_SIZE ) dynamicRecord.setData( part ); dynamicRecord.setCreated(); record.addNameRecord( dynamicRecord ); record.setNameId( dynamicIds[0] ); return record;
public void createToken( String name, long id, RecordAccess<R, Void> recordAccess ) { R record = recordAccess.create( id, null ).forChangingData(); record.setInUse( true ); record.setCreated(); Collection<DynamicRecord> nameRecords = store.allocateNameRecords( encodeString( name ) ); record.setNameId( (int) Iterables.first( nameRecords ).getId() ); record.addNameRecords( nameRecords ); } }
public NamedToken getToken( int id ) { RECORD record = getRecord( id, newRecord(), NORMAL ); return new NamedToken( getStringFor( record ), record.getIntId() ); }
public void addNameRecords( Iterable<DynamicRecord> records ) { for ( DynamicRecord record : records ) { addNameRecord( record ); } }
@Override public void read( RECORD record, PageCursor cursor, RecordLoad mode, int recordSize ) { byte inUseByte = cursor.getByte(); boolean inUse = isInUse( inUseByte ); record.setInUse( inUse ); if ( mode.shouldLoad( inUse ) ) { readRecordData( cursor, record, inUse ); } }
public String getStringFor( RECORD nameRecord ) { ensureHeavy( nameRecord ); int recordToFind = nameRecord.getNameId(); Iterator<DynamicRecord> records = nameRecord.getNameRecords().iterator(); Collection<DynamicRecord> relevantRecords = new ArrayList<>(); while ( recordToFind != Record.NO_NEXT_BLOCK.intValue() && records.hasNext() ) { DynamicRecord record = records.next(); if ( record.inUse() && record.getId() == recordToFind ) { recordToFind = (int) record.getNextBlock(); // TODO: optimize here, high chance next is right one relevantRecords.add( record ); records = nameRecord.getNameRecords().iterator(); } } return decodeString( nameStore.readFullByteArray( relevantRecords, PropertyType.STRING ).other() ); } }
protected void writeRecordData( RECORD record, PageCursor cursor ) { cursor.putInt( record.getNameId() ); } }
@Override public void write( RECORD record, PageCursor cursor, int recordSize ) { if ( record.inUse() ) { cursor.putByte( Record.IN_USE.byteValue() ); writeRecordData( record, cursor ); } else { cursor.putByte( Record.NOT_IN_USE.byteValue() ); } }
record.setInUse( true ); byte[] data = PropertyStore.encodeString( name ); if ( data.length > dynamicIds.length * NAME_STORE_BLOCK_SIZE ) dynamicRecord.setData( part ); dynamicRecord.setCreated(); record.addNameRecord( dynamicRecord ); record.setNameId( dynamicIds[0] ); return record;
public void createToken( String name, long id, RecordAccess<R, Void> recordAccess ) { R record = recordAccess.create( id, null ).forChangingData(); record.setInUse( true ); record.setCreated(); Collection<DynamicRecord> nameRecords = store.allocateNameRecords( encodeString( name ) ); record.setNameId( (int) Iterables.first( nameRecords ).getId() ); record.addNameRecords( nameRecords ); } }
@Override public String toString() { StringBuilder buf = new StringBuilder( simpleName() + '[' ); buf.append( getId() ).append( ',' ).append( inUse() ? "in" : "no" ).append( " use" ); buf.append( ",nameId=" ).append( nameId ); additionalToString( buf ); if ( !isLight() ) { for ( DynamicRecord dyn : nameRecords ) { buf.append( ',' ).append( dyn ); } } return buf.append( ']' ).toString(); }
private int extractTokenId( Collection<StorageCommand> commands ) { for ( StorageCommand command : commands ) { if ( command instanceof Command.TokenCommand ) { return ((Command.TokenCommand<? extends TokenRecord>) command).getAfter().getIntId(); } } throw new IllegalStateException( "Commands did not contain token command" ); }
public void addNameRecords( Iterable<DynamicRecord> records ) { for ( DynamicRecord record : records ) { addNameRecord( record ); } }
@Override public void read( RECORD record, PageCursor cursor, RecordLoad mode, int recordSize ) { byte inUseByte = cursor.getByte(); boolean inUse = isInUse( inUseByte ); record.setInUse( inUse ); if ( mode.shouldLoad( inUse ) ) { readRecordData( cursor, record, inUse ); } }
@Override public void ensureHeavy( RECORD record ) { if ( !record.isLight() ) { return; } record.addNameRecords( nameStore.getRecords( record.getNameId(), NORMAL ) ); }
public String getStringFor( RECORD nameRecord ) { ensureHeavy( nameRecord ); int recordToFind = nameRecord.getNameId(); Iterator<DynamicRecord> records = nameRecord.getNameRecords().iterator(); Collection<DynamicRecord> relevantRecords = new ArrayList<>(); while ( recordToFind != Record.NO_NEXT_BLOCK.intValue() && records.hasNext() ) { DynamicRecord record = records.next(); if ( record.inUse() && record.getId() == recordToFind ) { recordToFind = (int) record.getNextBlock(); // TODO: optimize here, high chance next is right one relevantRecords.add( record ); records = nameRecord.getNameRecords().iterator(); } } return decodeString( nameStore.readFullByteArray( relevantRecords, PropertyType.STRING ).other() ); } }