Search in sources :

Example 6 with Volume

use of com.zimbra.cs.volume.Volume in project zm-mailbox by Zimbra.

the class DbVolumeBlobsTest method testIncrementalBlobs.

@Test
public void testIncrementalBlobs() throws Exception {
    Mailbox mbox = MailboxManager.getInstance().getMailboxByAccountId(MockProvisioning.DEFAULT_ACCOUNT_ID);
    DeliveryOptions opt = new DeliveryOptions();
    opt.setFolderId(Mailbox.ID_FOLDER_INBOX);
    int ts1 = (int) (System.currentTimeMillis() / 1000);
    Message msg1 = mbox.addMessage(null, new ParsedMessage("From: from1@zimbra.com\r\nTo: to1@zimbra.com".getBytes(), false), opt, null);
    Thread.sleep(1000);
    int ts2 = (int) (System.currentTimeMillis() / 1000);
    Message msg2 = mbox.addMessage(null, new ParsedMessage("From: from1@zimbra.com\r\nTo: to1@zimbra.com".getBytes(), false), opt, null);
    Thread.sleep(1000);
    int ts3 = (int) (System.currentTimeMillis() / 1000);
    Iterable<MailboxBlobInfo> allBlobs = null;
    Volume vol = VolumeManager.getInstance().getCurrentMessageVolume();
    allBlobs = DbMailItem.getAllBlobs(conn, mbox.getSchemaGroupId(), vol.getId(), ts1, ts2);
    Assert.assertEquals(msg1.getId(), allBlobs.iterator().next().itemId);
    allBlobs = DbMailItem.getAllBlobs(conn, mbox.getSchemaGroupId(), vol.getId(), ts2, ts3);
    Assert.assertEquals(msg2.getId(), allBlobs.iterator().next().itemId);
}
Also used : 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) MailboxBlobInfo(com.zimbra.cs.store.MailboxBlob.MailboxBlobInfo) Test(org.junit.Test)

Example 7 with Volume

use of com.zimbra.cs.volume.Volume 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 8 with Volume

use of com.zimbra.cs.volume.Volume 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 9 with Volume

use of com.zimbra.cs.volume.Volume in project zm-mailbox by Zimbra.

the class GetCurrentVolumes method handle.

private GetCurrentVolumesResponse handle(@SuppressWarnings("unused") GetCurrentVolumesRequest req, Map<String, Object> ctx) throws ServiceException {
    ZimbraSoapContext zsc = getZimbraSoapContext(ctx);
    checkRight(zsc, ctx, Provisioning.getInstance().getLocalServer(), Admin.R_manageVolume);
    GetCurrentVolumesResponse resp = new GetCurrentVolumesResponse();
    VolumeManager mgr = VolumeManager.getInstance();
    Volume msgVol = mgr.getCurrentMessageVolume();
    if (msgVol != null) {
        resp.addVolume(new GetCurrentVolumesResponse.CurrentVolumeInfo(msgVol.getId(), msgVol.getType()));
    }
    Volume secondaryMsgVol = mgr.getCurrentSecondaryMessageVolume();
    if (secondaryMsgVol != null) {
        resp.addVolume(new GetCurrentVolumesResponse.CurrentVolumeInfo(secondaryMsgVol.getId(), secondaryMsgVol.getType()));
    }
    Volume indexVol = mgr.getCurrentIndexVolume();
    if (indexVol != null) {
        resp.addVolume(new GetCurrentVolumesResponse.CurrentVolumeInfo(indexVol.getId(), indexVol.getType()));
    }
    return resp;
}
Also used : VolumeManager(com.zimbra.cs.volume.VolumeManager) Volume(com.zimbra.cs.volume.Volume) ZimbraSoapContext(com.zimbra.soap.ZimbraSoapContext) GetCurrentVolumesResponse(com.zimbra.soap.admin.message.GetCurrentVolumesResponse)

Example 10 with Volume

use of com.zimbra.cs.volume.Volume in project zm-mailbox by Zimbra.

the class TestDocumentServer method cleanUp.

private void cleanUp() throws Exception {
    // Restore volume compression settings.
    VolumeManager mgr = VolumeManager.getInstance();
    Volume current = mgr.getCurrentMessageVolume();
    Volume vol = Volume.builder(current).setCompressBlobs(mOriginalCompressBlobs).setCompressionThreshold(mOriginalCompressionThreshold).build();
    mgr.update(vol);
}
Also used : VolumeManager(com.zimbra.cs.volume.VolumeManager) Volume(com.zimbra.cs.volume.Volume)

Aggregations

Volume (com.zimbra.cs.volume.Volume)36 Mailbox (com.zimbra.cs.mailbox.Mailbox)17 Test (org.junit.Test)14 DeliveryOptions (com.zimbra.cs.mailbox.DeliveryOptions)11 ParsedMessage (com.zimbra.cs.mime.ParsedMessage)11 Message (com.zimbra.cs.mailbox.Message)10 BlobReference (com.zimbra.cs.store.file.BlobReference)9 MailboxBlobInfo (com.zimbra.cs.store.MailboxBlob.MailboxBlobInfo)7 VolumeManager (com.zimbra.cs.volume.VolumeManager)7 ZimbraSoapContext (com.zimbra.soap.ZimbraSoapContext)7 File (java.io.File)5 HashMap (java.util.HashMap)5 StoreManager (com.zimbra.cs.store.StoreManager)3 FileBlobStore (com.zimbra.cs.store.file.FileBlobStore)3 ByteArrayInputStream (java.io.ByteArrayInputStream)3 IOException (java.io.IOException)3 ArrayList (java.util.ArrayList)3 DbConnection (com.zimbra.cs.db.DbPool.DbConnection)2 Document (com.zimbra.cs.mailbox.Document)2 ParsedDocument (com.zimbra.cs.mime.ParsedDocument)2