Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
165b9d2
change to PowerSystemUtils:1.6-SNAPSHOT
larslenssen Dec 3, 2021
df6d8f7
Add Pattern Interaction to InputDataProvider.scala
larslenssen Dec 3, 2021
514d8b9
Add Init(cfg) Reply
larslenssen Dec 3, 2021
f9acab0
Add ReqOsm() for simple osm reading
larslenssen Dec 3, 2021
a196dd7
add readPbf() as input channel pbf, without filters
larslenssen Dec 3, 2021
8abb1ba
Convert pbf to OsmModel (only Nodes atm)
larslenssen Dec 3, 2021
7c8592b
Merge branch 'dev' of https://github.com/ie3-institute/OSMoGrid into …
larslenssen Dec 3, 2021
ad31666
scala spotless apply
larslenssen Dec 3, 2021
5ab597a
add convert pbf -> OsmModel way
larslenssen Dec 3, 2021
c7f6eb6
Merge remote-tracking branch 'origin/dev' into ll/#73-firstImplementa…
ckittl Dec 7, 2021
3db4dcf
Fix merge
ckittl Dec 7, 2021
a230e94
Merge remote-tracking branch 'origin/dev' into ll/#73-firstImplementa…
ckittl Dec 8, 2021
f5e41ae
Apply suggestions from code review
larslenssen Dec 8, 2021
fb7427d
Fix code suggestions + scalaDoc
larslenssen Dec 8, 2021
ff3d771
Add simple filter for readPBF
larslenssen Dec 9, 2021
7bf8498
Merge branch 'dev' into ll/#73-firstImplementationOfInput
johanneshiry Dec 26, 2021
39c1902
moved OsmoGridModel to proper package
johanneshiry Dec 28, 2021
02aa4d1
proper naming of required tags in InputDataProvider
johanneshiry Dec 28, 2021
f341dd6
first implementation of concurrent pbf file source
johanneshiry Dec 30, 2021
cc6ef75
add spotless support for scala 3
johanneshiry Dec 30, 2021
7079a9f
improved concurrent pbf file source + config filter support
johanneshiry Jan 2, 2022
3f5db04
improved LvOsmoGridModel creation by node filtering
johanneshiry Jan 3, 2022
bbcb30a
Merge branch 'dev' into ll/#73-firstImplementationOfInput
johanneshiry Jan 3, 2022
cb6156e
Merge 'remotes/origin/dev' into ll/#73-firstImplementationOfInput + f…
larslenssen Jan 24, 2022
1f096fd
Merge DEV and add boundaries to OSMGridModel
larslenssen Feb 3, 2022
0bfea89
Merge branch 'dev' into ll/#73-firstImplementationOfInput
ckittl Feb 14, 2022
016d38e
Fmt
ckittl Feb 14, 2022
608c8aa
Some minor changes + Class for testing pbf reader (InputDataTester ->…
larslenssen Feb 14, 2022
a141d29
Merge branch 'dev' into ll/#73-firstImplementationOfInput
sebastian-peter Feb 17, 2022
940e315
Update src/main/scala/edu/ie3/osmogrid/io/input/OsmSource.scala
sebastian-peter Feb 21, 2022
0a16f1a
Implement InputDataTester as scala test
ckittl Feb 22, 2022
6f45bcf
Fix config generation script
ckittl Feb 22, 2022
cddbd6e
First parts of OsmoGridModelSpec
sebastian-peter Feb 23, 2022
f63de5f
Merge branch 'dev' into ll/#73-firstImplementationOfInput
t-ober Feb 25, 2022
f04d935
Introducing EnhancedOsmEntity, fixing model merging
sebastian-peter Mar 7, 2022
da84df1
Merge branch 'dev' into ll/#73-firstImplementationOfInput
sebastian-peter Mar 7, 2022
71f3d74
Merge branch 'dev' into ll/#73-firstImplementationOfInput
t-ober Mar 13, 2022
6aae1f7
Fixing test
sebastian-peter Mar 13, 2022
9592f9a
Merge branch 'dev' into ll/#73-firstImplementationOfInput
sebastian-peter Mar 13, 2022
c6bf372
Addressing most reviewers' comments
sebastian-peter Mar 13, 2022
bad7131
Merging dev
sebastian-peter Mar 13, 2022
f7d7342
Introducing stateful ActorStopSupport
sebastian-peter Mar 14, 2022
5217067
Tracking pbfs with lfs and renaming test map data
sebastian-peter Mar 14, 2022
caa6a0e
Another round of addressing reviewers' comments
sebastian-peter Mar 14, 2022
6670397
Update src/main/scala/edu/ie3/osmogrid/io/input/OsmSource.scala
sebastian-peter Mar 14, 2022
6841b35
Testing with longer timeout
sebastian-peter Mar 14, 2022
cd2d87e
Capturing logs during tests
sebastian-peter Mar 14, 2022
161191b
Reacting to failed reads in OsmSourceSpec
sebastian-peter Mar 14, 2022
4c2237d
Deleting unused file
sebastian-peter Mar 14, 2022
9b713f7
Enabling LFS in Jenkins
sebastian-peter Mar 14, 2022
5cdb996
Removing LFS again
sebastian-peter Mar 14, 2022
8bf85c3
Implementing integration test for InputDataProvider
sebastian-peter Mar 17, 2022
19696e8
Merge branch 'dev' into ll/#73-firstImplementationOfInput
ckittl Mar 25, 2022
c63cbe7
Merge branch 'dev' into ll/#73-firstImplementationOfInput
ckittl Mar 25, 2022
2c226fd
Addressing reviewer comment: harmonizing ActorStopSupport interface d…
sebastian-peter Mar 27, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
# These are explicitly windows files and should use crlf
*.bat text eol=crlf

1 change: 1 addition & 0 deletions .scalafmt.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
runner.dialect = scala3
3 changes: 3 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ dependencies {
implementation 'com.typesafe:config:1.4.2'
implementation "com.github.scopt:scopt_$scalaMajorVersion:4.0.1" // cmd args parser

// osm4scala
implementation 'com.acervera.osm4scala:osm4scala-core_2.13:1.0.10'

// todo CLEANUP following old dependencies
// ie³ power system utils
implementation('com.github.ie3-institute:PowerSystemUtils:2.0-SNAPSHOT') {
Expand Down
2 changes: 1 addition & 1 deletion gradle/scripts/spotless.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ spotless {

//sets a license header, removes unused imports and formats conforming to the scala fmt formatter
scala {
scalafmt()
scalafmt().configFile('.scalafmt.conf')
licenseHeader ie3LicHead, "package.*\\n"
}

Expand Down
4 changes: 2 additions & 2 deletions gradle/scripts/tscfg.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ task genConfigClass {
doLast {
def tscfgJarFile = project.file('build/tscfg-' + tscfgVersion + '.jar')
if (!tscfgJarFile.exists() || !tscfgJarFile.isFile()) {
download {
download.run {
src 'https://github.com/carueda/tscfg/releases/download/v' + tscfgVersion + '/tscfg-' + tscfgVersion + '.jar'
dest buildDir
}
Expand Down Expand Up @@ -37,7 +37,7 @@ task genConfigSample {
doLast {
def tscfgJarFile = project.file('build/tscfg-' + tscfgVersion + '.jar')
if (!tscfgJarFile.exists() || !tscfgJarFile.isFile()) {
download {
download.run {
src 'https://github.com/carueda/tscfg/releases/download/v' + tscfgVersion + '/tscfg-' + tscfgVersion + '.jar'
dest buildDir
}
Expand Down
8 changes: 8 additions & 0 deletions src/main/resources/config/config-template.conf
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,13 @@ generation: {
#@optional
lv: {
distinctHouseConnections: Boolean | false # If there shall be distinct lines for house connection
osm: {
#@optional
filter: { # filter to be applied for the LvOsmoGridModel
building: [string]
highway: [string]
landuse: [string]
}
}
}
}
29 changes: 0 additions & 29 deletions src/main/resources/log4j2.xml

This file was deleted.

32 changes: 32 additions & 0 deletions src/main/resources/logback-test.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>[%date{ISO8601}] [%level] [%logger] [%thread] - %msg MDC: {%mdc}%n</pattern>
</encoder>
</appender>

<!--
Logging from tests are silenced by this appender. When there is a test failure
the captured logging events are flushed to the appenders defined for the
akka.actor.testkit.typed.internal.CapturingAppenderDelegate logger.
-->
<appender name="CapturingAppender" class="akka.actor.testkit.typed.internal.CapturingAppender" />

<!--
The appenders defined for this CapturingAppenderDelegate logger are used
when there is a test failure and all logging events from the test are
flushed to these appenders.
-->
<logger name="akka.actor.testkit.typed.internal.CapturingAppenderDelegate" >
<appender-ref ref="STDOUT"/>
</logger>

<root level="DEBUG">
<appender-ref ref="CapturingAppender"/>
</root>
</configuration>
34 changes: 22 additions & 12 deletions src/main/scala/edu/ie3/osmogrid/ActorStopSupport.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,36 @@ package edu.ie3.osmogrid

import akka.actor.typed.Behavior
import akka.actor.typed.scaladsl.Behaviors
import edu.ie3.osmogrid.io.input.InputDataProvider.Request
import org.slf4j.Logger

trait ActorStopSupport[T] {
/** Support trait for executing clean up tasks with stopping an actor
*
* @tparam T
* Behavior type
* @tparam S
* StateData type. Optional, use [[Any]] if not applicable
*/
trait ActorStopSupport[T, S] {

/** Partial function to perform cleanup tasks while shutting down
/** Function to perform cleanup tasks while shutting down
*/
protected val cleanUp: () => Unit

protected def terminate(log: Logger): Behavior[T] = {
log.info("Got request to terminate.")
stopBehavior
}
protected def cleanUp(stateData: S): Unit

/** Specific stop state with clean up actions issued
*/
protected val stopBehavior: Behavior[T] = Behaviors.stopped(cleanUp)
protected def stopBehavior(stateData: S): Behavior[T] =
Behaviors.stopped(() => cleanUp(stateData))

final protected def terminate(log: Logger, stateData: S): Behavior[T] = {
log.info("Got request to terminate.")
stopBehavior(stateData)
}

protected def postStopCleanUp(log: Logger): Behavior[T] = {
final protected def postStopCleanUp(
log: Logger,
stateData: S
): Behavior[T] = {
log.info("Got terminated by ActorSystem.")
stopBehavior
stopBehavior(stateData)
}
}
36 changes: 36 additions & 0 deletions src/main/scala/edu/ie3/osmogrid/ActorStopSupportStateless.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* © 2022. TU Dortmund University,
* Institute of Energy Systems, Energy Efficiency and Energy Economics,
* Research group Distribution grid planning and operation
*/

package edu.ie3.osmogrid

import akka.actor.typed.Behavior
import akka.actor.typed.scaladsl.Behaviors
import org.slf4j.Logger

/** Support trait for executing clean up tasks with stopping an actor
* @tparam T
* Behavior type
*/
trait ActorStopSupportStateless[T] {
Copy link
Member

@ckittl ckittl Mar 25, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why did you decide to not extend the existing trait and override the methods? The traits are meant to do the same thing, but have different outline (cf. cleanUp is once a partial function and once a method)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I now adapted the interface definitions to match types as far as possible (both using functions now)


/** Function to perform cleanup tasks while shutting down
*/
protected def cleanUp(): Unit

/** Specific stop state with clean up actions issued
*/
protected val stopBehavior: Behavior[T] = Behaviors.stopped(cleanUp)

final protected def terminate(log: Logger): Behavior[T] = {
log.info("Got request to terminate.")
stopBehavior
}

final protected def postStopCleanUp(log: Logger): Behavior[T] = {
log.info("Got terminated by ActorSystem.")
stopBehavior
}
}
13 changes: 12 additions & 1 deletion src/main/scala/edu/ie3/osmogrid/cfg/ConfigFailFast.scala
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,19 @@ object ConfigFailFast extends LazyLogging {

private def checkLvConfig(lv: OsmoGridConfig.Generation.Lv): Unit = lv match {
case Lv(
distinctHouseConnections
amountOfGridGenerators,
amountOfRegionCoordinators,
distinctHouseConnections,
lv.osm
) =>
if (amountOfGridGenerators < 1)
throw IllegalConfigException(
s"The amount of lv grid generation actors needs to be at least 1 (provided: $amountOfGridGenerators)."
)
if (amountOfRegionCoordinators < 1)
throw IllegalConfigException(
s"The amount of lv region coordination actors needs to be at least 1 (provided: $amountOfRegionCoordinators)."
)
}

private def checkInputConfig(input: OsmoGridConfig.Input): Unit =
Expand Down
92 changes: 90 additions & 2 deletions src/main/scala/edu/ie3/osmogrid/cfg/OsmoGridConfig.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,81 @@ object OsmoGridConfig {
)
object Generation {
final case class Lv(
distinctHouseConnections: scala.Boolean
amountOfGridGenerators: scala.Int,
amountOfRegionCoordinators: scala.Int,
distinctHouseConnections: scala.Boolean,
osm: OsmoGridConfig.Generation.Lv.Osm
)
object Lv {
final case class Osm(
filter: scala.Option[OsmoGridConfig.Generation.Lv.Osm.Filter]
)
object Osm {
final case class Filter(
building: scala.List[java.lang.String],
highway: scala.List[java.lang.String],
landuse: scala.List[java.lang.String]
)
object Filter {
def apply(
c: com.typesafe.config.Config,
parentPath: java.lang.String,
$tsCfgValidator: $TsCfgValidator
): OsmoGridConfig.Generation.Lv.Osm.Filter = {
OsmoGridConfig.Generation.Lv.Osm.Filter(
building =
$_L$_str(c.getList("building"), parentPath, $tsCfgValidator),
highway =
$_L$_str(c.getList("highway"), parentPath, $tsCfgValidator),
landuse =
$_L$_str(c.getList("landuse"), parentPath, $tsCfgValidator)
)
}
}

def apply(
c: com.typesafe.config.Config,
parentPath: java.lang.String,
$tsCfgValidator: $TsCfgValidator
): OsmoGridConfig.Generation.Lv.Osm = {
OsmoGridConfig.Generation.Lv.Osm(
filter =
if (c.hasPathOrNull("filter"))
scala.Some(
OsmoGridConfig.Generation.Lv.Osm.Filter(
c.getConfig("filter"),
parentPath + "filter.",
$tsCfgValidator
)
)
else None
)
}
}

def apply(
c: com.typesafe.config.Config,
parentPath: java.lang.String,
$tsCfgValidator: $TsCfgValidator
): OsmoGridConfig.Generation.Lv = {
OsmoGridConfig.Generation.Lv(
amountOfGridGenerators =
if (c.hasPathOrNull("amountOfGridGenerators"))
c.getInt("amountOfGridGenerators")
else 10,
amountOfRegionCoordinators =
if (c.hasPathOrNull("amountOfRegionCoordinators"))
c.getInt("amountOfRegionCoordinators")
else 5,
distinctHouseConnections = c.hasPathOrNull(
"distinctHouseConnections"
) && c.getBoolean("distinctHouseConnections")
) && c.getBoolean("distinctHouseConnections"),
osm = OsmoGridConfig.Generation.Lv.Osm(
if (c.hasPathOrNull("osm")) c.getConfig("osm")
else com.typesafe.config.ConfigFactory.parseString("osm{}"),
parentPath + "osm.",
$tsCfgValidator
)
)
}
}
Expand Down Expand Up @@ -271,6 +334,31 @@ object OsmoGridConfig {
$tsCfgValidator.validate()
$result
}

private def $_L$_str(
cl: com.typesafe.config.ConfigList,
parentPath: java.lang.String,
$tsCfgValidator: $TsCfgValidator
): scala.List[java.lang.String] = {
import scala.jdk.CollectionConverters._
cl.asScala.map(cv => $_str(cv)).toList
}
private def $_expE(
cv: com.typesafe.config.ConfigValue,
exp: java.lang.String
) = {
val u: Any = cv.unwrapped
new java.lang.RuntimeException(
s"${cv.origin.lineNumber}: " +
"expecting: " + exp + " got: " +
(if (u.isInstanceOf[java.lang.String]) "\"" + u + "\"" else u)
)
}

private def $_str(cv: com.typesafe.config.ConfigValue): java.lang.String = {
java.lang.String.valueOf(cv.unwrapped())
}

final class $TsCfgValidator {
private val badPaths =
scala.collection.mutable.ArrayBuffer[java.lang.String]()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/*
* © 2021. TU Dortmund University,
* Institute of Energy Systems, Energy Efficiency and Energy Economics,
* Research group Distribution grid planning and operation
*/

package edu.ie3.osmogrid.exception

case class PbfReadFailedException(
msg: String = "",
cause: Throwable = None.orNull
) extends Exception(msg, cause)
6 changes: 3 additions & 3 deletions src/main/scala/edu/ie3/osmogrid/guardian/run/RunSupport.scala
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ private trait RunSupport {
outputConfig: OsmoGridConfig.Output,
ctx: ActorContext[Request]
): (
ActorRef[InputDataProvider.Request],
ActorRef[InputDataProvider.InputDataEvent],
Option[ActorRef[ResultListener.ResultEvent]]
) = (
spawnInputDataProvider(runId, inputConfig, ctx),
Expand All @@ -129,7 +129,7 @@ private trait RunSupport {
runId: UUID,
inputConfig: OsmoGridConfig.Input,
ctx: ActorContext[Request]
): ActorRef[InputDataProvider.Request] = {
): ActorRef[InputDataProvider.InputDataEvent] = {
ctx.log.info("Starting input data provider ...")
val inputProvider =
ctx.spawn(
Expand Down Expand Up @@ -191,7 +191,7 @@ private trait RunSupport {
*/
private def startLvGridGeneration(
runId: UUID,
inputDataProvider: ActorRef[InputDataProvider.Request],
inputDataProvider: ActorRef[InputDataProvider.InputDataEvent],
lvConfig: OsmoGridConfig.Generation.Lv,
lvCoordinatorAdapter: ActorRef[coordinator.Response],
ctx: ActorContext[Request]
Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/edu/ie3/osmogrid/guardian/run/run.scala
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ sealed trait Response
final case class Done(runId: UUID) extends Response

private final case class ChildReferences(
inputDataProvider: ActorRef[InputDataProvider.Request],
inputDataProvider: ActorRef[InputDataProvider.InputDataEvent],
resultListener: Option[ActorRef[ResultListener.ResultEvent]],
additionalResultListeners: Seq[ActorRef[ResultListener.ResultEvent]],
lvCoordinator: Option[ActorRef[coordinator.Request]]
Expand Down
Loading