Skip to content

Commit

Permalink
Revert "MB-61201 Disable indexing guardrails"
Browse files Browse the repository at this point in the history
This reverts commit 4bce9cd.

Indexing guardrails were originally merged in trinity, targeted for
7.6.2, but they are now targeted for 7.6.3, so they were disabled in
the trinity (7.6.2).

They will likely eventually be re-enabled in 7.6.3, but for now they
should be re-enabled in master, so allow indexing to test against them,
until the trinity branch becomes 7.6.3 and we can backport the change
(if indexing guardrails are ready for 7.6.3).

Change-Id: I731197097fb2edca121b6a47ebe8ada83e760d94
Reviewed-on: https://review.couchbase.org/c/ns_server/+/209685
Well-Formed: Build Bot <build@couchbase.com>
Reviewed-by: Steve Watanabe <steve.watanabe@couchbase.com>
Tested-by: Peter Searby <peter.searby@couchbase.com>
  • Loading branch information
Peter-Searby committed May 9, 2024
1 parent 7641d1f commit 52792a7
Show file tree
Hide file tree
Showing 3 changed files with 210 additions and 6 deletions.
63 changes: 60 additions & 3 deletions apps/ns_server/src/menelaus_web_guardrails.erl
Expand Up @@ -83,13 +83,51 @@ params() ->
{"bucket.collectionsPerQuota.maximum",
#{type => {num, 0, infinity},
cfg_key => [collections_per_quota, maximum]}},
%% Index service resident ratio configuration
{"index.indexCreationRR.enabled",
#{type => bool,
cfg_key => [metakv, index, index_creation_rr, enabled]}},
{"index.indexCreationRR.minimum",
#{type => {num, 0, 100},
cfg_key => [metakv, index, index_creation_rr, minimum]}},
{"index.topologyChangeRR.enabled",
#{type => bool,
cfg_key => [metakv, index, topology_change_rr, enabled]}},
{"index.topologyChangeRR.minimum",
#{type => {num, 0, 100},
cfg_key => [metakv, index, topology_change_rr, minimum]}},
{"index.indexGrowthRR.enabled",
#{type => bool,
cfg_key => [index, index_growth_rr, enabled]}},
{"index.indexGrowthRR.critical",
#{type => {num, 0, 100},
cfg_key => [index, index_growth_rr, critical]}},
{"index.indexGrowthRR.serious",
#{type => {num, 0, 100},
cfg_key => [index, index_growth_rr, serious]}},
{"index.indexGrowthRR.warning",
#{type => {num, 0, 100},
cfg_key => [index, index_growth_rr, warning]}},
%% Index service overhead configuration
{"index.indexOverheadPerNode.enabled",
#{type => bool,
cfg_key => [metakv, index, index_overhead_per_node, enabled]}},
{"index.indexOverheadPerNode.maximum",
#{type => {num, 0, infinity},
cfg_key => [metakv, index, index_overhead_per_node, maximum]}},
%% Max disk usage % per node
{"diskUsage.enabled",
#{type => bool,
cfg_key => [disk_usage, enabled]}},
{"diskUsage.maximum",
#{type => {num, 0, 100},
cfg_key => [disk_usage, maximum]}},
{"diskUsage.critical",
#{type => {num, 0, 100},
cfg_key => [disk_usage, critical]}},
{"diskUsage.serious",
#{type => {num, 0, 100},
cfg_key => [disk_usage, serious]}},
%% Min number of cores per node per bucket
{"coresPerBucket.enabled",
#{type => bool,
Expand Down Expand Up @@ -131,15 +169,22 @@ raw_default_for_ns_config() ->
{magma_maximum, 16}]}
]},
{index,
[]},
%% Resident ratio percentage minimum
[{index_growth_rr,
[{enabled, false},
{warning, 15},
{serious, 12.5},
{critical, 10}]}]},
%% Minimum cores required per bucket
{cores_per_bucket,
[{enabled, false},
{minimum, 0.4}]},
%% Max disk usage % per node
{disk_usage,
[{enabled, false},
{maximum, 96}]},
{maximum, 96},
{critical, 85},
{serious, 80}]},
%% Max no. of collections per bucket quota in MB
{collections_per_quota,
[{enabled, false},
Expand All @@ -152,7 +197,19 @@ raw_default_for_metakv() ->
[
%% Index service resources
{index,
[]}
%% Minimum estimated resident ratio percentage to permit index creation
[{index_creation_rr,
[{enabled, false},
{minimum, 10}]},
%% Minimum resident ratio that a topology change must not breach
{topology_change_rr,
[{enabled, false},
{minimum, 10}]},
%% max index overhead per node
{index_overhead_per_node,
[{enabled, false},
{maximum, 1}]}
]}
].

update_sub_config({[], Value}, _) ->
Expand Down
146 changes: 144 additions & 2 deletions cluster_tests/testsets/resource_management_test.py
Expand Up @@ -59,10 +59,29 @@ def get_guard_rails_test(self):
get("enabled", collections_per_quota_config)
get("maximum", collections_per_quota_config)

index_create_rr_config = testlib.get_succ(
self.cluster, "/settings/resourceManagement/index/indexCreationRR")
get("enabled", index_create_rr_config)
get("minimum", index_create_rr_config)

topology_change_rr_config = testlib.get_succ(
self.cluster, "/settings/resourceManagement/index/topologyChangeRR")
get("enabled", topology_change_rr_config)
get("minimum", topology_change_rr_config)

index_growth_rr_config = testlib.get_succ(
self.cluster, "/settings/resourceManagement/index/indexGrowthRR")
get("enabled", index_growth_rr_config)
get("critical", index_growth_rr_config)
get("serious", index_growth_rr_config)
get("warning", index_growth_rr_config)

disk_usage_config = testlib.get_succ(
self.cluster, "/settings/resourceManagement/diskUsage")
get("enabled", disk_usage_config)
get("maximum", disk_usage_config)
get("critical", disk_usage_config)
get("serious", disk_usage_config)

def set_guard_rails_json_test(self):
# Set guard rails with json
Expand All @@ -85,13 +104,35 @@ def set_guard_rails_json_test(self):
"maximum": 2
}
},
"index": {
"indexCreationRR": {
"enabled": True,
"minimum": 6
},
"topologyChangeRR": {
"enabled": True,
"minimum": 5
},
"indexOverheadPerNode": {
"enabled": True,
"maximum": 11
},
"indexGrowthRR": {
"enabled": True,
"critical": 1,
"serious": 2,
"warning": 3
}
},
"coresPerBucket": {
"enabled": True,
"minimum": 0.2
},
"diskUsage": {
"enabled": True,
"maximum": 90
"maximum": 90,
"critical": 85,
"serious": 80
}
})

Expand All @@ -111,9 +152,31 @@ def set_guard_rails_json_test(self):
assert collections_config.get("enabled") is True
assert collections_config.get("maximum") == 2

index_config = get("index", r)

index_resident_ratio_config = index_config.get("indexCreationRR")
assert index_resident_ratio_config.get("enabled") is True
assert index_resident_ratio_config.get("minimum") == 6

topology_change_config = index_config.get("topologyChangeRR")
assert topology_change_config.get("enabled") is True
assert topology_change_config.get("minimum") == 5

index_overhead_config = index_config.get("indexOverheadPerNode")
assert index_overhead_config.get("enabled") is True
assert index_overhead_config.get("maximum") == 11

index_growth_rr_config = index_config.get("indexGrowthRR")
assert index_growth_rr_config.get("enabled") is True
assert index_growth_rr_config.get("critical") == 1
assert index_growth_rr_config.get("serious") == 2
assert index_growth_rr_config.get("warning") == 3

data_disk_usage_config = get("diskUsage", r)
assert data_disk_usage_config.get("enabled") is True
assert data_disk_usage_config.get("maximum") == 90
assert data_disk_usage_config.get("critical") == 85
assert data_disk_usage_config.get("serious") == 80

cores_per_bucket_config = get("coresPerBucket", r)
assert cores_per_bucket_config.get("enabled") is True
Expand All @@ -133,10 +196,22 @@ def set_guard_rails_form_test(self):
"bucket.dataSizePerNode.magmaMaximum": 65,
"bucket.collectionsPerQuota.enabled": "false",
"bucket.collectionsPerQuota.maximum": 3,
"index.indexCreationRR.enabled": "false",
"index.indexCreationRR.minimum": 7,
"index.topologyChangeRR.enabled": "false",
"index.topologyChangeRR.minimum": 6,
"index.indexOverheadPerNode.enabled": "false",
"index.indexOverheadPerNode.maximum": 12,
"index.indexGrowthRR.enabled": "false",
"index.indexGrowthRR.critical": 2,
"index.indexGrowthRR.serious": 3,
"index.indexGrowthRR.warning": 4,
"coresPerBucket.enabled": "false",
"coresPerBucket.minimum": 0.3,
"diskUsage.enabled": "false",
"diskUsage.maximum": 91
"diskUsage.maximum": 91,
"diskUsage.critical": 86,
"diskUsage.serious": 81
})

bucket_config = get("bucket", r)
Expand All @@ -155,11 +230,33 @@ def set_guard_rails_form_test(self):
assert collections_config.get("enabled") is False
assert collections_config.get("maximum") == 3

index_config = get("index", r)

index_creation_rr_config = index_config.get("indexCreationRR")
assert index_creation_rr_config.get("enabled") is False
assert index_creation_rr_config.get("minimum") == 7

topology_change_rr_config = index_config.get("topologyChangeRR")
assert topology_change_rr_config.get("enabled") is False
assert topology_change_rr_config.get("minimum") == 6

index_overhead_config = index_config.get("indexOverheadPerNode")
assert index_overhead_config.get("enabled") is False
assert index_overhead_config.get("maximum") == 12

index_growth_rr_config = index_config.get("indexGrowthRR")
assert index_growth_rr_config.get("enabled") is False
assert index_growth_rr_config.get("critical") == 2
assert index_growth_rr_config.get("serious") == 3
assert index_growth_rr_config.get("warning") == 4

assert get("coresPerBucket", r).get("enabled") is False
assert get("coresPerBucket", r).get("minimum") == 0.3

assert get("diskUsage", r).get("enabled") is False
assert get("diskUsage", r).get("maximum") == 91
assert get("diskUsage", r).get("critical") == 86
assert get("diskUsage", r).get("serious") == 81

def set_guard_rails_path_test(self):
# Set residentRatio guard rail using path
Expand Down Expand Up @@ -201,10 +298,55 @@ def set_guard_rails_path_test(self):
data={
"enabled": "true",
"maximum": 92,
"critical": 87,
"serious": 82
})

assert get("enabled", r) is True
assert get("maximum", r) == 92
assert get("critical", r) == 87
assert get("serious", r) == 82

r = testlib.post_succ(
self.cluster, "/settings/resourceManagement/index/indexCreationRR",
json={
"enabled": True,
"minimum": 8
})
assert get("enabled", r) is True
assert get("minimum", r) == 8

r = testlib.post_succ(
self.cluster, "/settings/resourceManagement/index/topologyChangeRR",
json={
"enabled": True,
"minimum": 7
})
assert get("enabled", r) is True
assert get("minimum", r) == 7

r = testlib.post_succ(
self.cluster, "/settings/resourceManagement/index/indexGrowthRR",
json={
"enabled": True,
"critical": 3,
"serious": 4,
"warning": 5
})
assert get("enabled", r) is True
assert get("critical", r) == 3
assert get("serious", r) == 4
assert get("warning", r) == 5

r = testlib.post_succ(
self.cluster,
"/settings/resourceManagement/index/indexOverheadPerNode",
json={
"enabled": True,
"maximum": 13
})
assert get("enabled", r) is True
assert get("maximum", r) == 13


class GuardRailRestrictionTests(testlib.BaseTestSet):
Expand Down
7 changes: 6 additions & 1 deletion etc/provisioned_profile
Expand Up @@ -6,6 +6,11 @@
{[cores_per_bucket, enabled], true},
{[bucket, data_size, enabled], true},
{[disk_usage, enabled], true},
{[collections_per_quota, enabled], true}]}.
{[collections_per_quota, enabled], true},
{[index, index_growth_rr, enabled], true}]}.
{resource_management_metakv,
[{[index, index_creation_rr, enabled], true},
{[index, topology_change_rr, enabled], true},
{[index, index_overhead_per_node, enabled], true}]}.
{{n1ql, sequential_scan_disabled}, true}.
{allow_hash_migration_during_auth, true}.

0 comments on commit 52792a7

Please sign in to comment.