diff --git a/agent/src/main/scala/za/co/absa/atum/agent/AtumContext.scala b/agent/src/main/scala/za/co/absa/atum/agent/AtumContext.scala index 177c27936..501d805a3 100644 --- a/agent/src/main/scala/za/co/absa/atum/agent/AtumContext.scala +++ b/agent/src/main/scala/za/co/absa/atum/agent/AtumContext.scala @@ -18,6 +18,7 @@ package za.co.absa.atum.agent import org.apache.spark.sql.DataFrame import za.co.absa.atum.agent.AtumContext.{AdditionalData, AtumPartitions} +import za.co.absa.atum.agent.exception.AtumAgentException.PartitioningUpdateException import za.co.absa.atum.agent.model._ import za.co.absa.atum.model.dto._ @@ -52,6 +53,10 @@ class AtumContext private[agent] ( * @return the sub-partition context */ def subPartitionContext(subPartitions: AtumPartitions): AtumContext = { + val overlap = atumPartitions.keys.toSet.intersect(subPartitions.keys.toSet) + if (overlap.nonEmpty) { + throw PartitioningUpdateException(s"Partition keys '$overlap' already exist. Updates are not allowed.") + } agent.getOrCreateAtumSubContext(atumPartitions ++ subPartitions)(this) } diff --git a/agent/src/main/scala/za/co/absa/atum/agent/exception/AtumAgentException.scala b/agent/src/main/scala/za/co/absa/atum/agent/exception/AtumAgentException.scala index 00196b84b..71825203c 100644 --- a/agent/src/main/scala/za/co/absa/atum/agent/exception/AtumAgentException.scala +++ b/agent/src/main/scala/za/co/absa/atum/agent/exception/AtumAgentException.scala @@ -40,4 +40,10 @@ object AtumAgentException { * @param message A message describing the exception. */ case class HttpException(statusCode: Int, message: String) extends AtumAgentException(message) + + /** + * This type represents an exception related to partitioning update. + * @param message A message describing the exception. + */ + case class PartitioningUpdateException(message: String) extends AtumAgentException(message) }