@@ -36,36 +36,28 @@ static inline Object* nextObject(Object* t)
3636D4NFilterDriver::D4NFilterDriver (Driver* _next, boost::asio::io_context& io_context) : FilterDriver(_next),
3737 io_context (io_context)
3838{
39- conn = std::make_shared<connection>(boost::asio::make_strand (io_context));
40-
4139 rgw::cache::Partition partition_info;
4240 partition_info.location = g_conf ()->rgw_d4n_l1_datacache_persistent_path ;
4341 partition_info.name = " d4n" ;
4442 partition_info.type = " read-cache" ;
4543 partition_info.size = g_conf ()->rgw_d4n_l1_datacache_size ;
46-
47- cacheDriver = new rgw::cache::SSDDriver (partition_info);
48- objDir = new rgw::d4n::ObjectDirectory (conn);
49- blockDir = new rgw::d4n::BlockDirectory (conn);
50- policyDriver = new rgw::d4n::PolicyDriver (conn, cacheDriver, " lfuda" );
44+ cacheDriver = std::make_unique<rgw::cache::SSDDriver>(partition_info);
5145}
5246
53- D4NFilterDriver::~D4NFilterDriver ()
54- {
55- // call cancel() on the connection's executor
56- boost::asio::dispatch (conn->get_executor (), [c = conn] { c->cancel (); });
57-
58- delete cacheDriver;
59- delete objDir;
60- delete blockDir;
61- delete policyDriver;
62- }
47+ D4NFilterDriver::~D4NFilterDriver () = default ;
6348
6449int D4NFilterDriver::initialize (CephContext *cct, const DoutPrefixProvider *dpp)
6550{
6651 namespace net = boost::asio;
6752 using boost::redis::config;
6853
54+ conn = std::make_shared<connection>(boost::asio::make_strand (io_context));
55+ objDir = std::make_unique<rgw::d4n::ObjectDirectory>(conn);
56+ blockDir = std::make_unique<rgw::d4n::BlockDirectory>(conn);
57+ policyDriver = std::make_unique<rgw::d4n::PolicyDriver>(conn,
58+ cacheDriver.get (),
59+ " lfuda" );
60+
6961 std::string address = cct->_conf ->rgw_d4n_address ;
7062 config cfg;
7163 cfg.addr .host = address.substr (0 , address.find (" :" ));
@@ -260,6 +252,19 @@ std::unique_ptr<Writer> D4NFilterDriver::get_atomic_writer(const DoutPrefixProvi
260252 return std::make_unique<D4NFilterWriter>(std::move (writer), this , obj, dpp, true , y);
261253}
262254
255+ void D4NFilterDriver::shutdown ()
256+ {
257+ // call cancel() on the connection's executor
258+ boost::asio::dispatch (conn->get_executor (), [c = conn] { c->cancel (); });
259+
260+ cacheDriver.reset ();
261+ objDir.reset ();
262+ blockDir.reset ();
263+ policyDriver.reset ();
264+
265+ next->shutdown ();
266+ }
267+
263268std::unique_ptr<Object::ReadOp> D4NFilterObject::get_read_op ()
264269{
265270 std::unique_ptr<ReadOp> r = next->get_read_op ();
0 commit comments