blob: 4a5c2e37bb34959ae7f4a01de8ef926386206c9d (
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
73
74
75
|
// 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;
// FIXME: Should probably use the fetcher in StorageNode
std::unique_ptr<config::ConfigFetcher> _configFetcher;
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,
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 subscribeToConfigs() 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 removeConfigSubscriptions() override;
void on_bouncer_config_changed() override;
};
} // storage
|