@@ -28,6 +28,8 @@ object HmdaFileParser {
28
28
29
29
case class ReadHmdaRawFile (persistenceId : String , replyTo : ActorRef ) extends Command
30
30
case class FinishParsing (replyTo : ActorRef ) extends Command
31
+ case class FinishParsingTS (replyTo : ActorRef ) extends Command
32
+ case class FinishParsingLARs (replyTo : ActorRef ) extends Command
31
33
case class GetStatePaginated (page : Int )
32
34
33
35
def props (id : SubmissionId ): Props = Props (new HmdaFileParser (id))
@@ -68,6 +70,9 @@ class HmdaFileParser(submissionId: SubmissionId) extends HmdaPersistentActor {
68
70
stat
69
71
}
70
72
73
+ var tsParsingDone : Boolean = false
74
+ var larParsingDone : Boolean = false
75
+
71
76
override def updateState (event : Event ): Unit = {
72
77
state = state.updated(event)
73
78
}
@@ -77,7 +82,6 @@ class HmdaFileParser(submissionId: SubmissionId) extends HmdaPersistentActor {
77
82
override def receiveCommand : Receive = {
78
83
79
84
case ReadHmdaRawFile (persistenceId, replyTo : ActorRef ) =>
80
-
81
85
val parsedTs = events(persistenceId)
82
86
.filter { x => x.isInstanceOf [LineAdded ] }
83
87
.map { case LineAdded (_, data) => data }
@@ -91,7 +95,7 @@ class HmdaFileParser(submissionId: SubmissionId) extends HmdaPersistentActor {
91
95
}
92
96
93
97
parsedTs
94
- .runForeach(pTs => self ! pTs )
98
+ .runWith( Sink .actorRef( self, FinishParsingTS (replyTo)) )
95
99
96
100
val parsedLar = events(persistenceId)
97
101
.filter { x => x.isInstanceOf [LineAdded ] }
@@ -112,7 +116,7 @@ class HmdaFileParser(submissionId: SubmissionId) extends HmdaPersistentActor {
112
116
113
117
parsedLar
114
118
.mapAsync(parallelism = flowParallelism)(x => (self ? x).mapTo[Persisted .type ])
115
- .runWith(Sink .actorRef(self, FinishParsing (replyTo)))
119
+ .runWith(Sink .actorRef(self, FinishParsingLARs (replyTo)))
116
120
117
121
case tp @ TsParsed (ts) =>
118
122
persist(tp) { e =>
@@ -140,11 +144,16 @@ class HmdaFileParser(submissionId: SubmissionId) extends HmdaPersistentActor {
140
144
sender() ! Persisted
141
145
}
142
146
143
- case FinishParsing (replyTo) =>
144
- for {
145
- stat <- statRef
146
- } yield stat ! CountSubmittedLarsInSubmission
147
+ case FinishParsingTS (replyTo) =>
148
+ tsParsingDone = true
149
+ if (larParsingDone) self ! FinishParsing (replyTo)
147
150
151
+ case FinishParsingLARs (replyTo) =>
152
+ larParsingDone = true
153
+ if (tsParsingDone) self ! FinishParsing (replyTo)
154
+
155
+ case FinishParsing (replyTo) =>
156
+ statRef.map(_ ! CountSubmittedLarsInSubmission )
148
157
if (encounteredParsingErrors)
149
158
replyTo ! ParsingCompletedWithErrors (submissionId)
150
159
else
0 commit comments