summaryrefslogtreecommitdiffstats
path: root/ydb/core/cms/console/modifications_validator.h
blob: 17a53eaee796632e069a2d0c4071652edbc58d07 (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
#pragma once

#include "config_index.h"
#include "configs_config.h"

namespace NKikimr::NConsole {

class TModificationsValidatorTests;

class TModificationsValidator {
public:
    TModificationsValidator(const TConfigIndex &index,
                            const TConfigModifications &diff,
                            const TConfigsConfig &config);

    bool ApplyValidators();

    const TVector<Ydb::Issue::IssueMessage> &GetIssues() const;
    const TString &GetErrorMessage() const;
    ui64 GetChecksDone() const;

    THashSet<TTenantAndNodeType> ComputeAffectedConfigs(const TDynBitMap &kinds,
                                                        bool requireCheck) const;
    void BuildConfigs(const TDynBitMap &kinds,
                      const TString &tenant,
                      const TString &nodeType,
                      NKikimrConfig::TAppConfig &oldConfig,
                      NKikimrConfig::TAppConfig &newConfig) const;

private:
    void BuildConfigIndexForValidation();
    TConfigModifications BuildModificationsForValidation(const TConfigModifications &diff);
    void CollectModifiedItems(const TConfigModifications &diff);

    bool IsValidationRequired(TConfigItem::TPtr item) const;

    void ValidateModifications();
    bool ValidateConfigs(const TDynBitMap &kinds);
    bool ValidateConfig(const TDynBitMap &kinds,
                        const TString &tenant,
                        const TString &nodeType);
    void ExtractErrorMessage();
    void AddLimitExceededIssue();

    TConfigIndex Index;
    TConfigItems ModifiedItems;
    const TConfigIndex &OldIndex;

    NKikimrConsole::EValidationLevel ValidationLevel;
    ui64 ChecksLimit;
    bool FailOnExceededChecksLimit;
    bool TreatWarningAsError;

    bool Validated;
    bool ValidationResult;
    TString Error;
    TVector<Ydb::Issue::IssueMessage> Issues;
    ui64 ChecksDone;

    friend class TModificationsValidatorTests;
};

} // namespace NKikimr::NConsole