Changeset 4206
- Timestamp:
- 2010-08-17 13:04:37 (3 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 14 edited
-
process/client/src/main/java/org/lilycms/client/LilyClient.java (modified) (3 diffs)
-
repository/api/src/main/java/org/lilycms/repository/api/BlobNotFoundException.java (modified) (2 diffs)
-
repository/impl/src/main/avro/lily.avpr (modified) (4 diffs)
-
repository/impl/src/main/java/org/lilycms/repository/avro/AvroConverter.java (modified) (1 diff)
-
repository/impl/src/main/java/org/lilycms/repository/avro/AvroLilyImpl.java (modified) (2 diffs)
-
repository/impl/src/main/java/org/lilycms/repository/impl/BlobStoreAccessRegistry.java (modified) (1 diff)
-
repository/impl/src/main/java/org/lilycms/repository/impl/HBaseRepository.java (modified) (1 diff)
-
repository/impl/src/main/java/org/lilycms/repository/impl/RepositoryRemoteImpl.java (modified) (5 diffs)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/AbstractBlobStoreTest.java (added)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/AvroRepositoryTest.java (modified) (2 diffs)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/AvroTypeManagerFieldTypeTest.java (modified) (2 diffs)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/AvroTypeManagerRecordTypeTest.java (modified) (2 diffs)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/BlobStoreTest.java (modified) (5 diffs)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/HBaseRepositoryTest.java (modified) (1 diff)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/RemoteBlobStoreTest.java (added)
-
repository/impl/src/test/java/org/lilycms/repository/impl/test/ValueTypeTest.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/process/client/src/main/java/org/lilycms/client/LilyClient.java
r4168 r4206 16 16 package org.lilycms.client; 17 17 18 import java.io.IOException; 19 import java.net.InetSocketAddress; 20 import java.util.ArrayList; 21 import java.util.HashSet; 22 import java.util.Iterator; 23 import java.util.List; 24 import java.util.Set; 25 18 26 import org.apache.commons.logging.Log; 19 27 import org.apache.commons.logging.LogFactory; 28 import org.apache.hadoop.conf.Configuration; 29 import org.apache.hadoop.fs.FileSystem; 30 import org.apache.hadoop.hbase.HBaseConfiguration; 20 31 import org.apache.zookeeper.KeeperException; 21 32 import org.apache.zookeeper.WatchedEvent; 22 33 import org.apache.zookeeper.Watcher; 23 34 import org.apache.zookeeper.ZooKeeper; 35 import org.lilycms.repository.api.BlobStoreAccess; 24 36 import org.lilycms.repository.api.Repository; 25 37 import org.lilycms.repository.api.TypeManager; 26 38 import org.lilycms.repository.avro.AvroConverter; 39 import org.lilycms.repository.impl.DFSBlobStoreAccess; 40 import org.lilycms.repository.impl.HBaseBlobStoreAccess; 27 41 import org.lilycms.repository.impl.IdGeneratorImpl; 42 import org.lilycms.repository.impl.InlineBlobStoreAccess; 28 43 import org.lilycms.repository.impl.RepositoryRemoteImpl; 44 import org.lilycms.repository.impl.SizeBasedBlobStoreAccessFactory; 29 45 import org.lilycms.repository.impl.TypeManagerRemoteImpl; 30 31 import java.io.IOException;32 import java.net.InetSocketAddress;33 import java.util.*;34 46 35 47 /** … … 50 62 51 63 private Log log = LogFactory.getLog(getClass()); 64 private BlobStoreAccess dfsBlobStoreAccess; 65 private BlobStoreAccess hbaseBlobStoreAccess; 66 private BlobStoreAccess inlineBlobStoreAccess; 52 67 53 68 public LilyClient(String zookeeperConnectString) throws IOException, InterruptedException, KeeperException { … … 75 90 TypeManager typeManager = new TypeManagerRemoteImpl(parseAddressAndPort(server.lilyAddressAndPort), 76 91 remoteConverter, idGenerator); 92 93 SizeBasedBlobStoreAccessFactory blobStoreAccessFactory = setupBlobStoreAccess(); 94 77 95 Repository repository = new RepositoryRemoteImpl(parseAddressAndPort(server.lilyAddressAndPort), 78 remoteConverter, (TypeManagerRemoteImpl)typeManager, idGenerator); 96 remoteConverter, (TypeManagerRemoteImpl)typeManager, idGenerator, blobStoreAccessFactory); 97 98 registerBlobStoreAccess(repository); 99 79 100 remoteConverter.setRepository(repository); 80 101 server.repository = repository; 102 } 103 104 private void registerBlobStoreAccess(Repository repository) { 105 if (dfsBlobStoreAccess != null) { 106 repository.registerBlobStoreAccess(dfsBlobStoreAccess); 107 } 108 repository.registerBlobStoreAccess(hbaseBlobStoreAccess); 109 repository.registerBlobStoreAccess(inlineBlobStoreAccess); 110 } 111 112 private SizeBasedBlobStoreAccessFactory setupBlobStoreAccess() throws IOException { 113 Configuration configuration = HBaseConfiguration.create(); 114 FileSystem.get(configuration); 115 116 dfsBlobStoreAccess = new DFSBlobStoreAccess(FileSystem.get(configuration)); 117 hbaseBlobStoreAccess = new HBaseBlobStoreAccess(configuration); 118 inlineBlobStoreAccess = new InlineBlobStoreAccess(); 119 BlobStoreAccess defaultBlobStoreAccess = dfsBlobStoreAccess == null ? hbaseBlobStoreAccess : dfsBlobStoreAccess; 120 SizeBasedBlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(defaultBlobStoreAccess); 121 blobStoreAccessFactory.addBlobStoreAccess(5000, inlineBlobStoreAccess); 122 blobStoreAccessFactory.addBlobStoreAccess(200000, hbaseBlobStoreAccess); 123 return blobStoreAccessFactory; 81 124 } 82 125 -
trunk/repository/api/src/main/java/org/lilycms/repository/api/BlobNotFoundException.java
r4116 r4206 3 3 public class BlobNotFoundException extends RepositoryException { 4 4 private final Blob blob; 5 private final Exception exception;6 5 7 6 public BlobNotFoundException(Blob blob) { 8 this(blob, null);9 }10 11 public BlobNotFoundException(Blob blob, Exception exception) {12 7 this.blob = blob; 13 this.exception = exception;14 8 } 15 9 … … 18 12 return "Blob <" + blob + "> could not be found."; 19 13 } 20 21 public Exception getException() {22 return exception;23 }24 14 } -
trunk/repository/impl/src/main/avro/lily.avpr
r4205 r4206 39 39 ] 40 40 }, 41 42 { 43 "name": "AvroBlob", 44 "type": "record", 45 "fields": [ 46 {"name": "mimetype", "type": ["string", "null"]}, 47 {"name": "size", "type": "long"}, 48 {"name": "name", "type": ["string", "null"]}, 49 {"name": "value", "type": ["bytes", "null"]} 50 ] 51 }, 41 52 42 53 { … … 109 120 { 110 121 "name": "AvroTypeException", 122 "type": "error", 123 "fields": [ 124 {"name": "message", "type": "string"}, 125 {"name": "remoteCauses", "type": ["null", {"type": "array", "items": "AvroExceptionCause"}]} 126 ] 127 }, 128 129 { 130 "name": "AvroBlobNotFoundException", 131 "type": "error", 132 "fields": [ 133 {"name": "blob", "type": "AvroBlob"} 134 ] 135 }, 136 137 { 138 "name": "AvroBlobException", 111 139 "type": "error", 112 140 "fields": [ … … 183 211 ] 184 212 }, 185 213 186 214 { 187 215 "name": "AvroFieldTypeExistsException", … … 283 311 }, 284 312 313 "deleteBlob": { 314 "request": [{"name": "blob", "type": "AvroBlob"}], 315 "response": "null", 316 "errors": ["AvroBlobNotFoundException", "AvroBlobException", "AvroGenericException"] 317 }, 318 285 319 "getVariants": { 286 320 "request": [{"name": "recordId", "type": "string"}], -
trunk/repository/impl/src/main/java/org/lilycms/repository/avro/AvroConverter.java
r4205 r4206 656 656 return avroRecordIds; 657 657 } 658 659 public Blob convert(AvroBlob avroBlob) { 660 byte[] value = null; 661 if (avroBlob.value != null) 662 value = avroBlob.value.array(); 663 String mimetype = convert(avroBlob.mimetype); 664 Long size = avroBlob.size; 665 String name = convert(avroBlob.name); 666 return new Blob(value, mimetype, size, name); 667 } 668 669 public AvroBlob convert(Blob blob) { 670 AvroBlob avroBlob = new AvroBlob(); 671 if (blob.getValue() != null) 672 avroBlob.value = ByteBuffer.wrap(blob.getValue()); 673 avroBlob.mimetype = convert(blob.getMimetype()); 674 avroBlob.size = blob.getSize(); 675 avroBlob.name = convert(blob.getName()); 676 return avroBlob; 677 } 658 678 } -
trunk/repository/impl/src/main/java/org/lilycms/repository/avro/AvroLilyImpl.java
r4205 r4206 22 22 import org.apache.avro.ipc.AvroRemoteException; 23 23 import org.apache.avro.util.Utf8; 24 import org.lilycms.repository.api.BlobException; 25 import org.lilycms.repository.api.BlobNotFoundException; 24 26 import org.lilycms.repository.api.FieldTypeExistsException; 25 27 import org.lilycms.repository.api.FieldTypeNotFoundException; … … 324 326 } 325 327 } 328 329 public Void deleteBlob(AvroBlob avroBlob) throws AvroRemoteException, AvroBlobNotFoundException, AvroBlobException { 330 try { 331 repository.delete(converter.convert(avroBlob)); 332 } catch (BlobNotFoundException e) { 333 throw converter.convert(e); 334 } catch (BlobException e) { 335 throw converter.convert(e); 336 } 337 return null; 338 } 326 339 } -
trunk/repository/impl/src/main/java/org/lilycms/repository/impl/BlobStoreAccessRegistry.java
r4116 r4206 40 40 } 41 41 42 public void setBlobStore OutputStreamFactory(BlobStoreAccessFactory blobStoreAccessFactory) {42 public void setBlobStoreAccessFactory(BlobStoreAccessFactory blobStoreAccessFactory) { 43 43 this.blobStoreAccessFactory = blobStoreAccessFactory; 44 44 } -
trunk/repository/impl/src/main/java/org/lilycms/repository/impl/HBaseRepository.java
r4201 r4206 111 111 112 112 public HBaseRepository(TypeManager typeManager, IdGenerator idGenerator, 113 BlobStoreAccessFactory blobStore OutputStreamFactory, Configuration configuration) throws IOException {113 BlobStoreAccessFactory blobStoreAccessFactory, Configuration configuration) throws IOException { 114 114 this.typeManager = typeManager; 115 115 this.idGenerator = idGenerator; 116 116 blobStoreAccessRegistry = new BlobStoreAccessRegistry(); 117 blobStoreAccessRegistry.setBlobStore OutputStreamFactory(blobStoreOutputStreamFactory);117 blobStoreAccessRegistry.setBlobStoreAccessFactory(blobStoreAccessFactory); 118 118 recordTable = HBaseTableUtil.getRecordTable(configuration); 119 119 -
trunk/repository/impl/src/main/java/org/lilycms/repository/impl/RepositoryRemoteImpl.java
r4205 r4206 23 23 import java.util.List; 24 24 import java.util.Set; 25 import java.util.concurrent.Executors; 25 26 26 27 import org.apache.avro.Schema; … … 32 33 import org.apache.avro.util.Utf8; 33 34 import org.apache.commons.lang.NotImplementedException; 35 import org.jboss.netty.bootstrap.ClientBootstrap; 36 import org.jboss.netty.channel.ChannelFuture; 37 import org.jboss.netty.channel.ChannelPipeline; 38 import org.jboss.netty.channel.ChannelPipelineFactory; 39 import org.jboss.netty.channel.Channels; 40 import org.jboss.netty.channel.SimpleChannelHandler; 41 import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory; 34 42 import org.lilycms.repository.api.Blob; 35 43 import org.lilycms.repository.api.BlobException; 36 44 import org.lilycms.repository.api.BlobNotFoundException; 37 45 import org.lilycms.repository.api.BlobStoreAccess; 46 import org.lilycms.repository.api.BlobStoreAccessFactory; 38 47 import org.lilycms.repository.api.FieldTypeNotFoundException; 39 48 import org.lilycms.repository.api.IdGenerator; … … 52 61 import org.lilycms.repository.api.TypeManager; 53 62 import org.lilycms.repository.api.VersionNotFoundException; 63 import org.lilycms.repository.avro.AvroBlobException; 64 import org.lilycms.repository.avro.AvroBlobNotFoundException; 54 65 import org.lilycms.repository.avro.AvroConverter; 55 66 import org.lilycms.repository.avro.AvroFieldTypeNotFoundException; … … 72 83 private IdGenerator idGenerator; 73 84 private final TypeManager typeManager; 74 75 public RepositoryRemoteImpl(InetSocketAddress address, AvroConverter converter, TypeManagerRemoteImpl typeManager, IdGenerator idGenerator) 85 private BlobStoreAccessRegistry blobStoreAccessRegistry; 86 87 public RepositoryRemoteImpl(InetSocketAddress address, AvroConverter converter, TypeManagerRemoteImpl typeManager, IdGenerator idGenerator, BlobStoreAccessFactory blobStoreAccessFactory) 76 88 throws IOException { 77 89 this.converter = converter; 78 90 this.typeManager = typeManager; 79 //TODO idGenerator should not be available or used in the remote implementation80 91 this.idGenerator = idGenerator; 92 blobStoreAccessRegistry = new BlobStoreAccessRegistry(); 93 blobStoreAccessRegistry.setBlobStoreAccessFactory(blobStoreAccessFactory); 94 81 95 HttpTransceiver client = new HttpTransceiver(new URL("http://" + address.getHostName() + ":" + address.getPort() + "/")); 82 96 … … 280 294 281 295 public void registerBlobStoreAccess(BlobStoreAccess blobStoreAccess) { 282 throw new NotImplementedException();296 blobStoreAccessRegistry.register(blobStoreAccess); 283 297 } 284 298 285 299 public void delete(Blob blob) throws BlobNotFoundException, BlobException { 286 throw new NotImplementedException(); 300 try { 301 lilyProxy.deleteBlob(converter.convert(blob)); 302 } catch (AvroBlobNotFoundException e) { 303 throw converter.convert(e); 304 } catch (AvroBlobException e) { 305 throw converter.convert(e); 306 } catch (AvroGenericException e) { 307 throw converter.convert(e); 308 } catch (AvroRemoteException e) { 309 throw converter.convert(e); 310 } 287 311 } 288 312 289 313 public InputStream getInputStream(Blob blob) throws BlobNotFoundException, BlobException { 290 throw new NotImplementedException();314 return blobStoreAccessRegistry.getInputStream(blob); 291 315 } 292 316 293 317 public OutputStream getOutputStream(Blob blob) throws BlobException { 294 throw new NotImplementedException();318 return blobStoreAccessRegistry.getOutputStream(blob); 295 319 } 296 320 } -
trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/AvroRepositoryTest.java
r4205 r4206 48 48 TypeManager serverTypeManager = new HBaseTypeManager(idGenerator, HBASE_PROXY.getConf()); 49 49 DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS()); 50 BlobStoreAccessFactory blobStore OutputStreamFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess);51 serverRepository = new HBaseRepository(serverTypeManager, idGenerator, blobStore OutputStreamFactory , HBASE_PROXY.getConf());50 BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 51 serverRepository = new HBaseRepository(serverTypeManager, idGenerator, blobStoreAccessFactory , HBASE_PROXY.getConf()); 52 52 53 53 AvroConverter serverConverter = new AvroConverter(); … … 60 60 remoteConverter, idGenerator); 61 61 repository = new RepositoryRemoteImpl(new InetSocketAddress(lilyServer.getPort()), remoteConverter, 62 (TypeManagerRemoteImpl)typeManager, idGenerator );62 (TypeManagerRemoteImpl)typeManager, idGenerator, blobStoreAccessFactory); 63 63 remoteConverter.setRepository(repository); 64 64 setupTypes(); -
trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/AvroTypeManagerFieldTypeTest.java
r4139 r4206 54 54 TypeManager serverTypeManager = new HBaseTypeManager(idGenerator, HBASE_PROXY.getConf()); 55 55 DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS()); 56 BlobStoreAccessFactory blobStore OutputStreamFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess);57 serverRepository = new HBaseRepository(serverTypeManager, idGenerator, blobStore OutputStreamFactory , HBASE_PROXY.getConf());56 BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 57 serverRepository = new HBaseRepository(serverTypeManager, idGenerator, blobStoreAccessFactory , HBASE_PROXY.getConf()); 58 58 59 59 AvroConverter serverConverter = new AvroConverter(); … … 66 66 remoteConverter, idGenerator); 67 67 Repository repository = new RepositoryRemoteImpl(new InetSocketAddress(lilyServer.getPort()), 68 remoteConverter, (TypeManagerRemoteImpl)typeManager, idGenerator );68 remoteConverter, (TypeManagerRemoteImpl)typeManager, idGenerator, blobStoreAccessFactory); 69 69 remoteConverter.setRepository(repository); 70 70 -
trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/AvroTypeManagerRecordTypeTest.java
r4139 r4206 54 54 TypeManager serverTypeManager = new HBaseTypeManager(idGenerator, HBASE_PROXY.getConf()); 55 55 DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS()); 56 BlobStoreAccessFactory blobStore OutputStreamFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess);57 serverRepository = new HBaseRepository(serverTypeManager, idGenerator, blobStore OutputStreamFactory , HBASE_PROXY.getConf());56 BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 57 serverRepository = new HBaseRepository(serverTypeManager, idGenerator, blobStoreAccessFactory , HBASE_PROXY.getConf()); 58 58 59 59 AvroConverter serverConverter = new AvroConverter(); … … 66 66 remoteConverter, idGenerator); 67 67 Repository repository = new RepositoryRemoteImpl(new InetSocketAddress(lilyServer.getPort()), 68 remoteConverter, (TypeManagerRemoteImpl)typeManager, idGenerator );68 remoteConverter, (TypeManagerRemoteImpl)typeManager, idGenerator, blobStoreAccessFactory); 69 69 remoteConverter.setRepository(repository); 70 70 -
trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/BlobStoreTest.java
r4190 r4206 17 17 18 18 19 import static org.junit.Assert.assertTrue;20 import static org.junit.Assert.fail;21 22 import java.io.InputStream;23 import java.io.OutputStream;24 import java.util.Arrays;25 import java.util.Random;26 27 import org.apache.hadoop.hbase.util.Bytes;28 19 import org.junit.After; 29 20 import org.junit.AfterClass; 30 21 import org.junit.Before; 31 22 import org.junit.BeforeClass; 32 import org.junit.Test; 33 import org.lilycms.repository.api.*; 34 import org.lilycms.repository.impl.AbstractTypeManager; 23 import org.lilycms.repository.api.BlobStoreAccess; 24 import org.lilycms.repository.api.IdGenerator; 35 25 import org.lilycms.repository.impl.DFSBlobStoreAccess; 36 26 import org.lilycms.repository.impl.HBaseBlobStoreAccess; … … 43 33 import org.lilycms.testfw.TestHelper; 44 34 45 public class BlobStoreTest {35 public class BlobStoreTest extends AbstractBlobStoreTest { 46 36 47 37 private final static HBaseProxy HBASE_PROXY = new HBaseProxy(); 48 private static IdGenerator idGenerator = new IdGeneratorImpl();49 private static AbstractTypeManager typeManager;50 private static HBaseRepository repository;51 52 38 53 39 @BeforeClass … … 55 41 TestHelper.setupLogging(); 56 42 HBASE_PROXY.start(); 43 IdGenerator idGenerator = new IdGeneratorImpl(); 57 44 typeManager = new HBaseTypeManager(idGenerator, HBASE_PROXY.getConf()); 58 45 BlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS()); … … 70 57 @AfterClass 71 58 public static void tearDownAfterClass() throws Exception { 72 repository.stop();59 ((HBaseRepository)repository).stop(); 73 60 HBASE_PROXY.stop(); 74 61 } … … 82 69 } 83 70 84 @Test85 public void testCreate() throws Exception {86 byte[] bytes = Bytes.toBytes("someBytes");87 Blob blob = new Blob("aMimetype", (long)bytes.length, "testCreate");88 OutputStream outputStream = repository.getOutputStream(blob);89 outputStream.write(bytes);90 outputStream.close();91 92 InputStream inputStream = repository.getInputStream(blob);93 byte[] readBytes = new byte[blob.getSize().intValue()];94 inputStream.read(readBytes);95 inputStream.close();96 assertTrue(Arrays.equals(bytes, readBytes));97 }98 71 99 @Test100 public void testThreeSizes() throws Exception {101 Random random = new Random();102 byte[] small = new byte[10];103 random.nextBytes(small);104 byte[] medium = new byte[100];105 random.nextBytes(medium);106 byte[] large = new byte[2048];107 random.nextBytes(large);108 Blob smallBlob = new Blob("mime/small", (long)10, "small");109 Blob mediumBlob = new Blob("mime/medium", (long)100, "medium");110 Blob largeBlob = new Blob("mime/large", (long)2048, "large");111 OutputStream outputStream = repository.getOutputStream(smallBlob);112 outputStream.write(small);113 outputStream.close();114 outputStream = repository.getOutputStream(mediumBlob);115 outputStream.write(medium);116 outputStream.close();117 outputStream = repository.getOutputStream(largeBlob);118 outputStream.write(large);119 outputStream.close();120 121 InputStream inputStream = repository.getInputStream(smallBlob);122 byte[] readBytes = new byte[10];123 inputStream.read(readBytes);124 inputStream.close();125 assertTrue(Arrays.equals(small, readBytes));126 inputStream = repository.getInputStream(mediumBlob);127 readBytes = new byte[100];128 inputStream.read(readBytes);129 inputStream.close();130 assertTrue(Arrays.equals(medium, readBytes));131 inputStream = repository.getInputStream(largeBlob);132 readBytes = new byte[2048];133 inputStream.read(readBytes);134 inputStream.close();135 assertTrue(Arrays.equals(large, readBytes));136 }137 138 @Test139 public void testCreateRecordWithBlob() throws Exception {140 QName fieldName = new QName("test", "ablob");141 FieldType fieldType = typeManager.newFieldType(typeManager.getValueType("BLOB", false, false), fieldName, Scope.VERSIONED);142 fieldType = typeManager.createFieldType(fieldType);143 RecordType recordType = typeManager.newRecordType(new QName(null, "testCreateRecordWithBlobRT"));144 FieldTypeEntry fieldTypeEntry = typeManager.newFieldTypeEntry(fieldType.getId(), true);145 recordType.addFieldTypeEntry(fieldTypeEntry);146 recordType = typeManager.createRecordType(recordType);147 Record record = repository.newRecord();148 record.setRecordType(recordType.getName(), null);149 150 byte[] bytes = Bytes.toBytes("someBytes");151 Blob blob = new Blob("aMimetype", (long)bytes.length, "testCreate");152 OutputStream outputStream = repository.getOutputStream(blob);153 outputStream.write(bytes);154 outputStream.close();155 record.setField(fieldName, blob);156 record = repository.create(record);157 158 record = repository.read(record.getId());159 blob = (Blob)record.getField(fieldName);160 InputStream inputStream = repository.getInputStream(blob);161 byte[] readBytes = new byte[blob.getSize().intValue()];162 inputStream.read(readBytes);163 inputStream.close();164 assertTrue(Arrays.equals(bytes, readBytes));165 }166 167 @Test168 public void testReadBlobWithoutName() throws Exception {169 Blob blob = new Blob("aMimetype", (long)10, "aName");170 try {171 repository.getInputStream(blob);172 fail();173 } catch (BlobNotFoundException expected) {174 }175 }176 177 @Test178 public void testBadEncoding() throws Exception {179 Blob blob = new Blob("aMimetype", (long)10, "aName");180 blob.setValue(new byte[0]);181 try {182 repository.getInputStream(blob);183 fail();184 } catch (BlobException expected) {185 }186 }187 188 @Test189 public void testDelete() throws Exception {190 byte[] small = new byte[10];191 byte[] medium = new byte[100];192 byte[] large = new byte[2048];193 Blob smallBlob = new Blob("mime/small", (long)10, "small");194 OutputStream outputStream = repository.getOutputStream(smallBlob);195 outputStream.write(small);196 outputStream.close();197 Blob mediumBlob = new Blob("mime/medium", (long)100, "medium");198 outputStream = repository.getOutputStream(mediumBlob);199 outputStream.write(medium);200 outputStream.close();201 Blob largeBlob = new Blob("mime/large", (long)10, "large");202 outputStream = repository.getOutputStream(largeBlob);203 outputStream.write(large);204 outputStream.close();205 206 repository.delete(smallBlob);207 // TODO ok to ignore a delete of an inline blob? it will be deleted when the record is deleted208 repository.getInputStream(smallBlob);209 repository.delete(mediumBlob);210 try {211 repository.getInputStream(smallBlob);212 } catch (BlobException expected) {213 }214 repository.delete(largeBlob);215 try {216 repository.getInputStream(smallBlob);217 } catch (BlobException expected) {218 }219 }220 72 } -
trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/HBaseRepositoryTest.java
r4148 r4206 38 38 typeManager = new HBaseTypeManager(idGenerator, HBASE_PROXY.getConf()); 39 39 DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS()); 40 BlobStoreAccessFactory blobStore OutputStreamFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess);40 BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 41 41 42 repository = new HBaseRepository(typeManager, idGenerator, blobStore OutputStreamFactory , HBASE_PROXY.getConf());42 repository = new HBaseRepository(typeManager, idGenerator, blobStoreAccessFactory , HBASE_PROXY.getConf()); 43 43 setupTypes(); 44 44 } -
trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/ValueTypeTest.java
r4197 r4206 65 65 typeManager = new HBaseTypeManager(idGenerator, HBASE_PROXY.getConf()); 66 66 DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS()); 67 BlobStoreAccessFactory blobStore OutputStreamFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess);68 repository = new HBaseRepository(typeManager, idGenerator, blobStore OutputStreamFactory , HBASE_PROXY.getConf());67 BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 68 repository = new HBaseRepository(typeManager, idGenerator, blobStoreAccessFactory , HBASE_PROXY.getConf()); 69 69 } 70 70
Note: See TracChangeset
for help on using the changeset viewer.