mail-transaction-log-private.h revision fc7b17677ac1a5fa3f7fe13d5ef7dcfea8d9b4a1
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen#ifndef __MAIL_TRANSACTION_LOG_VIEW_H
c25356d5978632df6203437e1953bcb29e0c736fTimo Sirainen#define __MAIL_TRANSACTION_LOG_VIEW_H
5ce2084ada06ade9f44fc2914c34658e9a842dc1Timo Sirainen
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen#include "file-dotlock.h"
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen#include "mail-transaction-log.h"
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen#define MAIL_TRANSACTION_LOG_ROTATE_SIZE (1024*128)
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen#define MAIL_TRANSACTION_LOG_ROTATE_TIME (60*5)
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen#define MAIL_TRANSACTION_LOG_FILE_IN_MEMORY(file) ((file)->fd == -1)
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainenstruct mail_transaction_log_file {
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen struct mail_transaction_log *log;
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen struct mail_transaction_log_file *next;
5ce2084ada06ade9f44fc2914c34658e9a842dc1Timo Sirainen
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen int refcount;
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen
e82e363e7a6917f470412d629db6c5b1f5891a35Timo Sirainen char *filepath;
e82e363e7a6917f470412d629db6c5b1f5891a35Timo Sirainen int fd;
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen ino_t st_ino;
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen dev_t st_dev;
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen time_t last_mtime;
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen uoff_t last_size;
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen buffer_t *buffer;
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen uoff_t buffer_offset;
5ce2084ada06ade9f44fc2914c34658e9a842dc1Timo Sirainen void *mmap_base;
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen size_t mmap_size;
d6c5ceea8521b92d10e51a59da00c792f6140b1dTimo Sirainen
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen struct mail_transaction_log_header hdr;
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen uoff_t sync_offset;
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen uint32_t first_append_size;
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen
2767104d81e97a109f0aa9758792bfa1da325a97Timo Sirainen unsigned int locked:1;
79fcd3f95a6266cc62ceaa753e56dd4456ab7c4bTimo Sirainen};
3ddbbe03fe74b3ee7b1dff4e08ec706d7880d052Timo Sirainen
3ddbbe03fe74b3ee7b1dff4e08ec706d7880d052Timo Sirainenstruct mail_transaction_log {
3ddbbe03fe74b3ee7b1dff4e08ec706d7880d052Timo Sirainen struct mail_index *index;
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen struct mail_transaction_log_view *views;
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen struct mail_transaction_log_file *head, *tail;
5ce2084ada06ade9f44fc2914c34658e9a842dc1Timo Sirainen
5ce2084ada06ade9f44fc2914c34658e9a842dc1Timo Sirainen unsigned int dotlock_count;
e82e363e7a6917f470412d629db6c5b1f5891a35Timo Sirainen struct dotlock_settings dotlock_settings, new_dotlock_settings;
e82e363e7a6917f470412d629db6c5b1f5891a35Timo Sirainen struct dotlock *dotlock;
e82e363e7a6917f470412d629db6c5b1f5891a35Timo Sirainen};
e82e363e7a6917f470412d629db6c5b1f5891a35Timo Sirainen
e82e363e7a6917f470412d629db6c5b1f5891a35Timo Sirainenvoid
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainenmail_transaction_log_file_set_corrupted(struct mail_transaction_log_file *file,
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainen const char *fmt, ...);
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainen
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainenint mail_transaction_log_file_find(struct mail_transaction_log *log,
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainen uint32_t file_seq,
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainen struct mail_transaction_log_file **file_r);
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainen
f339a8e73beea7684ea634941ea82593dea522eeTimo Sirainenint mail_transaction_log_file_map(struct mail_transaction_log_file *file,
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainen uoff_t start_offset, uoff_t end_offset);
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainen
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainenvoid mail_transaction_logs_clean(struct mail_transaction_log *log);
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainen
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainenint mail_transaction_log_rotate(struct mail_transaction_log *log, int lock);
defeb23b40f1c1af0535a84529383825e5ef8dfeTimo Sirainenint mail_transaction_log_lock_head(struct mail_transaction_log *log);
d10a370b2614712d9cb6a1dd8625f62a071b6377Timo Sirainenvoid mail_transaction_log_file_unlock(struct mail_transaction_log_file *file);
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen#endif
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen