1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_JOURNAL_JOURNAL_TRIMMER_H
5 #define CEPH_JOURNAL_JOURNAL_TRIMMER_H
7 #include "include/int_types.h"
8 #include "include/rados/librados.hpp"
9 #include "include/Context.h"
10 #include "common/AsyncOpTracker.h"
11 #include "journal/JournalMetadata.h"
12 #include "cls/journal/cls_journal_types.h"
19 class JournalTrimmer
{
21 typedef cls::journal::ObjectSetPosition ObjectSetPosition
;
23 JournalTrimmer(librados::IoCtx
&ioctx
, const std::string
&object_oid_prefix
,
24 const ceph::ref_t
<JournalMetadata
> &journal_metadata
);
27 void shut_down(Context
*on_finish
);
29 void remove_objects(bool force
, Context
*on_finish
);
30 void committed(uint64_t commit_tid
);
33 typedef std::function
<Context
*()> CreateContext
;
35 struct MetadataListener
: public JournalMetadataListener
{
36 JournalTrimmer
*journal_trimmer
;
38 MetadataListener(JournalTrimmer
*journal_trimmer
)
39 : journal_trimmer(journal_trimmer
) {
41 void handle_update(JournalMetadata
*) override
{
42 journal_trimmer
->handle_metadata_updated();
46 struct C_CommitPositionSafe
: public Context
{
47 JournalTrimmer
*journal_trimmer
;
49 C_CommitPositionSafe(JournalTrimmer
*_journal_trimmer
)
50 : journal_trimmer(_journal_trimmer
) {
51 journal_trimmer
->m_async_op_tracker
.start_op();
53 ~C_CommitPositionSafe() override
{
54 journal_trimmer
->m_async_op_tracker
.finish_op();
57 void finish(int r
) override
{
63 librados::IoCtx m_ioctx
;
65 std::string m_object_oid_prefix
;
67 ceph::ref_t
<JournalMetadata
> m_journal_metadata
;
68 MetadataListener m_metadata_listener
;
70 AsyncOpTracker m_async_op_tracker
;
72 ceph::mutex m_lock
= ceph::make_mutex("JournalTrimmer::m_lock");
74 bool m_remove_set_pending
;
75 uint64_t m_remove_set
;
76 Context
*m_remove_set_ctx
;
78 bool m_shutdown
= false;
80 CreateContext m_create_commit_position_safe_context
= [this]() {
81 return new C_CommitPositionSafe(this);
84 void trim_objects(uint64_t minimum_set
);
85 void remove_set(uint64_t object_set
);
87 void handle_metadata_updated();
88 void handle_set_removed(int r
, uint64_t object_set
);
91 } // namespace journal
93 #endif // CEPH_JOURNAL_JOURNAL_TRIMMER_H