Changeset 4206


Ignore:
Timestamp:
2010-08-17 13:04:37 (3 years ago)
Author:
evert
Message:

Remote blob streaming calls implemented (#26)

Location:
trunk
Files:
2 added
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/process/client/src/main/java/org/lilycms/client/LilyClient.java

    r4168 r4206  
    1616package org.lilycms.client; 
    1717 
     18import java.io.IOException; 
     19import java.net.InetSocketAddress; 
     20import java.util.ArrayList; 
     21import java.util.HashSet; 
     22import java.util.Iterator; 
     23import java.util.List; 
     24import java.util.Set; 
     25 
    1826import org.apache.commons.logging.Log; 
    1927import org.apache.commons.logging.LogFactory; 
     28import org.apache.hadoop.conf.Configuration; 
     29import org.apache.hadoop.fs.FileSystem; 
     30import org.apache.hadoop.hbase.HBaseConfiguration; 
    2031import org.apache.zookeeper.KeeperException; 
    2132import org.apache.zookeeper.WatchedEvent; 
    2233import org.apache.zookeeper.Watcher; 
    2334import org.apache.zookeeper.ZooKeeper; 
     35import org.lilycms.repository.api.BlobStoreAccess; 
    2436import org.lilycms.repository.api.Repository; 
    2537import org.lilycms.repository.api.TypeManager; 
    2638import org.lilycms.repository.avro.AvroConverter; 
     39import org.lilycms.repository.impl.DFSBlobStoreAccess; 
     40import org.lilycms.repository.impl.HBaseBlobStoreAccess; 
    2741import org.lilycms.repository.impl.IdGeneratorImpl; 
     42import org.lilycms.repository.impl.InlineBlobStoreAccess; 
    2843import org.lilycms.repository.impl.RepositoryRemoteImpl; 
     44import org.lilycms.repository.impl.SizeBasedBlobStoreAccessFactory; 
    2945import org.lilycms.repository.impl.TypeManagerRemoteImpl; 
    30  
    31 import java.io.IOException; 
    32 import java.net.InetSocketAddress; 
    33 import java.util.*; 
    3446 
    3547/** 
     
    5062 
    5163    private Log log = LogFactory.getLog(getClass()); 
     64    private BlobStoreAccess dfsBlobStoreAccess; 
     65    private BlobStoreAccess hbaseBlobStoreAccess; 
     66    private BlobStoreAccess inlineBlobStoreAccess; 
    5267 
    5368    public LilyClient(String zookeeperConnectString) throws IOException, InterruptedException, KeeperException { 
     
    7590        TypeManager typeManager = new TypeManagerRemoteImpl(parseAddressAndPort(server.lilyAddressAndPort), 
    7691                remoteConverter, idGenerator); 
     92         
     93        SizeBasedBlobStoreAccessFactory blobStoreAccessFactory = setupBlobStoreAccess(); 
     94         
    7795        Repository repository = new RepositoryRemoteImpl(parseAddressAndPort(server.lilyAddressAndPort), 
    78                 remoteConverter, (TypeManagerRemoteImpl)typeManager, idGenerator); 
     96                remoteConverter, (TypeManagerRemoteImpl)typeManager, idGenerator, blobStoreAccessFactory); 
     97         
     98        registerBlobStoreAccess(repository); 
     99         
    79100        remoteConverter.setRepository(repository); 
    80101        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; 
    81124    } 
    82125 
  • trunk/repository/api/src/main/java/org/lilycms/repository/api/BlobNotFoundException.java

    r4116 r4206  
    33public class BlobNotFoundException extends RepositoryException { 
    44    private final Blob blob; 
    5     private final Exception exception; 
    65 
    76    public BlobNotFoundException(Blob blob) { 
    8         this(blob, null); 
    9     } 
    10      
    11     public BlobNotFoundException(Blob blob, Exception exception) { 
    127        this.blob = blob; 
    13         this.exception = exception; 
    148    } 
    159 
     
    1812        return "Blob <" + blob + "> could not be found."; 
    1913    } 
    20  
    21     public Exception getException() { 
    22         return exception; 
    23     } 
    2414} 
  • trunk/repository/impl/src/main/avro/lily.avpr

    r4205 r4206  
    3939      ] 
    4040    }, 
     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    }, 
    4152 
    4253    { 
     
    109120    { 
    110121      "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", 
    111139      "type": "error", 
    112140      "fields": [ 
     
    183211      ] 
    184212    }, 
    185  
     213     
    186214    { 
    187215      "name": "AvroFieldTypeExistsException", 
     
    283311    }, 
    284312     
     313    "deleteBlob": { 
     314      "request": [{"name": "blob", "type": "AvroBlob"}], 
     315      "response": "null", 
     316      "errors": ["AvroBlobNotFoundException", "AvroBlobException", "AvroGenericException"] 
     317    }, 
     318     
    285319    "getVariants": { 
    286320      "request": [{"name": "recordId", "type": "string"}], 
  • trunk/repository/impl/src/main/java/org/lilycms/repository/avro/AvroConverter.java

    r4205 r4206  
    656656        return avroRecordIds; 
    657657    } 
     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    } 
    658678} 
  • trunk/repository/impl/src/main/java/org/lilycms/repository/avro/AvroLilyImpl.java

    r4205 r4206  
    2222import org.apache.avro.ipc.AvroRemoteException; 
    2323import org.apache.avro.util.Utf8; 
     24import org.lilycms.repository.api.BlobException; 
     25import org.lilycms.repository.api.BlobNotFoundException; 
    2426import org.lilycms.repository.api.FieldTypeExistsException; 
    2527import org.lilycms.repository.api.FieldTypeNotFoundException; 
     
    324326        } 
    325327    } 
     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    } 
    326339} 
  • trunk/repository/impl/src/main/java/org/lilycms/repository/impl/BlobStoreAccessRegistry.java

    r4116 r4206  
    4040    } 
    4141     
    42     public void setBlobStoreOutputStreamFactory(BlobStoreAccessFactory blobStoreAccessFactory) { 
     42    public void setBlobStoreAccessFactory(BlobStoreAccessFactory blobStoreAccessFactory) { 
    4343        this.blobStoreAccessFactory = blobStoreAccessFactory; 
    4444    } 
  • trunk/repository/impl/src/main/java/org/lilycms/repository/impl/HBaseRepository.java

    r4201 r4206  
    111111 
    112112    public HBaseRepository(TypeManager typeManager, IdGenerator idGenerator, 
    113             BlobStoreAccessFactory blobStoreOutputStreamFactory, Configuration configuration) throws IOException { 
     113            BlobStoreAccessFactory blobStoreAccessFactory, Configuration configuration) throws IOException { 
    114114        this.typeManager = typeManager; 
    115115        this.idGenerator = idGenerator; 
    116116        blobStoreAccessRegistry = new BlobStoreAccessRegistry(); 
    117         blobStoreAccessRegistry.setBlobStoreOutputStreamFactory(blobStoreOutputStreamFactory); 
     117        blobStoreAccessRegistry.setBlobStoreAccessFactory(blobStoreAccessFactory); 
    118118        recordTable = HBaseTableUtil.getRecordTable(configuration); 
    119119 
  • trunk/repository/impl/src/main/java/org/lilycms/repository/impl/RepositoryRemoteImpl.java

    r4205 r4206  
    2323import java.util.List; 
    2424import java.util.Set; 
     25import java.util.concurrent.Executors; 
    2526 
    2627import org.apache.avro.Schema; 
     
    3233import org.apache.avro.util.Utf8; 
    3334import org.apache.commons.lang.NotImplementedException; 
     35import org.jboss.netty.bootstrap.ClientBootstrap; 
     36import org.jboss.netty.channel.ChannelFuture; 
     37import org.jboss.netty.channel.ChannelPipeline; 
     38import org.jboss.netty.channel.ChannelPipelineFactory; 
     39import org.jboss.netty.channel.Channels; 
     40import org.jboss.netty.channel.SimpleChannelHandler; 
     41import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory; 
    3442import org.lilycms.repository.api.Blob; 
    3543import org.lilycms.repository.api.BlobException; 
    3644import org.lilycms.repository.api.BlobNotFoundException; 
    3745import org.lilycms.repository.api.BlobStoreAccess; 
     46import org.lilycms.repository.api.BlobStoreAccessFactory; 
    3847import org.lilycms.repository.api.FieldTypeNotFoundException; 
    3948import org.lilycms.repository.api.IdGenerator; 
     
    5261import org.lilycms.repository.api.TypeManager; 
    5362import org.lilycms.repository.api.VersionNotFoundException; 
     63import org.lilycms.repository.avro.AvroBlobException; 
     64import org.lilycms.repository.avro.AvroBlobNotFoundException; 
    5465import org.lilycms.repository.avro.AvroConverter; 
    5566import org.lilycms.repository.avro.AvroFieldTypeNotFoundException; 
     
    7283    private IdGenerator idGenerator; 
    7384    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) 
    7688            throws IOException { 
    7789        this.converter = converter; 
    7890        this.typeManager = typeManager; 
    79         //TODO idGenerator should not be available or used in the remote implementation 
    8091        this.idGenerator = idGenerator; 
     92        blobStoreAccessRegistry = new BlobStoreAccessRegistry(); 
     93        blobStoreAccessRegistry.setBlobStoreAccessFactory(blobStoreAccessFactory); 
     94 
    8195        HttpTransceiver client = new HttpTransceiver(new URL("http://" + address.getHostName() + ":" + address.getPort() + "/")); 
    8296 
     
    280294 
    281295    public void registerBlobStoreAccess(BlobStoreAccess blobStoreAccess) { 
    282         throw new NotImplementedException(); 
     296        blobStoreAccessRegistry.register(blobStoreAccess); 
    283297    } 
    284298     
    285299    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        } 
    287311    } 
    288312     
    289313    public InputStream getInputStream(Blob blob) throws BlobNotFoundException, BlobException { 
    290         throw new NotImplementedException(); 
     314        return blobStoreAccessRegistry.getInputStream(blob); 
    291315    } 
    292316     
    293317    public OutputStream getOutputStream(Blob blob) throws BlobException { 
    294         throw new NotImplementedException(); 
     318        return blobStoreAccessRegistry.getOutputStream(blob); 
    295319    } 
    296320} 
  • trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/AvroRepositoryTest.java

    r4205 r4206  
    4848        TypeManager serverTypeManager = new HBaseTypeManager(idGenerator, HBASE_PROXY.getConf()); 
    4949        DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS()); 
    50         BlobStoreAccessFactory blobStoreOutputStreamFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 
    51         serverRepository = new HBaseRepository(serverTypeManager, idGenerator, blobStoreOutputStreamFactory , HBASE_PROXY.getConf()); 
     50        BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 
     51        serverRepository = new HBaseRepository(serverTypeManager, idGenerator, blobStoreAccessFactory , HBASE_PROXY.getConf()); 
    5252         
    5353        AvroConverter serverConverter = new AvroConverter(); 
     
    6060                remoteConverter, idGenerator); 
    6161        repository = new RepositoryRemoteImpl(new InetSocketAddress(lilyServer.getPort()), remoteConverter, 
    62                 (TypeManagerRemoteImpl)typeManager, idGenerator); 
     62                (TypeManagerRemoteImpl)typeManager, idGenerator, blobStoreAccessFactory); 
    6363        remoteConverter.setRepository(repository); 
    6464        setupTypes(); 
  • trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/AvroTypeManagerFieldTypeTest.java

    r4139 r4206  
    5454        TypeManager serverTypeManager = new HBaseTypeManager(idGenerator, HBASE_PROXY.getConf()); 
    5555        DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS()); 
    56         BlobStoreAccessFactory blobStoreOutputStreamFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 
    57         serverRepository = new HBaseRepository(serverTypeManager, idGenerator, blobStoreOutputStreamFactory , HBASE_PROXY.getConf()); 
     56        BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 
     57        serverRepository = new HBaseRepository(serverTypeManager, idGenerator, blobStoreAccessFactory , HBASE_PROXY.getConf()); 
    5858         
    5959        AvroConverter serverConverter = new AvroConverter(); 
     
    6666                remoteConverter, idGenerator); 
    6767        Repository repository = new RepositoryRemoteImpl(new InetSocketAddress(lilyServer.getPort()), 
    68                 remoteConverter, (TypeManagerRemoteImpl)typeManager, idGenerator); 
     68                remoteConverter, (TypeManagerRemoteImpl)typeManager, idGenerator, blobStoreAccessFactory); 
    6969        remoteConverter.setRepository(repository); 
    7070 
  • trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/AvroTypeManagerRecordTypeTest.java

    r4139 r4206  
    5454        TypeManager serverTypeManager = new HBaseTypeManager(idGenerator, HBASE_PROXY.getConf()); 
    5555        DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS()); 
    56         BlobStoreAccessFactory blobStoreOutputStreamFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 
    57         serverRepository = new HBaseRepository(serverTypeManager, idGenerator, blobStoreOutputStreamFactory , HBASE_PROXY.getConf()); 
     56        BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 
     57        serverRepository = new HBaseRepository(serverTypeManager, idGenerator, blobStoreAccessFactory , HBASE_PROXY.getConf()); 
    5858         
    5959        AvroConverter serverConverter = new AvroConverter(); 
     
    6666                remoteConverter, idGenerator); 
    6767        Repository repository = new RepositoryRemoteImpl(new InetSocketAddress(lilyServer.getPort()), 
    68                 remoteConverter, (TypeManagerRemoteImpl)typeManager, idGenerator); 
     68                remoteConverter, (TypeManagerRemoteImpl)typeManager, idGenerator, blobStoreAccessFactory); 
    6969        remoteConverter.setRepository(repository); 
    7070 
  • trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/BlobStoreTest.java

    r4190 r4206  
    1717 
    1818 
    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; 
    2819import org.junit.After; 
    2920import org.junit.AfterClass; 
    3021import org.junit.Before; 
    3122import org.junit.BeforeClass; 
    32 import org.junit.Test; 
    33 import org.lilycms.repository.api.*; 
    34 import org.lilycms.repository.impl.AbstractTypeManager; 
     23import org.lilycms.repository.api.BlobStoreAccess; 
     24import org.lilycms.repository.api.IdGenerator; 
    3525import org.lilycms.repository.impl.DFSBlobStoreAccess; 
    3626import org.lilycms.repository.impl.HBaseBlobStoreAccess; 
     
    4333import org.lilycms.testfw.TestHelper; 
    4434 
    45 public class BlobStoreTest { 
     35public class BlobStoreTest extends AbstractBlobStoreTest { 
    4636 
    4737    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      
    5238 
    5339    @BeforeClass 
     
    5541        TestHelper.setupLogging(); 
    5642        HBASE_PROXY.start(); 
     43        IdGenerator idGenerator = new IdGeneratorImpl(); 
    5744        typeManager = new HBaseTypeManager(idGenerator, HBASE_PROXY.getConf()); 
    5845        BlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS()); 
     
    7057    @AfterClass 
    7158    public static void tearDownAfterClass() throws Exception { 
    72         repository.stop(); 
     59        ((HBaseRepository)repository).stop(); 
    7360        HBASE_PROXY.stop(); 
    7461    } 
     
    8269    } 
    8370 
    84     @Test 
    85     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     } 
    9871     
    99     @Test 
    100     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     @Test 
    139     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     @Test 
    168     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     @Test 
    178     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     @Test 
    189     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 deleted  
    208         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     } 
    22072} 
  • trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/HBaseRepositoryTest.java

    r4148 r4206  
    3838        typeManager = new HBaseTypeManager(idGenerator, HBASE_PROXY.getConf()); 
    3939        DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS()); 
    40         BlobStoreAccessFactory blobStoreOutputStreamFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 
     40        BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 
    4141         
    42         repository = new HBaseRepository(typeManager, idGenerator, blobStoreOutputStreamFactory , HBASE_PROXY.getConf()); 
     42        repository = new HBaseRepository(typeManager, idGenerator, blobStoreAccessFactory , HBASE_PROXY.getConf()); 
    4343        setupTypes(); 
    4444    } 
  • trunk/repository/impl/src/test/java/org/lilycms/repository/impl/test/ValueTypeTest.java

    r4197 r4206  
    6565        typeManager = new HBaseTypeManager(idGenerator, HBASE_PROXY.getConf()); 
    6666        DFSBlobStoreAccess dfsBlobStoreAccess = new DFSBlobStoreAccess(HBASE_PROXY.getBlobFS()); 
    67         BlobStoreAccessFactory blobStoreOutputStreamFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 
    68         repository = new HBaseRepository(typeManager, idGenerator, blobStoreOutputStreamFactory , HBASE_PROXY.getConf()); 
     67        BlobStoreAccessFactory blobStoreAccessFactory = new SizeBasedBlobStoreAccessFactory(dfsBlobStoreAccess); 
     68        repository = new HBaseRepository(typeManager, idGenerator, blobStoreAccessFactory , HBASE_PROXY.getConf()); 
    6969    } 
    7070 
Note: See TracChangeset for help on using the changeset viewer.