summaryrefslogtreecommitdiffstats
path: root/veslibrary/ves_cpplibrary/src/lib/transport/XDiskQueue.h
blob: 2168a58e76496d8f3824390421e7b19a8c279021 (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
#pragma once

#include "XQueue.h"
#include "leveldb/db.h"
#include <atomic>
#include <chrono>

namespace vagt
{
    namespace queue
    {
        class XDiskQueue : public XQueue
        {
        public:
            XDiskQueue(const std::string& path);
            ~XDiskQueue();
            virtual bool empty() override;
            virtual XErrorCode push(const std::string & val) override;
            virtual void pop() override;
            virtual std::string front() override;
        private:
            std::string createKey();
            void tryCompact(const std::string& key);

            std::atomic<long> keyId_;
            char key[32];
            std::chrono::system_clock::time_point compactTime_;

            leveldb::DB* db_;
            leveldb::ReadOptions opt_;
            leveldb::Iterator* it_;
        };
    }
}