Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: Aiven-Open/guardian-for-apache-kafka
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 0845e66555ec56d7533b01443332db07524ef547
Choose a base ref
..
head repository: Aiven-Open/guardian-for-apache-kafka
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 9a41aefea74710c1ffad42b118fb3c027d426b50
Choose a head ref
10 changes: 8 additions & 2 deletions core-backup/src/main/resources/reference.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
backup {
period-slice = 1 day
period-slice = ${?BACKUP_PERIOD_TIME}
time-configuration = {
type = chrono-unit-slice
type = ${?BACKUP_TIME_CONFIGURATION_TYPE}
chrono-unit = hours
chrono-unit = ${?BACKUP_TIME_CONFIGURATION_CHRONO_UNIT}
duration = 1 hour
duration = ${?BACKUP_TIME_CONFIGURATION_DURATION}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.aiven.guardian.kafka.backup.configs

import scala.concurrent.duration.Duration
import scala.concurrent.duration.FiniteDuration

import java.time.temporal.ChronoUnit

@@ -11,7 +11,7 @@ sealed trait TimeConfiguration
* @param duration
* The maximum span of time for each object/file, when this duration is exceeded a new file is created
*/
final case class PeriodFromFirst(duration: Duration) extends TimeConfiguration
final case class PeriodFromFirst(duration: FiniteDuration) extends TimeConfiguration

/** Backs up objects/files by collecting received Kafka messages into a single time slice based on a [[ChronoUnit]].
* When suspending/resuming the backup client, this option will reuse existing objects/files if they fall into the
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package io.aiven.guardian.kafka.backup

import io.aiven.guardian.kafka.backup.configs.Backup
import io.aiven.guardian.kafka.backup.configs.ChronoUnitSlice
import io.aiven.guardian.kafka.backup.configs.PeriodFromFirst
import org.scalacheck.Arbitrary
import org.scalacheck.Gen
import org.scalatest.matchers.must.Matchers
import org.scalatest.propspec.AnyPropSpec
import org.scalatestplus.scalacheck.ScalaCheckPropertyChecks
import pureconfig.ConfigSource
import pureconfig.generic.auto._

import scala.annotation.nowarn
import scala.concurrent.duration.FiniteDuration

import java.time.temporal.ChronoUnit

class ConfigSpec extends AnyPropSpec with Matchers with ScalaCheckPropertyChecks {
implicit val chronoUnitArb: Arbitrary[ChronoUnit] = Arbitrary(
Gen.oneOf(ChronoUnit.values().toList)
)

property("Valid Backup TimeConfiguration chrono-unit-slice configs should parse correctly") {
forAll { (chronoUnit: ChronoUnit) =>
val conf =
s"""
|backup {
| time-configuration = {
| type = chrono-unit-slice
| chrono-unit = ${chronoUnit.toString.toLowerCase}
| }
|}
|""".stripMargin

@nowarn("cat=lint-byname-implicit")
val backup = ConfigSource.string(conf).at("backup").loadOrThrow[Backup]
backup mustEqual Backup(ChronoUnitSlice(chronoUnit))
}
}

property("Valid Backup TimeConfiguration period-from-first configs should parse correctly") {
forAll { (finiteDuration: FiniteDuration) =>
val conf =
s"""
|backup {
| time-configuration = {
| type = period-from-first
| duration = ${finiteDuration.toString()}
| }
|}
|""".stripMargin

@nowarn("cat=lint-byname-implicit")
val backup = ConfigSource.string(conf).at("backup").loadOrThrow[Backup]
backup mustEqual Backup(PeriodFromFirst(finiteDuration))
}
}

}