Search in sources :

Example 1 with BlobReference

use of com.zimbra.cs.store.file.BlobReference in project zm-mailbox by Zimbra.

the class DbVolumeBlobsTest method writeBlobInfo.

@Test
public void writeBlobInfo() throws Exception {
    Mailbox mbox = MailboxManager.getInstance().getMailboxByAccountId(MockProvisioning.DEFAULT_ACCOUNT_ID);
    DeliveryOptions opt = new DeliveryOptions();
    opt.setFolderId(Mailbox.ID_FOLDER_INBOX);
    Message msg = mbox.addMessage(null, new ParsedMessage("From: from1@zimbra.com\r\nTo: to1@zimbra.com".getBytes(), false), opt, null);
    Volume vol = VolumeManager.getInstance().getCurrentMessageVolume();
    DbVolumeBlobs.addBlobReference(conn, mbox, vol, msg);
    String digest = msg.getBlob().getDigest();
    String path = msg.getBlob().getLocalBlob().getFile().getPath();
    List<BlobReference> blobs = DbVolumeBlobs.getBlobReferences(conn, digest, vol);
    Assert.assertEquals(1, blobs.size());
    BlobReference ref = blobs.get(0);
    Assert.assertEquals(path, getPath(ref));
}
Also used : BlobReference(com.zimbra.cs.store.file.BlobReference) Mailbox(com.zimbra.cs.mailbox.Mailbox) Message(com.zimbra.cs.mailbox.Message) ParsedMessage(com.zimbra.cs.mime.ParsedMessage) Volume(com.zimbra.cs.volume.Volume) ParsedMessage(com.zimbra.cs.mime.ParsedMessage) DeliveryOptions(com.zimbra.cs.mailbox.DeliveryOptions) Test(org.junit.Test)

Example 2 with BlobReference

use of com.zimbra.cs.store.file.BlobReference in project zm-mailbox by Zimbra.

the class DbVolumeBlobsTest method blobsByVolume.

@Test
public void blobsByVolume() throws Exception {
    Mailbox mbox = MailboxManager.getInstance().getMailboxByAccountId(MockProvisioning.DEFAULT_ACCOUNT_ID);
    DeliveryOptions opt = new DeliveryOptions();
    opt.setFolderId(Mailbox.ID_FOLDER_INBOX);
    ParsedMessage pm = new ParsedMessage("From: from1@zimbra.com\r\nTo: to1@zimbra.com".getBytes(), false);
    Message msg = mbox.addMessage(null, pm, opt, null);
    Volume vol = VolumeManager.getInstance().getCurrentMessageVolume();
    DbVolumeBlobs.addBlobReference(conn, mbox, vol, msg);
    String volPath = vol.getRootPath().replace("store", "store2");
    File volFile = new File(volPath);
    volFile.mkdirs();
    Volume vol2 = Volume.builder().setPath(volFile.getAbsolutePath(), true).setType(Volume.TYPE_MESSAGE).setName("volume2").build();
    vol2 = VolumeManager.getInstance().create(vol2);
    VolumeManager.getInstance().setCurrentVolume(Volume.TYPE_MESSAGE, vol2.getId());
    Message msg2 = mbox.addMessage(null, pm, opt, null);
    DbVolumeBlobs.addBlobReference(conn, mbox, vol2, msg2);
    String digest = msg.getBlob().getDigest();
    // add same msg to two different volumes
    List<BlobReference> blobs = DbVolumeBlobs.getBlobReferences(conn, vol);
    Assert.assertEquals(1, blobs.size());
    Set<String> paths = new HashSet<String>();
    paths.add(msg.getBlob().getLocalBlob().getFile().getPath());
    for (BlobReference ref : blobs) {
        Assert.assertTrue(paths.remove(getPath(ref)));
        Assert.assertEquals(vol.getId(), ref.getVolumeId());
    }
    blobs = DbVolumeBlobs.getBlobReferences(conn, vol2);
    Assert.assertEquals(1, blobs.size());
    paths = new HashSet<String>();
    paths.add(msg2.getBlob().getLocalBlob().getFile().getPath());
    for (BlobReference ref : blobs) {
        Assert.assertTrue(paths.remove(getPath(ref)));
        Assert.assertEquals(vol2.getId(), ref.getVolumeId());
    }
    blobs = DbVolumeBlobs.getBlobReferences(conn, digest, vol);
    paths = new HashSet<String>();
    paths.add(msg.getBlob().getLocalBlob().getFile().getPath());
    Assert.assertEquals(1, blobs.size());
    for (BlobReference ref : blobs) {
        Assert.assertTrue(paths.remove(getPath(ref)));
    }
    blobs = DbVolumeBlobs.getBlobReferences(conn, digest, vol2);
    paths = new HashSet<String>();
    paths.add(msg2.getBlob().getLocalBlob().getFile().getPath());
    Assert.assertEquals(1, blobs.size());
    for (BlobReference ref : blobs) {
        Assert.assertTrue(paths.remove(getPath(ref)));
    }
    // delete from vol1
    DbVolumeBlobs.deleteBlobRef(conn, vol);
    blobs = DbVolumeBlobs.getBlobReferences(conn, digest, vol2);
    paths = new HashSet<String>();
    paths.add(msg2.getBlob().getLocalBlob().getFile().getPath());
    Assert.assertEquals(1, blobs.size());
    for (BlobReference ref : blobs) {
        Assert.assertTrue(paths.remove(getPath(ref)));
    }
    blobs = DbVolumeBlobs.getBlobReferences(conn, vol);
    Assert.assertEquals(0, blobs.size());
    blobs = DbVolumeBlobs.getBlobReferences(conn, vol2);
    Assert.assertEquals(1, blobs.size());
    paths = new HashSet<String>();
    paths.add(msg2.getBlob().getLocalBlob().getFile().getPath());
    for (BlobReference ref : blobs) {
        Assert.assertTrue(paths.remove(getPath(ref)));
    }
    blobs = DbVolumeBlobs.getBlobReferences(conn, digest, vol2);
    paths = new HashSet<String>();
    paths.add(msg2.getBlob().getLocalBlob().getFile().getPath());
    Assert.assertEquals(1, blobs.size());
    for (BlobReference ref : blobs) {
        Assert.assertTrue(paths.remove(getPath(ref)));
    }
}
Also used : BlobReference(com.zimbra.cs.store.file.BlobReference) Mailbox(com.zimbra.cs.mailbox.Mailbox) Message(com.zimbra.cs.mailbox.Message) ParsedMessage(com.zimbra.cs.mime.ParsedMessage) Volume(com.zimbra.cs.volume.Volume) ParsedMessage(com.zimbra.cs.mime.ParsedMessage) DeliveryOptions(com.zimbra.cs.mailbox.DeliveryOptions) File(java.io.File) HashSet(java.util.HashSet) Test(org.junit.Test)

Example 3 with BlobReference

use of com.zimbra.cs.store.file.BlobReference in project zm-mailbox by Zimbra.

the class DbVolumeBlobsTest method deleteAllBlobRef.

@Test
public void deleteAllBlobRef() throws Exception {
    Mailbox mbox = MailboxManager.getInstance().getMailboxByAccountId(MockProvisioning.DEFAULT_ACCOUNT_ID);
    DeliveryOptions opt = new DeliveryOptions();
    opt.setFolderId(Mailbox.ID_FOLDER_INBOX);
    Message msg = mbox.addMessage(null, new ParsedMessage("From: from1@zimbra.com\r\nTo: to1@zimbra.com".getBytes(), false), opt, null);
    Volume vol = VolumeManager.getInstance().getCurrentMessageVolume();
    DbVolumeBlobs.addBlobReference(conn, mbox, vol, msg);
    List<BlobReference> blobs = DbVolumeBlobs.getBlobReferences(conn, vol);
    Assert.assertEquals(1, blobs.size());
    DbVolumeBlobs.deleteAllBlobRef(conn);
    blobs = DbVolumeBlobs.getBlobReferences(conn, vol);
    Assert.assertEquals(0, blobs.size());
}
Also used : BlobReference(com.zimbra.cs.store.file.BlobReference) Mailbox(com.zimbra.cs.mailbox.Mailbox) Message(com.zimbra.cs.mailbox.Message) ParsedMessage(com.zimbra.cs.mime.ParsedMessage) Volume(com.zimbra.cs.volume.Volume) ParsedMessage(com.zimbra.cs.mime.ParsedMessage) DeliveryOptions(com.zimbra.cs.mailbox.DeliveryOptions) Test(org.junit.Test)

Example 4 with BlobReference

use of com.zimbra.cs.store.file.BlobReference in project zm-mailbox by Zimbra.

the class DbVolumeBlobsTest method writeAllBlobRefs.

@Test
public void writeAllBlobRefs() throws Exception {
    Mailbox mbox = MailboxManager.getInstance().getMailboxByAccountId(MockProvisioning.DEFAULT_ACCOUNT_ID);
    DeliveryOptions opt = new DeliveryOptions();
    opt.setFolderId(Mailbox.ID_FOLDER_INBOX);
    Map<String, String> digestToPath = new HashMap<String, String>();
    Volume vol = VolumeManager.getInstance().getCurrentMessageVolume();
    for (int i = 0; i < 10; i++) {
        Message msg = mbox.addMessage(null, new ParsedMessage(("From: from" + i + "@zimbra.com\r\nTo: to1@zimbra.com").getBytes(), false), opt, null);
        digestToPath.put(msg.getDigest(), msg.getBlob().getLocalBlob().getFile().getPath());
    }
    Iterable<MailboxBlobInfo> allBlobs = null;
    allBlobs = DbMailItem.getAllBlobs(conn, mbox.getSchemaGroupId(), vol.getId(), -1, -1);
    for (MailboxBlobInfo info : allBlobs) {
        DbVolumeBlobs.addBlobReference(conn, info);
    }
    List<BlobReference> blobs = DbVolumeBlobs.getBlobReferences(conn, vol);
    Assert.assertEquals(digestToPath.size(), blobs.size());
    for (BlobReference blob : blobs) {
        String path = digestToPath.remove(blob.getDigest());
        Assert.assertNotNull(path);
        Assert.assertEquals(path, getPath(blob));
    }
    Assert.assertTrue(digestToPath.isEmpty());
}
Also used : BlobReference(com.zimbra.cs.store.file.BlobReference) Message(com.zimbra.cs.mailbox.Message) ParsedMessage(com.zimbra.cs.mime.ParsedMessage) HashMap(java.util.HashMap) ParsedMessage(com.zimbra.cs.mime.ParsedMessage) MailboxBlobInfo(com.zimbra.cs.store.MailboxBlob.MailboxBlobInfo) Mailbox(com.zimbra.cs.mailbox.Mailbox) Volume(com.zimbra.cs.volume.Volume) DeliveryOptions(com.zimbra.cs.mailbox.DeliveryOptions) Test(org.junit.Test)

Example 5 with BlobReference

use of com.zimbra.cs.store.file.BlobReference in project zm-mailbox by Zimbra.

the class DbVolumeBlobs method fillBlobReferences.

private static List<BlobReference> fillBlobReferences(ResultSet rs) throws SQLException {
    List<BlobReference> blobs = new ArrayList<BlobReference>();
    while (rs.next()) {
        BlobReference blob = new BlobReference();
        blob.setId(rs.getLong(1));
        blob.setVolumeId(rs.getShort(2));
        blob.setMailboxId(rs.getInt(3));
        blob.setItemId(rs.getInt(4));
        blob.setRevision(rs.getInt(5));
        blob.setDigest(rs.getString(6));
        blob.setProcessed(rs.getBoolean(7));
        blobs.add(blob);
    }
    return blobs;
}
Also used : BlobReference(com.zimbra.cs.store.file.BlobReference) ArrayList(java.util.ArrayList)

Aggregations

BlobReference (com.zimbra.cs.store.file.BlobReference)10 Mailbox (com.zimbra.cs.mailbox.Mailbox)9 Volume (com.zimbra.cs.volume.Volume)9 Test (org.junit.Test)9 DeliveryOptions (com.zimbra.cs.mailbox.DeliveryOptions)7 Message (com.zimbra.cs.mailbox.Message)7 ParsedMessage (com.zimbra.cs.mime.ParsedMessage)7 MailboxBlobInfo (com.zimbra.cs.store.MailboxBlob.MailboxBlobInfo)4 HashMap (java.util.HashMap)4 Document (com.zimbra.cs.mailbox.Document)2 ParsedDocument (com.zimbra.cs.mime.ParsedDocument)2 ByteArrayInputStream (java.io.ByteArrayInputStream)2 InputStream (java.io.InputStream)2 HashSet (java.util.HashSet)2 Account (com.zimbra.cs.account.Account)1 File (java.io.File)1 ArrayList (java.util.ArrayList)1