summaryrefslogtreecommitdiffstats
path: root/storage/src/vespa/storage/storageserver/servicelayernode.h
blob: dabc1c979a55d7f80543eacb2d3372043f9baa5c (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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
/**
 * \class storage::ServiceLayerNode
 * \ingroup storageserver
 *
 * \brief Class for setting up a service layer node.
 */

#pragma once

#include "applicationgenerationfetcher.h"
#include "servicelayernodecontext.h"
#include "storagenode.h"
#include "vespa/vespalib/util/jsonstream.h"
#include <vespa/storage/visiting/visitormessagesessionfactory.h>
#include <vespa/storage/common/visitorfactory.h>
#include <vespa/storage/common/nodestateupdater.h>

namespace storage {

namespace spi { struct PersistenceProvider; }

class Bouncer;
class BucketManager;
class FileStorManager;

class ServiceLayerNode
        : public StorageNode,
          private VisitorMessageSessionFactory,
          private NodeStateReporter

{
    ServiceLayerNodeContext&  _context;
    spi::PersistenceProvider& _persistenceProvider;
    VisitorFactory::Map       _externalVisitors;

    Bouncer*                  _bouncer;
    BucketManager*            _bucket_manager;
    FileStorManager*          _fileStorManager;
    bool                      _init_has_been_called;

public:
    using UP = std::unique_ptr<ServiceLayerNode>;

    ServiceLayerNode(const config::ConfigUri & configUri,
                     ServiceLayerNodeContext& context,
                     BootstrapConfigs bootstrap_configs,
                     ApplicationGenerationFetcher& generationFetcher,
                     spi::PersistenceProvider& persistenceProvider,
                     const VisitorFactory::Map& externalVisitors);
    ~ServiceLayerNode() override;
    /**
     * Init must be called exactly once after construction and before destruction.
     */
    void init();

    const lib::NodeType& getNodeType() const override { return lib::NodeType::STORAGE; }

    ResumeGuard pause() override;

private:
    void report(vespalib::JsonStream &writer) const override;
    void initializeNodeSpecific() override;
    void perform_post_chain_creation_init_steps() override;
    void handleLiveConfigUpdate(const InitialGuard & initGuard) override;
    VisitorMessageSession::UP createSession(Visitor&, VisitorThread&) override;
    documentapi::Priority::Value toDocumentPriority(uint8_t storagePriority) const override;
    void createChain(IStorageChainBuilder &builder) override;
    void on_bouncer_config_changed() override;
};

} // storage