aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src/vespa/searchcore/proton/server/job_tracked_maintenance_job.h
blob: 9210017d28d1fd0816124405c97a93d324dc4465 (plain) (blame)
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
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#pragma once

#include "i_maintenance_job.h"
#include <vespa/searchcore/proton/metrics/i_job_tracker.h>

namespace proton {

/**
 * Class for tracking the start and end of a maintenance job.
 */
class JobTrackedMaintenanceJob final : public IMaintenanceJob
{
private:
    std::shared_ptr<IJobTracker>  _tracker;
    IMaintenanceJob::SP           _job;
    bool                          _running;

public:
    JobTrackedMaintenanceJob(std::shared_ptr<IJobTracker> tracker, IMaintenanceJob::SP job);
    JobTrackedMaintenanceJob(const JobTrackedMaintenanceJob &) = delete;
    JobTrackedMaintenanceJob & operator = (const JobTrackedMaintenanceJob &) = delete;
    ~JobTrackedMaintenanceJob() override;

    bool isBlocked() const override { return _job->isBlocked(); }
    IBlockableMaintenanceJob *asBlockable() override { return _job->asBlockable(); }
    void registerRunner(IMaintenanceJobRunner *runner) override {
        _job->registerRunner(runner);
    }
    bool run() override;
    void onStop() override { _job->stop(); }
};

} // namespace proton