use of com.zimbra.cs.mailbox.Mailbox in project zm-mailbox by Zimbra.
the class DbMailItem method openConversation.
public static void openConversation(String hash, MailItem item) throws ServiceException {
Mailbox mbox = item.getMailbox();
DbConnection conn = mbox.getOperationConnection();
PreparedStatement stmt = null;
try {
String command = Db.supports(Db.Capability.REPLACE_INTO) ? "REPLACE" : "INSERT";
String mailbox_id = DebugConfig.disableMailboxGroups ? "" : "mailbox_id, ";
stmt = conn.prepareStatement(command + " INTO " + getConversationTableName(item) + "(" + mailbox_id + "hash, conv_id)" + " VALUES (" + (DebugConfig.disableMailboxGroups ? "" : "?, ") + "?, ?)");
int pos = 1;
pos = setMailboxId(stmt, mbox, pos);
stmt.setString(pos++, hash);
stmt.setInt(pos++, item.getId());
stmt.executeUpdate();
} catch (SQLException e) {
if (Db.errorMatches(e, Db.Error.DUPLICATE_ROW)) {
try {
DbPool.closeStatement(stmt);
stmt = conn.prepareStatement("UPDATE " + getConversationTableName(item) + " SET conv_id = ? WHERE " + IN_THIS_MAILBOX_AND + "hash = ?");
int pos = 1;
stmt.setInt(pos++, item.getId());
pos = setMailboxId(stmt, mbox, pos);
stmt.setString(pos++, hash);
stmt.executeUpdate();
} catch (SQLException nested) {
throw ServiceException.FAILURE("updating open conversation association for hash " + hash, nested);
}
} else {
throw ServiceException.FAILURE("writing open conversation association for hash " + hash, e);
}
} finally {
DbPool.closeStatement(stmt);
}
}
use of com.zimbra.cs.mailbox.Mailbox 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());
}
use of com.zimbra.cs.mailbox.Mailbox 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));
}
use of com.zimbra.cs.mailbox.Mailbox 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);
}
use of com.zimbra.cs.mailbox.Mailbox 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());
}
Aggregations