From d56d48820b621a0fa250fde7045a0fbfc6eb085a Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 1 Dec 2025 09:54:16 -0500 Subject: [PATCH 01/13] Initial entity merge specification. --- specification/entities/data-model.md | 36 ++++++++++++++++++++++++++++ specification/resource/data-model.md | 31 ++++++++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/specification/entities/data-model.md b/specification/entities/data-model.md index 907c8454b8a..f4195412c4c 100644 --- a/specification/entities/data-model.md +++ b/specification/entities/data-model.md @@ -151,6 +151,42 @@ different values, then **only** the `k8s.node` entity can reference this key Other entities (e.g., `k8s.cluster`) can report this attribute in a separate telemetry channel (e.g., entity events) where full ownership context is known. +## Merging of Entities + +Entities MAY be merged if and only if their types are the same, their +identity attributes are exactly the same AND their schema_url is the same. +This means both Entities MUST have the same identity attribute keys and +for each key, the values of the key MUST be the same. + +Here's an example algorithm that will check compatibility: + +``` +can_merge(e, e') { + e.type == e'.type && + e.schema_url == e'.schema_url && + has_same_attributes(e.identity, e'.identity) +} +``` + +When merging entities, all attributes in description are merged together, with +one entity acting as "primary" where any conficting attribute values will be +chosen from the "primary" entity. + +Here's an example algorithm that will merge: + +``` +merge(e, e') { + if can_merge(e, e') { + for attribute in e'.description { + if !e.description.contains(attribute.key) { + e.description.insert(attribute) + } + // Ignore otehrwise. + } + } +} +``` + ## Examples of Entities _This section is non-normative and is present only for the purposes of diff --git a/specification/resource/data-model.md b/specification/resource/data-model.md index 94bada584c4..afd9e232563 100644 --- a/specification/resource/data-model.md +++ b/specification/resource/data-model.md @@ -47,3 +47,34 @@ different if one contains an entity not found in the other. Some resources include raw attributes in additon to Entities. Raw attributes are considered identifying on a resource. That is, if the key-value pairs of raw attributes are different, then you can assume the resource is different. + +## Merging Resources + +Note: The current SDK specification outlines a [merge algorithm](sdk#merge). +This specification updates the algorithm to be compliant with entities. This +section will replace that section upon stabilization of entities. + +Merging resources is an action of joining together the context of observation. +That is, we can look at the resource context for a signal and *expand* that +context to include more details (see +[telescoping identity](README.md#telescoping)). As such, a merge SHOULD preserve +any identity that already existed on a Resource while adding in new identifying +information or descriptive attributes. + +### Merging Entities into a Resource + +We define the following algorithm for merging entities into an existing +resource. + +- Construct a set of existing entities on the resource, `E`. + - For each entity, `new_entity`, in priority order (highest first), + do one of the following: + - If an entity `e'` exsits in `E` with the same entity type as `new_entity`: + - Profrm a [Entity DataModel Merge](../entities/data-model.md#merging-of-entities), if applicable, otherwise ignore `new_entity`. + - Otherwise, add the entity `d'` to set `E` +- Update the Resource to use the set of entities `E`. + - If all entities within `E` have the same `schema_url`, set the + resources `schema_url` to match. + - Otherwise set the Resource `schema_url` blank. + - Remove any attribute from `Attributes` which exists in either the + description or identity of an entity in `E`. From ee98376a7f4f10591cb479c09de6424aa5dc27f9 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 1 Dec 2025 09:55:43 -0500 Subject: [PATCH 02/13] markdown toc. --- specification/entities/data-model.md | 1 + specification/resource/data-model.md | 2 ++ 2 files changed, 3 insertions(+) diff --git a/specification/entities/data-model.md b/specification/entities/data-model.md index f4195412c4c..7ccdf1be075 100644 --- a/specification/entities/data-model.md +++ b/specification/entities/data-model.md @@ -18,6 +18,7 @@ weight: 2 - [Resource and Entities](#resource-and-entities) * [Attribute Referencing Model](#attribute-referencing-model) * [Placement of Shared Descriptive Attributes](#placement-of-shared-descriptive-attributes) +- [Merging of Entities](#merging-of-entities) - [Examples of Entities](#examples-of-entities) diff --git a/specification/resource/data-model.md b/specification/resource/data-model.md index afd9e232563..c2e7e2b7955 100644 --- a/specification/resource/data-model.md +++ b/specification/resource/data-model.md @@ -13,6 +13,8 @@ weight: 2 - [Identity](#identity) +- [Merging Resources](#merging-resources) + * [Merging Entities into a Resource](#merging-entities-into-a-resource) From 1c6b4bbdca3d302814eb48b0721dc23dfa3c2075 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 1 Dec 2025 09:59:22 -0500 Subject: [PATCH 03/13] Fix lint. --- specification/entities/data-model.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/entities/data-model.md b/specification/entities/data-model.md index 7ccdf1be075..1f41b4c0dea 100644 --- a/specification/entities/data-model.md +++ b/specification/entities/data-model.md @@ -154,7 +154,7 @@ telemetry channel (e.g., entity events) where full ownership context is known. ## Merging of Entities -Entities MAY be merged if and only if their types are the same, their +Entities MAY be merged if and only if their types are the same, their identity attributes are exactly the same AND their schema_url is the same. This means both Entities MUST have the same identity attribute keys and for each key, the values of the key MUST be the same. From 287ce5b48700965a56495dc275335c7de481377d Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 1 Dec 2025 12:11:29 -0500 Subject: [PATCH 04/13] Fix spelling mistake and update note on merge algorithm. --- specification/resource/data-model.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/specification/resource/data-model.md b/specification/resource/data-model.md index c2e7e2b7955..12ec682eb1d 100644 --- a/specification/resource/data-model.md +++ b/specification/resource/data-model.md @@ -54,7 +54,8 @@ raw attributes are different, then you can assume the resource is different. Note: The current SDK specification outlines a [merge algorithm](sdk#merge). This specification updates the algorithm to be compliant with entities. This -section will replace that section upon stabilization of entities. +section will replace that section upon stabilization of entities. SDKs SHOULD +NOT update their merge algorithm until full Entity SDK support is provided. Merging resources is an action of joining together the context of observation. That is, we can look at the resource context for a signal and *expand* that @@ -72,7 +73,7 @@ resource. - For each entity, `new_entity`, in priority order (highest first), do one of the following: - If an entity `e'` exsits in `E` with the same entity type as `new_entity`: - - Profrm a [Entity DataModel Merge](../entities/data-model.md#merging-of-entities), if applicable, otherwise ignore `new_entity`. + - Perform a [Entity DataModel Merge](../entities/data-model.md#merging-of-entities), if applicable, otherwise ignore `new_entity`. - Otherwise, add the entity `d'` to set `E` - Update the Resource to use the set of entities `E`. - If all entities within `E` have the same `schema_url`, set the From 538a6973473d6b7869c8cee00e3cdb58049190e6 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 1 Dec 2025 12:25:40 -0500 Subject: [PATCH 05/13] Fix algorithm to not use d' from teh OTEP. --- specification/resource/data-model.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/resource/data-model.md b/specification/resource/data-model.md index 12ec682eb1d..010608df9f2 100644 --- a/specification/resource/data-model.md +++ b/specification/resource/data-model.md @@ -74,7 +74,7 @@ resource. do one of the following: - If an entity `e'` exsits in `E` with the same entity type as `new_entity`: - Perform a [Entity DataModel Merge](../entities/data-model.md#merging-of-entities), if applicable, otherwise ignore `new_entity`. - - Otherwise, add the entity `d'` to set `E` + - Otherwise, add the entity `new_entity` to set `E` - Update the Resource to use the set of entities `E`. - If all entities within `E` have the same `schema_url`, set the resources `schema_url` to match. From e0af885bdbcc5d73c518e0ef3350fdb662491fc0 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 15 Dec 2025 10:50:21 -0500 Subject: [PATCH 06/13] Add handling for flattening resources. --- specification/resource/data-model.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/specification/resource/data-model.md b/specification/resource/data-model.md index 010608df9f2..524a64e4c79 100644 --- a/specification/resource/data-model.md +++ b/specification/resource/data-model.md @@ -72,8 +72,9 @@ resource. - Construct a set of existing entities on the resource, `E`. - For each entity, `new_entity`, in priority order (highest first), do one of the following: - - If an entity `e'` exsits in `E` with the same entity type as `new_entity`: - - Perform a [Entity DataModel Merge](../entities/data-model.md#merging-of-entities), if applicable, otherwise ignore `new_entity`. + - If an entity `e` exists in `E` with the same entity type as `new_entity`: + - Perform an [Entity DataModel Merge](../entities/data-model.md#merging-of-entities) with `e` and `new_entity` + - Note: If unable to merge `e` and `new_entity`, then no change is made. - Otherwise, add the entity `new_entity` to set `E` - Update the Resource to use the set of entities `E`. - If all entities within `E` have the same `schema_url`, set the @@ -81,3 +82,15 @@ resource. - Otherwise set the Resource `schema_url` blank. - Remove any attribute from `Attributes` which exists in either the description or identity of an entity in `E`. +- Solve for resource flattening issues (See + [Attribute Referencing Model](../entities/data-model.md#attribute-referencing-model)). + - If, for all entities, there are now overlapping attribute keys, then nothing + is needed. + - If there is a conflict where two entities use the same attribute key, but + both have the same value, then nothing is needed. + - If there is a conflict where two entities use the same attribute key, and + one of those entities treats has the attribute in its description, then + remove this attribute from the entity's description. + - If there is a conflict where two entities use the same attribute key and + both use that attribute for the entity identity, then remove the lower + priority entity from the Resource. From 0ccf603583cf3a6d45433705c0697a5939d4eec8 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 15 Dec 2025 11:34:19 -0500 Subject: [PATCH 07/13] Fix lint issues. --- specification/resource/data-model.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/specification/resource/data-model.md b/specification/resource/data-model.md index 524a64e4c79..5c59ed5a540 100644 --- a/specification/resource/data-model.md +++ b/specification/resource/data-model.md @@ -46,20 +46,20 @@ Entity includes its own notion of identity. The identity of a resource is the set of entities contained within it. Two resources are considered different if one contains an entity not found in the other. -Some resources include raw attributes in additon to Entities. Raw attributes are -considered identifying on a resource. That is, if the key-value pairs of +Some resources include raw attributes in addition to Entities. Raw attributes +are considered identifying on a resource. That is, if the key-value pairs of raw attributes are different, then you can assume the resource is different. ## Merging Resources -Note: The current SDK specification outlines a [merge algorithm](sdk#merge). +Note: The current SDK specification outlines a [merge algorithm](sdk.md#merge). This specification updates the algorithm to be compliant with entities. This section will replace that section upon stabilization of entities. SDKs SHOULD NOT update their merge algorithm until full Entity SDK support is provided. Merging resources is an action of joining together the context of observation. That is, we can look at the resource context for a signal and *expand* that -context to include more details (see +context to include more details (see [telescoping identity](README.md#telescoping)). As such, a merge SHOULD preserve any identity that already existed on a Resource while adding in new identifying information or descriptive attributes. @@ -73,8 +73,8 @@ resource. - For each entity, `new_entity`, in priority order (highest first), do one of the following: - If an entity `e` exists in `E` with the same entity type as `new_entity`: - - Perform an [Entity DataModel Merge](../entities/data-model.md#merging-of-entities) with `e` and `new_entity` - - Note: If unable to merge `e` and `new_entity`, then no change is made. + - Perform an [Entity DataModel Merge](../entities/data-model.md#merging-of-entities) with `e` and `new_entity` + - Note: If unable to merge `e` and `new_entity`, then no change is made. - Otherwise, add the entity `new_entity` to set `E` - Update the Resource to use the set of entities `E`. - If all entities within `E` have the same `schema_url`, set the From de9dd473b6257f6751a44104410f7b69cbb63f88 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 15 Dec 2025 11:57:39 -0500 Subject: [PATCH 08/13] Add changelog. --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f146fc64ca2..5deccaa21f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,9 @@ release. ### Entities +- Define merge algorithm. + ([4768](https://github.com/open-telemetry/opentelemetry-specification/pull/4768)) + ### OpenTelemetry Protocol ### Compatibility From ec93cd1778fd2d5d6dd8a60a867d7ff6829a4996 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Tue, 27 Jan 2026 10:06:03 -0500 Subject: [PATCH 09/13] Fixes from review. --- specification/entities/data-model.md | 18 +++++++++--------- specification/resource/data-model.md | 10 ++-------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/specification/entities/data-model.md b/specification/entities/data-model.md index 1f41b4c0dea..2afc4fc1257 100644 --- a/specification/entities/data-model.md +++ b/specification/entities/data-model.md @@ -162,10 +162,10 @@ for each key, the values of the key MUST be the same. Here's an example algorithm that will check compatibility: ``` -can_merge(e, e') { - e.type == e'.type && - e.schema_url == e'.schema_url && - has_same_attributes(e.identity, e'.identity) +can_merge(current_entity, new_entity) { + current_entity.type == new_entity.type && + current_entity.schema_url == new_entity.schema_url && + has_same_attributes(current_entity.identity, new_entity.identity) } ``` @@ -176,11 +176,11 @@ chosen from the "primary" entity. Here's an example algorithm that will merge: ``` -merge(e, e') { - if can_merge(e, e') { - for attribute in e'.description { - if !e.description.contains(attribute.key) { - e.description.insert(attribute) +merge(current_entity, new_entity) { + if can_merge(current_entity, new_entity) { + for attribute in new_entity.description { + if !current_entity.description.contains(attribute.key) { + current_entity.description.insert(attribute) } // Ignore otehrwise. } diff --git a/specification/resource/data-model.md b/specification/resource/data-model.md index 5c59ed5a540..dd106270f7d 100644 --- a/specification/resource/data-model.md +++ b/specification/resource/data-model.md @@ -86,11 +86,5 @@ resource. [Attribute Referencing Model](../entities/data-model.md#attribute-referencing-model)). - If, for all entities, there are now overlapping attribute keys, then nothing is needed. - - If there is a conflict where two entities use the same attribute key, but - both have the same value, then nothing is needed. - - If there is a conflict where two entities use the same attribute key, and - one of those entities treats has the attribute in its description, then - remove this attribute from the entity's description. - - If there is a conflict where two entities use the same attribute key and - both use that attribute for the entity identity, then remove the lower - priority entity from the Resource. + - If there is a conflict where two entities use the same attribute key then + remove the lower priority entity from the Resource. From db998c83bc08b1dacd2e4cc943f56b9d59e22212 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 23 Feb 2026 12:08:49 -0500 Subject: [PATCH 10/13] Update specification/entities/data-model.md Co-authored-by: Dmitry Anoshin --- specification/entities/data-model.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/specification/entities/data-model.md b/specification/entities/data-model.md index 2afc4fc1257..4c0eed3322e 100644 --- a/specification/entities/data-model.md +++ b/specification/entities/data-model.md @@ -170,7 +170,7 @@ can_merge(current_entity, new_entity) { ``` When merging entities, all attributes in description are merged together, with -one entity acting as "primary" where any conficting attribute values will be +one entity acting as "primary" where any conflicting attribute values will be chosen from the "primary" entity. Here's an example algorithm that will merge: From 3a829999272f62bf9967cdd789e8efe55c07c557 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 2 Mar 2026 20:29:53 +0000 Subject: [PATCH 11/13] Fixes from review. Add examples, clarify some sections. --- specification/entities/data-model.md | 6 +- specification/resource/data-model.md | 104 +++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 1 deletion(-) diff --git a/specification/entities/data-model.md b/specification/entities/data-model.md index 4c0eed3322e..09c570dd85d 100644 --- a/specification/entities/data-model.md +++ b/specification/entities/data-model.md @@ -182,12 +182,16 @@ merge(current_entity, new_entity) { if !current_entity.description.contains(attribute.key) { current_entity.description.insert(attribute) } - // Ignore otehrwise. + // Ignore otherwise. } } } ``` +Note: If Entities have different `schema_url`s, they SHOULD be converted to the +same schema version (if possible) before attempting a merge. The merge algorithm +defined here assumes the entities are already at the same schema version. + ## Examples of Entities _This section is non-normative and is present only for the purposes of diff --git a/specification/resource/data-model.md b/specification/resource/data-model.md index dd106270f7d..287e825a551 100644 --- a/specification/resource/data-model.md +++ b/specification/resource/data-model.md @@ -88,3 +88,107 @@ resource. is needed. - If there is a conflict where two entities use the same attribute key then remove the lower priority entity from the Resource. + +#### Examples + +_These examples demonstrate how conflicts are resolved during a merge._ + +##### Example 1: Entity replaces loose attribute + +The conflict between loose attributes and those belonging to an entity. Here when entity is added it removes previous attributes. + +**Initial Resource:** +- Entities: _None_ +- Attributes: + - `host.name`: `"old-name"` + - `env`: `"prod"` + +**Entities to Merge (by priority):** +1. `host` + - type: `"host"` + - identity: + - `host.id`: `"H1"` + - description: + - `host.name`: `"new-name"` +2. `service` + - type: `"service"` + - identity: + - `service.name`: `"my-svc"` + +**Resulting Resource:** +- Entities: + - `host` + - type: `"host"` + - identity: + - `host.id`: `"H1"` + - description: + - `host.name`: `"new-name"` + - `service` + - type: `"service"` + - identity: + - `service.name`: `"my-svc"` +- Attributes: + - `env`: `"prod"` + +##### Example 2: Loose attribute replaces entity attribute + +The conflict between loose attributes and those belonging to an entity. Here when the loose attribute is added, the entity must be removed due to conflict. + +**Initial Resource:** +- Entities: + - `host` + - type: `"host"` + - identity: + - `host.id`: `"H1"` + - description: + - `host.name`: `"detected-name"` +- Attributes: _None_ + +**Resource to Merge:** +- Entities: _None_ +- Attributes: + - `host.id`: `"h2"` + - `env`: `"prod"` + +**Resulting Resource:** +- Entities: _None_ +- Attributes: + - `host.id`: `"h2"` + - `env`: `"prod"` + +##### Example 3: Identity & Attribute Conflicts + +Reject an entity with a different identity of the same type, and drop a lower priority entity due to an attribute key conflict. + +**Initial Resource:** +- Entities: + - `host` + - type: `"host"` + - identity: + - `host.id`: `"H1"` + - description: + - `env`: `"prod"` +- Attributes: _None_ + +**Entities to Merge (by priority):** +1. `host` + - type: `"host"` + - identity: + - `host.id`: `"H2"` +2. `service` + - type: `"service"` + - identity: + - `service.name`: `"S1"` + - description: + - `env`: `"dev"` + +**Resulting Resource:** +- Entities: + - `host` + - type: `"host"` + - identity: + - `host.id`: `"H1"` + - description: + - `env`: `"prod"` +- Attributes: _None_ + From ef2bbb49ee36758e93e5aef3ba14b47a109d6185 Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 20 Apr 2026 13:35:19 +0000 Subject: [PATCH 12/13] Address PR comments. --- specification/entities/data-model.md | 6 ++---- specification/resource/data-model.md | 14 +++++++++++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/specification/entities/data-model.md b/specification/entities/data-model.md index 93e2f8a5413..9bbb4e95be0 100644 --- a/specification/entities/data-model.md +++ b/specification/entities/data-model.md @@ -179,10 +179,8 @@ Here's an example algorithm that will merge: merge(current_entity, new_entity) { if can_merge(current_entity, new_entity) { for attribute in new_entity.description { - if !current_entity.description.contains(attribute.key) { - current_entity.description.insert(attribute) - } - // Ignore otherwise. + // New entity descriptions take precedence. + current_entity.description.insert(attribute) } } } diff --git a/specification/resource/data-model.md b/specification/resource/data-model.md index e7077718c46..b3460ec3ac3 100644 --- a/specification/resource/data-model.md +++ b/specification/resource/data-model.md @@ -91,6 +91,10 @@ resource. - If there is a conflict where two entities use the same attribute key then remove the lower priority entity from the Resource. +__Note__: Priority of entity merging is generally chosen implicitly by user +configuration, e.g. the order of Resource Detectors configured for an SDK +implicitly create an order of priority for merging entities. + #### Examples _These examples demonstrate how conflicts are resolved during a merge._ @@ -144,6 +148,10 @@ The conflict between loose attributes and those belonging to an entity. Here whe - `host.id`: `"H1"` - description: - `host.name`: `"detected-name"` + - `process` + - type: `"process"` + - identity: + - `process.pid`: `12345` - Attributes: _None_ **Resource to Merge:** @@ -153,7 +161,11 @@ The conflict between loose attributes and those belonging to an entity. Here whe - `env`: `"prod"` **Resulting Resource:** -- Entities: _None_ +- Entities: + - `process` + - type: `"process"` + - identity: + - `process.pid`: `12345` - Attributes: - `host.id`: `"h2"` - `env`: `"prod"` From 754a9ff54a2f0e4b0bb3609ee9d1287d8340de7f Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Mon, 20 Apr 2026 14:13:31 +0000 Subject: [PATCH 13/13] Fix markdown lint issues. --- specification/resource/data-model.md | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/specification/resource/data-model.md b/specification/resource/data-model.md index b3460ec3ac3..f77bafcef5c 100644 --- a/specification/resource/data-model.md +++ b/specification/resource/data-model.md @@ -91,25 +91,27 @@ resource. - If there is a conflict where two entities use the same attribute key then remove the lower priority entity from the Resource. -__Note__: Priority of entity merging is generally chosen implicitly by user +**Note**: Priority of entity merging is generally chosen implicitly by user configuration, e.g. the order of Resource Detectors configured for an SDK implicitly create an order of priority for merging entities. #### Examples -_These examples demonstrate how conflicts are resolved during a merge._ +*These examples demonstrate how conflicts are resolved during a merge.* ##### Example 1: Entity replaces loose attribute The conflict between loose attributes and those belonging to an entity. Here when entity is added it removes previous attributes. **Initial Resource:** -- Entities: _None_ + +- Entities: *None* - Attributes: - `host.name`: `"old-name"` - `env`: `"prod"` **Entities to Merge (by priority):** + 1. `host` - type: `"host"` - identity: @@ -122,6 +124,7 @@ The conflict between loose attributes and those belonging to an entity. Here whe - `service.name`: `"my-svc"` **Resulting Resource:** + - Entities: - `host` - type: `"host"` @@ -141,6 +144,7 @@ The conflict between loose attributes and those belonging to an entity. Here whe The conflict between loose attributes and those belonging to an entity. Here when the loose attribute is added, the entity must be removed due to conflict. **Initial Resource:** + - Entities: - `host` - type: `"host"` @@ -152,15 +156,17 @@ The conflict between loose attributes and those belonging to an entity. Here whe - type: `"process"` - identity: - `process.pid`: `12345` -- Attributes: _None_ +- Attributes: *None* **Resource to Merge:** -- Entities: _None_ + +- Entities: *None* - Attributes: - `host.id`: `"h2"` - `env`: `"prod"` **Resulting Resource:** + - Entities: - `process` - type: `"process"` @@ -175,6 +181,7 @@ The conflict between loose attributes and those belonging to an entity. Here whe Reject an entity with a different identity of the same type, and drop a lower priority entity due to an attribute key conflict. **Initial Resource:** + - Entities: - `host` - type: `"host"` @@ -182,9 +189,10 @@ Reject an entity with a different identity of the same type, and drop a lower pr - `host.id`: `"H1"` - description: - `env`: `"prod"` -- Attributes: _None_ +- Attributes: *None* **Entities to Merge (by priority):** + 1. `host` - type: `"host"` - identity: @@ -197,6 +205,7 @@ Reject an entity with a different identity of the same type, and drop a lower pr - `env`: `"dev"` **Resulting Resource:** + - Entities: - `host` - type: `"host"` @@ -204,5 +213,4 @@ Reject an entity with a different identity of the same type, and drop a lower pr - `host.id`: `"H1"` - description: - `env`: `"prod"` -- Attributes: _None_ - +- Attributes: *None*