stevedlawrence commented on a change in pull request #429:
URL: https://github.com/apache/incubator-daffodil/pull/429#discussion_r501126274



##########
File path: 
daffodil-runtime1/src/main/scala/org/apache/daffodil/processors/SuspensionTracker.scala
##########
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.daffodil.processors
+
+import scala.collection.mutable.Queue
+
+import org.apache.daffodil.dsom.RuntimeSchemaDefinitionError
+import org.apache.daffodil.exceptions.Assert
+
+class SuspensionTracker(suspensionWaitYoung: Int, suspensionWaitOld: Int) {
+
+  private val suspensionsYoung = new Queue[Suspension]
+  private val suspensionsOld = new Queue[Suspension]
+
+  private var count: Int = 0
+
+  def trackSuspension(s: Suspension): Unit = {
+    suspensionsYoung.enqueue(s)
+  }
+
+  /**
+   * Attempts to evaluate suspensions. Old suspensions are evaluated less
+   * frequently than young suspensions. Any young suspensions that fail to
+   * evaluate are moved to the old suspensions list. If we evaluate old
+   * suspensions, we attempt to evaluate them first, with the hope that their
+   * resolution might make the young suspensions more likely to evaluate.
+   */
+  def evalSuspensions(): Unit = {

Review comment:
       I've just pushed a change to log stats and the LogLevel.Debug level. I 
figure this is only really needed when debugging so probably not worth adding a 
new tunable.
   
   This also found an interesting bug in the loger macro which fortunately had 
a pretty simple fix. Issue was that something like this didn't work:
   ```scala
   log(LogLevel.Debug, "int: %d, float: %f", 1, 3.0)
   ```
   The issue was that logger macro wrapped the var args in a Seq, e.g. ``Seq(1, 
3.0)``. Scala tries to be helpful and casts this to a ``Seq[Double](1.0, 
3.0)``, but then the arg types don't match the types specified in the printf 
style message. The solution is to have the macro wrap the var args in a 
``Seq[Any]`` which prevents that casting. I added test to make sure this 
doesn't break in the future.




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to