summaryrefslogtreecommitdiffstats
path: root/src/indexer/prepared_commit.rs
blob: 77ea073eedbd498a84bfad8f461a5c83af738b97 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
use super::IndexWriter;
use indexer::Opstamp;
use Result;

/// A prepared commit
pub struct PreparedCommit<'a> {
    index_writer: &'a mut IndexWriter,
    payload: Option<String>,
    opstamp: Opstamp,
}

impl<'a> PreparedCommit<'a> {
    pub(crate) fn new(index_writer: &'a mut IndexWriter, opstamp: Opstamp) -> PreparedCommit {
        PreparedCommit {
            index_writer,
            payload: None,
            opstamp,
        }
    }

    pub fn opstamp(&self) -> Opstamp {
        self.opstamp
    }

    pub fn set_payload(&mut self, payload: &str) {
        self.payload = Some(payload.to_string())
    }

    pub fn abort(self) -> Result<Opstamp> {
        self.index_writer.rollback()
    }

    pub fn commit(self) -> Result<Opstamp> {
        info!("committing {}", self.opstamp);
        self.index_writer
            .segment_updater()
            .commit(self.opstamp, self.payload)?;
        Ok(self.opstamp)
    }
}