Changeset 4657


Ignore:
Timestamp:
2011-02-08 12:40:25 (2 years ago)
Author:
evert
Message:

Repository.create() throws a RecordExistsException? if the record already exists. (#198)

Location:
trunk/cr/repository/impl/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/cr/repository/impl/src/main/java/org/lilyproject/repository/impl/HBaseRepository.java

    r4654 r4657  
    192192                // The version numbering continues from where it has been deleted. 
    193193                Get get = new Get(rowId); 
     194                get.addColumn(systemColumnFamily, RecordColumn.DELETED.bytes); 
    194195                get.addColumn(systemColumnFamily, RecordColumn.VERSION.bytes); 
    195196                Result result = recordTable.get(get); 
    196197                if (!result.isEmpty()) { 
     198                    // If the record existed it should have been deleted 
     199                    byte[] recordDeleted = result.getValue(systemColumnFamily, RecordColumn.DELETED.bytes); 
     200                    if (recordDeleted != null && !Bytes.toBoolean(recordDeleted)) { 
     201                        throw new RecordExistsException(recordId); 
     202                    } 
    197203                    byte[] oldVersion = result.getValue(systemColumnFamily, RecordColumn.VERSION.bytes); 
    198204                    if (oldVersion != null) { 
  • trunk/cr/repository/impl/src/main/java/org/lilyproject/repository/impl/lock/RowLocker.java

    r4592 r4657  
    3939     
    4040    public RowLock lockRow(byte[] rowKey) throws IOException { 
    41         return lockRow(rowKey, null); 
    42     } 
    43      
    44     public RowLock lockRow(byte[] rowKey, org.apache.hadoop.hbase.client.RowLock hbaseRowLock) throws IOException { 
    4541        long now = System.currentTimeMillis(); 
    4642        Get get = new Get(rowKey); 
     
    5854        } 
    5955        if ((previousTimestamp == -1) || (previousTimestamp + timeout  < now)) { 
    60             Put put = new Put(rowKey, hbaseRowLock); 
     56            Put put = new Put(rowKey); 
    6157            RowLock rowLock = RowLock.createRowLock(rowKey); 
    6258            put.add(family, qualifier, 1L, rowLock.getPermit()); 
  • trunk/cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/AbstractRepositoryTest.java

    r4654 r4657  
    3333import org.junit.Before; 
    3434import org.junit.Test; 
    35 import org.lilyproject.repository.api.FieldNotFoundException; 
    36 import org.lilyproject.repository.api.FieldType; 
    37 import org.lilyproject.repository.api.IdGenerator; 
    38 import org.lilyproject.repository.api.IdRecord; 
    39 import org.lilyproject.repository.api.InvalidRecordException; 
    40 import org.lilyproject.repository.api.QName; 
    41 import org.lilyproject.repository.api.Record; 
    42 import org.lilyproject.repository.api.RecordId; 
    43 import org.lilyproject.repository.api.RecordNotFoundException; 
    44 import org.lilyproject.repository.api.RecordType; 
    45 import org.lilyproject.repository.api.RecordTypeNotFoundException; 
    46 import org.lilyproject.repository.api.Repository; 
    47 import org.lilyproject.repository.api.ResponseStatus; 
    48 import org.lilyproject.repository.api.Scope; 
    49 import org.lilyproject.repository.api.TypeManager; 
    50 import org.lilyproject.repository.api.VersionNotFoundException; 
     35import org.lilyproject.repository.api.*; 
    5136import org.lilyproject.util.repo.VersionTag; 
    5237 
     
    183168 
    184169        assertEquals(createdRecord, repository.read(createdRecord.getId())); 
     170        control.verify(); 
     171    } 
     172     
     173    @Test 
     174    public void testCreateTwice() throws Exception { 
     175        IMocksControl control = createControl(); 
     176        control.replay(); 
     177        Record createdRecord = createDefaultRecord(); 
     178 
     179        Record record = repository.newRecord(createdRecord.getId()); 
     180        record.setRecordType(recordType1.getName(), recordType1.getVersion()); 
     181        record.setField(fieldType1.getName(), "value1"); 
     182        record.setField(fieldType2.getName(), 123); 
     183        record.setField(fieldType3.getName(), true); 
     184        try { 
     185            repository.create(record); 
     186            fail(); 
     187        } catch (RecordExistsException expected) { 
     188        } 
     189         
    185190        control.verify(); 
    186191    } 
Note: See TracChangeset for help on using the changeset viewer.