Skip to content

Commit

Permalink
relax collision detection policy to allow collisions between deprecat…
Browse files Browse the repository at this point in the history
…ed namespaces and attributes ro deprecated attributes and namespaces
  • Loading branch information
lmolkova committed Dec 2, 2024
1 parent 0edb9e2 commit 4577ea7
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
20 changes: 15 additions & 5 deletions policies/attribute_name_collisions.rego
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import rego.v1
attribute_names := { obj |
group := input.groups[_];
attr := group.attributes[_];
obj := { "name": attr.name, "const_name": to_const_name(attr.name), "namespace_prefix": to_namespace_prefix(attr.name) }
obj := { "name": attr.name, "const_name": to_const_name(attr.name), "namespace_prefix": to_namespace_prefix(attr.name), "deprecated": get_or_null(attr, "deprecated") }
}

# check that attribute constant names do not collide
Expand All @@ -29,11 +29,17 @@ deny contains attr_registry_collision(description, name) if {
# check that attribute names do not collide with namespaces
deny contains attr_registry_collision(description, name) if {
some i

# ignore deprecated attributes
attribute_names[i].deprecated == null

name := attribute_names[i].name
prefix := attribute_names[i].namespace_prefix
not excluded_namespace_collisions[name]

collisions := [other.name |
other := attribute_names[_]
other.deprecated == null

other.name != name
startswith(other.name, prefix)
]
Expand Down Expand Up @@ -72,13 +78,17 @@ to_const_name(name) = const_name if {
const_name := replace(name, ".", "_")
}

# These lists contain exceptions for existing collisions that were introduced unintentionally.
get_or_null(obj, key) = value if {
value := obj[key]
} else = null if {
not obj[key]
}

# This list contain exceptions for existing collisions that were introduced unintentionally.
# We'll have a way to specify how collision resolution happens in the schema -
# see phase 2 in https://github.com/open-telemetry/semantic-conventions/issues/1118#issuecomment-2173803006
# For now we'll exclude existing collisions from the checks.
# ADDING NEW EXCEPTIONS IS NOT ALLOWED.

# DO NOT ADD ATTRIBUTES TO THIS LIST
excluded_const_collisions := {"messaging.client_id"}
# DO NOT ADD ATTRIBUTES TO THIS LIST
excluded_namespace_collisions := {"messaging.operation", "db.operation", "deployment.environment"}
12 changes: 12 additions & 0 deletions policies_test/attribute_name_collisions_test.rego
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,15 @@ test_fails_on_namespace_collision if {
]}
count(deny) == 1 with input as collision
}

test_does_not_fail_on_deprecated_namespace_collision if {
collision := {"groups": [
{"id": "test1", "attributes": [{"name": "test.namespace.id"}]},
{"id": "test2", "attributes": [{"name": "test.namespace", "deprecated": "replaced by foo.bar.baz"}]},

{"id": "test3", "attributes": [{"name": "another_test.namespace.id", "deprecated": "replaced by another_test.namespace"}]},
{"id": "test4", "attributes": [{"name": "another_test.namespace"}]},
]}
count(deny) == 0 with input as collision
}

0 comments on commit 4577ea7

Please sign in to comment.