Changeset 4627
- Timestamp:
- 2011-02-04 09:28:44 (2 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 24 edited
- 1 moved
-
cr/indexer/engine/src/test/java/org/lilyproject/indexer/engine/test/IndexerTest.java (modified) (1 diff)
-
cr/linkindex/src/test/java/org/lilyproject/linkindex/test/LinkIndexTest.java (modified) (1 diff)
-
cr/process/client/src/main/java/org/lilyproject/client/LilyClient.java (modified) (1 diff)
-
cr/process/server/conf/general/tables.xml (modified) (1 diff)
-
cr/process/server/conf/repository/blobmanager.xml (added)
-
cr/process/server/quick-conf/general/tables.xml (modified) (1 diff)
-
cr/process/server/repository-module/pom.xml (modified) (1 diff)
-
cr/process/server/repository-module/src/main/java/org/lilyproject/server/modules/repository/BlobIncubatorMonitorSetup.java (added)
-
cr/process/server/repository-module/src/main/java/org/lilyproject/server/modules/repository/BlobManagerSetup.java (moved) (moved from trunk/cr/process/server/repository-module/src/main/java/org/lilyproject/server/modules/repository/BlobStoreConfig.java) (2 diffs)
-
cr/process/server/repository-module/src/main/kauri/spring/services.xml (modified) (2 diffs)
-
cr/repository-api-tutorial/src/test/java/org/lilyproject/repository/api/tutorial/TutorialTest.java (modified) (1 diff)
-
cr/repository/api/src/main/java/org/lilyproject/repository/api/BlobManager.java (modified) (1 diff)
-
cr/repository/api/src/main/java/org/lilyproject/repository/api/Repository.java (modified) (1 diff)
-
cr/repository/impl/src/main/java/org/lilyproject/repository/impl/BlobIncubatorMonitor.java (added)
-
cr/repository/impl/src/main/java/org/lilyproject/repository/impl/BlobManagerImpl.java (modified) (3 diffs)
-
cr/repository/impl/src/main/java/org/lilyproject/repository/impl/BlobStoreAccessRegistry.java (modified) (1 diff)
-
cr/repository/impl/src/main/java/org/lilyproject/repository/impl/ContainsValueComparator.java (modified) (4 diffs)
-
cr/repository/impl/src/main/java/org/lilyproject/repository/impl/FieldTypeImpl.java (modified) (1 diff)
-
cr/repository/impl/src/main/java/org/lilyproject/repository/impl/HBaseRepository.java (modified) (2 diffs)
-
cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/AbstractBlobStoreTest.java (modified) (5 diffs)
-
cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/AvroRepositoryTest.java (modified) (1 diff)
-
cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/AvroTypeManagerFieldTypeTest.java (modified) (1 diff)
-
cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/AvroTypeManagerRecordTypeTest.java (modified) (1 diff)
-
cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/BlobStoreTest.java (modified) (1 diff)
-
cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/HBaseRepositoryTest.java (modified) (1 diff)
-
cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/RemoteBlobStoreTest.java (modified) (1 diff)
-
cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/ValueTypeTest.java (modified) (1 diff)
-
global/hbase-util/src/main/java/org/lilyproject/util/hbase/LilyHBaseSchema.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/cr/indexer/engine/src/test/java/org/lilyproject/indexer/engine/test/IndexerTest.java
r4622 r4627 167 167 RowLogShard walShard = new RowLogShardImpl("WS1", HBASE_PROXY.getConf(), wal, 100); 168 168 wal.registerShard(walShard); 169 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory );169 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory, false); 170 170 repository = new HBaseRepository(typeManager, idGenerator, wal, HBASE_PROXY.getConf(), hbaseTableFactory, blobManager); 171 171 -
trunk/cr/linkindex/src/test/java/org/lilyproject/linkindex/test/LinkIndexTest.java
r4621 r4627 96 96 BlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS(), new Path("/lily/blobs")); 97 97 SizeBasedBlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 98 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory );98 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory, false); 99 99 100 100 rowLogConfMgr = new RowLogConfigurationManagerImpl(zk); -
trunk/cr/process/client/src/main/java/org/lilyproject/client/LilyClient.java
r4621 r4627 191 191 blobStoreAccessFactory.addBlobStoreAccess(200000, hbaseBlobStoreAccess); 192 192 193 return new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory );193 return new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory, true); 194 194 } 195 195 -
trunk/cr/process/server/conf/general/tables.xml
r4623 r4627 53 53 </splits> 54 54 </table> 55 56 <table name="blobincubator"> 57 <splits> 58 <regionCount>20</regionCount> 59 <splitKeys></splitKeys> 60 </splits> 61 </table> 55 62 56 63 </tables> -
trunk/cr/process/server/quick-conf/general/tables.xml
r4625 r4627 21 21 </splits> 22 22 </table> 23 24 <table name="blobincubator"> 25 <splits> 26 <regionCount>1</regionCount> 27 </splits> 28 </table> 23 29 24 30 </tables> -
trunk/cr/process/server/repository-module/pom.xml
r4607 r4627 53 53 <artifactId>spring-beans</artifactId> 54 54 </dependency> 55 56 <dependency> 57 <groupId>org.kauriproject</groupId> 58 <artifactId>kauri-conf</artifactId> 59 <version>${version.kauri}</version> 60 </dependency> 55 61 </dependencies> 56 62 -
trunk/cr/process/server/repository-module/src/main/java/org/lilyproject/server/modules/repository/BlobManagerSetup.java
r4621 r4627 32 32 import org.lilyproject.util.repo.DfsUri; 33 33 34 public class Blob StoreConfig{34 public class BlobManagerSetup { 35 35 static BlobManager get(URI dfsUri, Configuration configuration, HBaseTableFactory tableFactory) throws IOException { 36 36 FileSystem fs = FileSystem.get(DfsUri.getBaseDfsUri(dfsUri), configuration); … … 43 43 blobStoreAccessFactory.addBlobStoreAccess(5000, inlineBlobStoreAccess); 44 44 blobStoreAccessFactory.addBlobStoreAccess(200000, hbaseBlobStoreAccess); 45 return new BlobManagerImpl(tableFactory, blobStoreAccessFactory );45 return new BlobManagerImpl(tableFactory, blobStoreAccessFactory, false); 46 46 } 47 47 } -
trunk/cr/process/server/repository-module/src/main/kauri/spring/services.xml
r4621 r4627 75 75 <bean 76 76 id="blobManager" 77 class="org.lilyproject.server.modules.repository.Blob StoreConfig"77 class="org.lilyproject.server.modules.repository.BlobManagerSetup" 78 78 factory-method="get"> 79 79 <constructor-arg> … … 84 84 <constructor-arg ref="hbaseConf"/> 85 85 <constructor-arg ref="hbaseTableFactory"/> 86 </bean> 87 88 <bean id="blobIncubatorMonitorSetup" class="org.lilyproject.server.modules.repository.BlobIncubatorMonitorSetup"> 89 <constructor-arg ref="zooKeeper"/> 90 <constructor-arg ref="hbaseTableFactory"/> 91 <constructor-arg ref="blobManager"/> 92 <constructor-arg ref="typeManager"/> 93 <constructor-arg><kauri:conf path="blobmanager"/></constructor-arg> 86 94 </bean> 87 95 -
trunk/cr/repository-api-tutorial/src/test/java/org/lilyproject/repository/api/tutorial/TutorialTest.java
r4621 r4627 104 104 SizeBasedBlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 105 105 blobStoreAccessFactory.addBlobStoreAccess(Long.MAX_VALUE, dfsBlobStoreAccess); 106 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory );106 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory, false); 107 107 setupWal(); 108 108 repository = new HBaseRepository(typeManager, idGenerator, wal, configuration, hbaseTableFactory, blobManager); -
trunk/cr/repository/api/src/main/java/org/lilyproject/repository/api/BlobManager.java
r4621 r4627 78 78 void register(BlobStoreAccess blobStoreAccess); 79 79 80 void delete(byte[] blobKey) throws BlobException; 80 81 } -
trunk/cr/repository/api/src/main/java/org/lilyproject/repository/api/Repository.java
r4621 r4627 241 241 OutputStream getOutputStream(Blob blob) throws BlobException, InterruptedException; 242 242 243 244 245 243 /** 246 244 * Returns an {@link InputStream} from which the binary data of a blob can be read. 247 * The blob can only be retrieved by referring to location of the blob in the record 245 * 246 * <p>The blob can only be retrieved by referring to location of the blob in the record 248 247 * and field where it is used. 249 248 * @param recordId the id of the record containing the blob -
trunk/cr/repository/impl/src/main/java/org/lilyproject/repository/impl/BlobManagerImpl.java
r4621 r4627 34 34 private Log log = LogFactory.getLog(getClass()); 35 35 36 pr ivatestatic final byte[] INCUBATE = new byte[]{(byte)-1};36 protected static final byte[] INCUBATE = new byte[]{(byte)-1}; 37 37 private HTableInterface blobIncubatorTable; 38 38 … … 41 41 private BlobStoreAccessRegistry registry; 42 42 43 public BlobManagerImpl(HBaseTableFactory hbaseTableFactory, BlobStoreAccessFactory blobStoreAccessFactory ) throws IOException {43 public BlobManagerImpl(HBaseTableFactory hbaseTableFactory, BlobStoreAccessFactory blobStoreAccessFactory, boolean clientMode) throws IOException { 44 44 this.factory = blobStoreAccessFactory; 45 blobIncubatorTable = LilyHBaseSchema.getBlobIncubatorTable(hbaseTableFactory );45 blobIncubatorTable = LilyHBaseSchema.getBlobIncubatorTable(hbaseTableFactory, clientMode); 46 46 registry = new BlobStoreAccessRegistry(this); 47 47 registry.setBlobStoreAccessFactory(blobStoreAccessFactory); … … 164 164 return blob; 165 165 } 166 167 public void delete(byte[] blobKey) throws BlobException { 168 registry.delete(blobKey); 169 170 } 166 171 } -
trunk/cr/repository/impl/src/main/java/org/lilyproject/repository/impl/BlobStoreAccessRegistry.java
r4621 r4627 84 84 } 85 85 86 public void delete(byte[] blobKey) throws BlobException { 87 Pair<String,byte[]> decodedKey = decode(blobKey); 88 BlobStoreAccess blobStoreAccess = registry.get(decodedKey.getV1()); 89 blobStoreAccess.delete(decodedKey.getV2()); 90 } 91 86 92 static private byte[] encode(String id, byte[] blobKey) { 87 93 byte[] bytes = new byte[0]; -
trunk/cr/repository/impl/src/main/java/org/lilyproject/repository/impl/ContainsValueComparator.java
r4621 r4627 7 7 import org.apache.hadoop.hbase.filter.WritableByteArrayComparable; 8 8 import org.apache.hadoop.hbase.util.Bytes; 9 import org.lilyproject.repository.api.ValueType;10 9 11 10 public class ContainsValueComparator extends WritableByteArrayComparable { … … 46 45 public int compareTo(byte[] theirValue) { 47 46 int valueTypeCode = Bytes.toInt(valueTypeAndValue); 48 byte[] our Value= Bytes.tail(valueTypeAndValue, valueTypeAndValue.length-Bytes.SIZEOF_INT);49 if (theirValue == null && our Value== null)47 byte[] ourStoreKey = Bytes.tail(valueTypeAndValue, valueTypeAndValue.length-Bytes.SIZEOF_INT); 48 if (theirValue == null && ourStoreKey == null) 50 49 return 0; 51 if (theirValue.length == 0 && our Value.length == 0)50 if (theirValue.length == 0 && ourStoreKey.length == 0) 52 51 return 0; 53 if (theirValue.length < our Value.length)52 if (theirValue.length < ourStoreKey.length) 54 53 return -1; 55 54 if (theirValue[0] == (byte)(1)) { … … 57 56 } 58 57 // Multivalue and hierarchical 59 int offset = 1; 58 int offset = 1; // First byte indicates if it was deleted or not 60 59 if (2 == valueTypeCode) { 61 60 int compareTo = -1; 62 61 while (offset < theirValue.length) { 63 int multivalue Length = Bytes.toInt(theirValue, offset);62 int multivalueKeyLength = Bytes.toInt(theirValue, offset); // Length of the next multivalue key 64 63 offset = offset + Bytes.SIZEOF_INT; 65 int nextMultivalueOffset = offset+multivalueLength;66 while (offset < nextMultivalueOffset) {67 int valueLength = Bytes.toInt(theirValue, offset);64 int stopIndex = offset + multivalueKeyLength; 65 while (offset < stopIndex) { 66 int hierarchycalKeyLength = Bytes.toInt(theirValue, offset); // Length of the next hierarchy key 68 67 offset = offset + Bytes.SIZEOF_INT; 69 compareTo = Bytes.compareTo(ourValue, 0, ourValue.length, theirValue, offset, valueLength); 68 int valueLength = Bytes.toInt(theirValue, offset); // Length of the blob key 69 // Don't increase offset here, it's calculated in the hierarchycalKeyLength 70 compareTo = Bytes.compareTo(ourStoreKey, 0, ourStoreKey.length, theirValue, offset + Bytes.SIZEOF_INT, valueLength); 70 71 if (0 == compareTo) 71 72 return 0; 72 offset = offset + valueLength;73 offset = offset + hierarchycalKeyLength; 73 74 } 74 75 } … … 79 80 int compareTo = -1; 80 81 while (offset < theirValue.length) { 81 int valueLength = Bytes.toInt(theirValue, offset);82 int multiValueKeyLength = Bytes.toInt(theirValue, offset); // Length of the next multivalue or hierarchy key 82 83 offset = offset + Bytes.SIZEOF_INT; 83 compareTo = Bytes.compareTo(ourValue, 0, ourValue.length, theirValue, offset, valueLength); 84 int valueLength = Bytes.toInt(theirValue, offset); // Length of the blob key 85 // Don't increase offset here, it's calculated in the multivalueKeyLength 86 compareTo = Bytes.compareTo(ourStoreKey, 0, ourStoreKey.length, theirValue, offset + Bytes.SIZEOF_INT, valueLength); 84 87 if (0 == compareTo) 85 88 return 0; 86 offset = offset + valueLength;89 offset = offset + multiValueKeyLength; 87 90 } 88 91 return -1; 89 92 } 90 int valueLength = Bytes.toInt(theirValue, offset); 91 return Bytes.compareTo(ourValue, 0, ourValue.length, theirValue, offset, valueLength); 93 int valueLength = Bytes.toInt(theirValue, offset); // Length of the blob key, everything beyond that is mediatype, size, filename etc. 94 offset = offset + Bytes.SIZEOF_INT; 95 return Bytes.compareTo(ourStoreKey, 0, ourStoreKey.length, theirValue, offset, valueLength); 92 96 } 93 97 } -
trunk/cr/repository/impl/src/main/java/org/lilyproject/repository/impl/FieldTypeImpl.java
r4592 r4627 52 52 } 53 53 54 p rotectedbyte[] getIdBytes() {54 public byte[] getIdBytes() { 55 55 return idBytes; 56 56 } -
trunk/cr/repository/impl/src/main/java/org/lilyproject/repository/impl/HBaseRepository.java
r4621 r4627 1225 1225 for (BlobReference blobReference : blobs) { 1226 1226 FieldTypeImpl fieldType = (FieldTypeImpl)blobReference.getFieldType(); 1227 Get get = new Get(recordId.toBytes());1228 get.addColumn(columnFamily, fieldType.getIdBytes());1227 byte[] fieldTypeIdBytes = fieldType.getIdBytes(); 1228 byte[] recordIdBytes = recordId.toBytes(); 1229 1229 ValueType valueType = fieldType.getValueType(); 1230 1231 Get get = new Get(recordIdBytes); 1232 get.addColumn(columnFamily, fieldTypeIdBytes); 1230 1233 byte[] valueToCompare; 1231 1234 if (valueType.isMultiValue() && valueType.isHierarchical()) { … … 1236 1239 valueToCompare = Bytes.toBytes(0); 1237 1240 } 1238 valueToCompare = Bytes.add(valueToCompare, valueType.getPrimitive().toBytes(blobReference.getBlob()));1241 valueToCompare = Bytes.add(valueToCompare, blobReference.getBlob().getValue()); 1239 1242 WritableByteArrayComparable valueComparator = new ContainsValueComparator(valueToCompare); 1240 1243 Filter filter = new ValueFilter(CompareOp.EQUAL, valueComparator); -
trunk/cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/AbstractBlobStoreTest.java
r4621 r4627 23 23 import java.io.OutputStream; 24 24 import java.net.URISyntaxException; 25 import java.util.Arrays; 26 import java.util.Random; 25 import java.util.*; 27 26 28 27 import org.apache.hadoop.conf.Configuration; 29 28 import org.apache.hadoop.fs.Path; 29 import org.apache.hadoop.hbase.client.*; 30 30 import org.apache.hadoop.hbase.util.Bytes; 31 31 import org.junit.Test; 32 import org.lilyproject.repository.api.Blob; 33 import org.lilyproject.repository.api.BlobException; 34 import org.lilyproject.repository.api.BlobManager; 35 import org.lilyproject.repository.api.BlobNotFoundException; 36 import org.lilyproject.repository.api.BlobStoreAccess; 37 import org.lilyproject.repository.api.FieldType; 38 import org.lilyproject.repository.api.FieldTypeEntry; 39 import org.lilyproject.repository.api.FieldTypeNotFoundException; 40 import org.lilyproject.repository.api.HierarchyPath; 41 import org.lilyproject.repository.api.InvalidRecordException; 42 import org.lilyproject.repository.api.QName; 43 import org.lilyproject.repository.api.Record; 44 import org.lilyproject.repository.api.RecordException; 45 import org.lilyproject.repository.api.RecordId; 46 import org.lilyproject.repository.api.RecordNotFoundException; 47 import org.lilyproject.repository.api.RecordType; 48 import org.lilyproject.repository.api.RecordTypeNotFoundException; 49 import org.lilyproject.repository.api.Repository; 50 import org.lilyproject.repository.api.Scope; 51 import org.lilyproject.repository.api.TypeException; 52 import org.lilyproject.repository.api.TypeManager; 53 import org.lilyproject.repository.api.VersionNotFoundException; 54 import org.lilyproject.repository.impl.BlobManagerImpl; 55 import org.lilyproject.repository.impl.BlobStoreAccessRegistry; 56 import org.lilyproject.repository.impl.DFSBlobStoreAccess; 57 import org.lilyproject.repository.impl.HBaseBlobStoreAccess; 58 import org.lilyproject.repository.impl.InlineBlobStoreAccess; 59 import org.lilyproject.repository.impl.SizeBasedBlobStoreAccessFactory; 32 import org.lilyproject.repository.api.*; 33 import org.lilyproject.repository.impl.*; 60 34 import org.lilyproject.rowlog.api.RowLog; 61 35 import org.lilyproject.rowlog.api.RowLogConfig; … … 86 60 protected static Random random = new Random(); 87 61 protected static BlobStoreAccessRegistry testBlobStoreAccessRegistry; 62 protected static BlobManager blobManager; 88 63 89 64 protected static void setupWal() throws Exception { … … 103 78 blobStoreAccessFactory.addBlobStoreAccess(50, inlineBlobStoreAccess); 104 79 blobStoreAccessFactory.addBlobStoreAccess(1024, hbaseBlobStoreAccess); 105 return new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory );80 return new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory, false); 106 81 } 107 82 … … 703 678 } 704 679 } 705 680 681 @Test 682 public void testBlobIncubatorMonitorUnusedBlob() throws Exception { 683 QName fieldName = new QName("test", "testBlobIncubatorMonitorUnusedBlob"); 684 FieldType fieldType = typeManager.newFieldType(typeManager.getValueType("BLOB", false, false), fieldName, 685 Scope.NON_VERSIONED); 686 fieldType = typeManager.createFieldType(fieldType); 687 RecordType recordType = typeManager.newRecordType(new QName(null, "testBlobIncubatorMonitorUnusedBlobRT")); 688 FieldTypeEntry fieldTypeEntry = typeManager.newFieldTypeEntry(fieldType.getId(), true); 689 recordType.addFieldTypeEntry(fieldTypeEntry); 690 recordType = typeManager.createRecordType(recordType); 691 692 // Incubate blob but never use it 693 byte[] bytes = new byte[3000]; 694 random.nextBytes(bytes); 695 Blob blob = writeBlob(bytes, "aMediaType", "testCreate"); 696 697 BlobIncubatorMonitor monitor = new BlobIncubatorMonitor(zooKeeper, hbaseTableFactory, blobManager, typeManager, 1000, 100); 698 monitor.startMonitoring(); 699 Thread.sleep(10000); 700 monitor.stopMonitoring(); 701 702 assertBlobDelete(true, blob); 703 } 704 705 @Test 706 public void testBlobIncubatorMonitorFailureAfterReservation() throws Exception { 707 QName fieldName = new QName("test", "testBlobIncubatorMonitorFailureAfterReservation"); 708 FieldType fieldType = typeManager.newFieldType(typeManager.getValueType("BLOB", false, false), fieldName, 709 Scope.NON_VERSIONED); 710 fieldType = typeManager.createFieldType(fieldType); 711 RecordType recordType = typeManager.newRecordType(new QName(null, "testBlobIncubatorMonitorFailureAfterReservationRT")); 712 FieldTypeEntry fieldTypeEntry = typeManager.newFieldTypeEntry(fieldType.getId(), true); 713 recordType.addFieldTypeEntry(fieldTypeEntry); 714 recordType = typeManager.createRecordType(recordType); 715 716 // This is the failure scenario where creating the record fails after reserving the blob 717 byte[] bytes = new byte[3000]; 718 random.nextBytes(bytes); 719 Blob blob = writeBlob(bytes, "aMediaType", "testCreate"); 720 IdGeneratorImpl idGeneratorImpl = new IdGeneratorImpl(); 721 RecordId recordId = idGeneratorImpl.newRecordId(); 722 BlobReference blobReference = new BlobReference(blob, recordId, fieldType); 723 Set<BlobReference> blobs = new HashSet<BlobReference>(); 724 blobs.add(blobReference); 725 blobManager.reserveBlobs(blobs); 726 727 BlobIncubatorMonitor monitor = new BlobIncubatorMonitor(zooKeeper, hbaseTableFactory, blobManager, typeManager, 1000, 100); 728 monitor.startMonitoring(); 729 Thread.sleep(10000); 730 monitor.stopMonitoring(); 731 732 assertBlobDelete(true, blob); 733 } 734 735 @Test 736 public void testBlobIncubatorMonitorFailureBeforeRemovingReservation() throws Exception { 737 QName fieldName = new QName("test", "testBlobIncubatorMonitorFailureBeforeRemovingReservation"); 738 FieldType fieldType = typeManager.newFieldType(typeManager.getValueType("BLOB", false, false), fieldName, 739 Scope.NON_VERSIONED); 740 fieldType = typeManager.createFieldType(fieldType); 741 RecordType recordType = typeManager.newRecordType(new QName(null, "testBlobIncubatorMonitorFailureBeforeRemovingReservation")); 742 FieldTypeEntry fieldTypeEntry = typeManager.newFieldTypeEntry(fieldType.getId(), true); 743 recordType.addFieldTypeEntry(fieldTypeEntry); 744 recordType = typeManager.createRecordType(recordType); 745 746 // This is the failure scenario where creating the record fails after reserving the blob 747 byte[] bytes = new byte[3000]; 748 random.nextBytes(bytes); 749 Blob blob = writeBlob(bytes, "aMediaType", "testCreate"); 750 IdGeneratorImpl idGeneratorImpl = new IdGeneratorImpl(); 751 RecordId recordId = idGeneratorImpl.newRecordId(); 752 BlobReference blobReference = new BlobReference(blob, recordId, fieldType); 753 Set<BlobReference> blobs = new HashSet<BlobReference>(); 754 blobs.add(blobReference); 755 repository.newRecord(); 756 Record record = repository.newRecord(); 757 record.setRecordType(recordType.getName()); 758 record.setField(fieldName, blob); 759 record = repository.create(record); 760 761 // Faking failure 762 HTableInterface blobIncubatorTable = LilyHBaseSchema.getBlobIncubatorTable(hbaseTableFactory, true); 763 Put put = new Put(blob.getValue()); 764 put.add(LilyHBaseSchema.BlobIncubatorCf.REF.bytes, LilyHBaseSchema.BlobIncubatorColumn.RECORD.bytes, record.getId().toBytes()); 765 put.add(LilyHBaseSchema.BlobIncubatorCf.REF.bytes, LilyHBaseSchema.BlobIncubatorColumn.FIELD.bytes, ((FieldTypeImpl)fieldType).getIdBytes()); 766 blobIncubatorTable.put(put); 767 768 BlobIncubatorMonitor monitor = new BlobIncubatorMonitor(zooKeeper, hbaseTableFactory, blobManager, typeManager, 1000, 100); 769 monitor.startMonitoring(); 770 Thread.sleep(10000); 771 monitor.stopMonitoring(); 772 773 assertBlobDelete(false, blob); 774 Get get = new Get(blob.getValue()); 775 Result result = blobIncubatorTable.get(get); 776 assertTrue(result == null || result.isEmpty()); 777 } 778 706 779 private void assertBlobDelete(boolean expectDelete, Blob blob) throws BlobNotFoundException, BlobException { 707 780 if (expectDelete) { … … 715 788 } 716 789 } 717 718 790 719 791 @Test -
trunk/cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/AvroRepositoryTest.java
r4621 r4627 62 62 DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS(), new Path("/lily/blobs")); 63 63 BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 64 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory );64 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory, false); 65 65 setupWal(); 66 66 serverRepository = new HBaseRepository(serverTypeManager, idGenerator, wal, configuration, hbaseTableFactory, blobManager); -
trunk/cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/AvroTypeManagerFieldTypeTest.java
r4621 r4627 86 86 DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS(), new Path("/lily/blobs")); 87 87 BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 88 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory );88 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory, false); 89 89 serverRepository = new HBaseRepository(serverTypeManager, idGenerator, wal, configuration, hbaseTableFactory, blobManager); 90 90 -
trunk/cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/AvroTypeManagerRecordTypeTest.java
r4621 r4627 97 97 DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS(), new Path("/lily/blobs")); 98 98 BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 99 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory );99 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory, false); 100 100 setupWal(); 101 101 serverRepository = new HBaseRepository(serverTypeManager, idGenerator, wal, configuration, hbaseTableFactory, blobManager); -
trunk/cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/BlobStoreTest.java
r4621 r4627 44 44 typeManager = new HBaseTypeManager(idGenerator, configuration, zooKeeper, hbaseTableFactory); 45 45 setupWal(); 46 BlobManagerblobManager = setupBlobManager();46 blobManager = setupBlobManager(); 47 47 repository = new HBaseRepository(typeManager, idGenerator, wal, configuration, hbaseTableFactory, blobManager); 48 48 // Create a blobStoreAccessRegistry for testing purposes -
trunk/cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/HBaseRepositoryTest.java
r4621 r4627 53 53 DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS(), new Path("/lily/blobs")); 54 54 blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 55 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory,blobStoreAccessFactory );55 BlobManager blobManager = new BlobManagerImpl(hbaseTableFactory,blobStoreAccessFactory, false); 56 56 setupWal(); 57 57 repository = new HBaseRepository(typeManager, idGenerator, wal, configuration, hbaseTableFactory, blobManager); -
trunk/cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/RemoteBlobStoreTest.java
r4621 r4627 75 75 typeManager = new RemoteTypeManager(new InetSocketAddress(lilyServer.getPort()), 76 76 remoteConverter, idGenerator, zooKeeper); 77 BlobManagerblobManager = setupBlobManager();77 blobManager = setupBlobManager(); 78 78 repository = new RemoteRepository(new InetSocketAddress(lilyServer.getPort()), remoteConverter, 79 79 (RemoteTypeManager)typeManager, idGenerator, blobManager); -
trunk/cr/repository/impl/src/test/java/org/lilyproject/repository/impl/test/ValueTypeTest.java
r4621 r4627 87 87 InlineBlobStoreAccess inlineBlobStoreAccess = new InlineBlobStoreAccess(); 88 88 BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(inlineBlobStoreAccess); 89 repository = new HBaseRepository(typeManager, idGenerator, initializeWal(HBASE_PROXY.getConf()), HBASE_PROXY.getConf(), hbaseTableFactory, new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory ));89 repository = new HBaseRepository(typeManager, idGenerator, initializeWal(HBASE_PROXY.getConf()), HBASE_PROXY.getConf(), hbaseTableFactory, new BlobManagerImpl(hbaseTableFactory, blobStoreAccessFactory, false)); 90 90 } 91 91 -
trunk/global/hbase-util/src/main/java/org/lilyproject/util/hbase/LilyHBaseSchema.java
r4621 r4627 54 54 } 55 55 56 public static HTableInterface getBlobIncubatorTable(HBaseTableFactory tableFactory ) throws IOException {57 return tableFactory.getTable(blobIncubatorDescriptor );56 public static HTableInterface getBlobIncubatorTable(HBaseTableFactory tableFactory, boolean clientMode) throws IOException { 57 return tableFactory.getTable(blobIncubatorDescriptor, !clientMode); 58 58 } 59 59
Note: See TracChangeset
for help on using the changeset viewer.