Skip to content

Commit af05c3e

Browse files
achouhan09Aayush
authored andcommitted
Created new functions for priority
Signed-off-by: Aayush Chouhan <achouhan@redhat.com>
1 parent 57a9683 commit af05c3e

File tree

1 file changed

+56
-32
lines changed

1 file changed

+56
-32
lines changed

src/util/lifecycle_utils.js

Lines changed: 56 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -72,56 +72,37 @@ function file_matches_filter({obj_info, filter_func = undefined}) {
7272
/**
7373
* get_lifecycle_rule_for_object determines the most specific matching lifecycle rule for the given object metadata
7474
*
75-
* priority is based on:
76-
* - longest matching prefix
77-
* - most matching tags
78-
* - narrowest object size range
79-
*
8075
* @param {Array<Object>} rules
8176
* @param {Object} object_info
8277
* @returns {Object|undefined}
8378
*/
8479
function get_lifecycle_rule_for_object(rules, object_info) {
80+
if (!object_info?.key || !Array.isArray(rules) || rules.length < 1) return;
81+
8582
let matched_rule;
86-
let rule_priority = {
83+
let curr_priority = {
8784
prefix_len: -1,
8885
tag_count: -1,
8986
size_span: Infinity,
9087
};
91-
if (object_info?.key && rules?.length > 0) {
92-
for (const rule of rules) {
93-
if (rule?.status !== 'Enabled') continue;
94-
95-
const filter = rule?.filter || {};
9688

97-
const filter_func = build_lifecycle_filter(filter);
89+
for (const rule of rules) {
90+
if (rule?.status !== 'Enabled') continue;
9891

99-
if (!filter_func(object_info)) { continue; }
92+
const filter = rule?.filter || {};
10093

101-
const priority = {
102-
prefix_len: (filter?.prefix || '').length,
103-
tag_count: Array.isArray(filter?.tags) ? filter?.tags.length : 0,
104-
size_span: (filter?.object_size_less_than ?? Infinity) - (filter?.object_size_greater_than ?? 0)
105-
};
94+
const filter_func = build_lifecycle_filter(filter);
10695

107-
// compare prefix length
108-
const is_more_specific_prefix = priority.prefix_len > rule_priority.prefix_len;
96+
if (!filter_func(object_info)) { continue; }
10997

110-
// compare tag count (if prefixes are equal)
111-
const is_more_specific_tags = priority.prefix_len === rule_priority.prefix_len &&
112-
priority.tag_count > rule_priority.tag_count;
98+
const new_priority = get_rule_priority(filter);
11399

114-
// compare size span (if prefixes and tags are equal)
115-
const is_more_specific_size = priority.prefix_len === rule_priority.prefix_len &&
116-
priority.tag_count === rule_priority.tag_count &&
117-
priority.size_span < rule_priority.size_span;
118-
119-
if (is_more_specific_prefix || is_more_specific_tags || is_more_specific_size) {
120-
matched_rule = rule;
121-
rule_priority = priority;
122-
}
100+
if (compare_rule_priority(curr_priority, new_priority)) {
101+
matched_rule = rule;
102+
curr_priority = new_priority;
123103
}
124104
}
105+
125106
return matched_rule;
126107
}
127108

@@ -180,6 +161,49 @@ function build_lifecycle_filter(params) {
180161
};
181162
}
182163

164+
/**
165+
* get_rule_priority calculates the priority of a lifecycle rule's filter
166+
*
167+
* @param {Object} filter
168+
* @returns {Object} priority object
169+
*/
170+
function get_rule_priority(filter) {
171+
return {
172+
prefix_len: (filter?.prefix || '').length,
173+
tag_count: Array.isArray(filter?.tags) ? filter.tags.length : 0,
174+
size_span: (filter?.object_size_less_than ?? Infinity) - (filter?.object_size_greater_than ?? 0)
175+
};
176+
}
177+
178+
/**
179+
* compare_rule_priority determines if a new rule has higher priority
180+
*
181+
* priority is based on:
182+
* - longest matching prefix
183+
* - most matching tags
184+
* - narrowest object size range
185+
*
186+
* @param {Object} curr_priority
187+
* @param {Object} new_priority
188+
* @returns {boolean}
189+
*/
190+
function compare_rule_priority(curr_priority, new_priority) {
191+
// compare prefix length
192+
if (new_priority.prefix_len > curr_priority.prefix_len) return true;
193+
194+
if (new_priority.prefix_len === curr_priority.prefix_len) {
195+
// compare tag count (if prefixes are equal)
196+
if (new_priority.tag_count > curr_priority.tag_count) return true;
197+
198+
if (new_priority.tag_count === curr_priority.tag_count) {
199+
// compare size span (if prefixes and tags are equal)
200+
if (new_priority.size_span < curr_priority.size_span) return true;
201+
}
202+
}
203+
204+
return false;
205+
}
206+
183207
//////////////////
184208
// TAGS HELPERS //
185209
//////////////////

0 commit comments

Comments
 (0)