You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@texera.apache.org by "aglinxinyuan (via GitHub)" <gi...@apache.org> on 2026/08/25 05:51:13 UTC

[PR] test(amber): cover the amber client and the async RPC server [texera]

aglinxinyuan opened a new pull request, #7954:
URL: https://github.com/apache/texera/pull/7954

   ### What changes were proposed in this PR?
   
   Two new specs for two files that had none: `AmberClientSpec` and `AsyncRPCServerSpec`. 13 tests.
   
   Measured with `WorkflowExecutionService/jacoco` scoped to these two suites, one fresh sbt JVM per run.
   
   | File | Codecov (scoped) | JaCoCo line-hit |
   |---|---|---|
   | `AsyncRPCServer.scala` | 21/32 = 65.6% → **27/32 = 84.4%** | 28/32 → **32/32 = 100%** |
   | `AmberClient.scala` | 21/47 = 44.7% → **40/47 = 85.1%** | 22/47 → **43/47 = 91.5%** |
   
   **Those scoped figures overstate what CI will show, and the difference is the whole story of this file.** Codecov reports `AmberClient` at 83.0%, not the 44.7% a scoped run sees, because the e2e specs (`DataProcessingSpec`, `PauseSpec`) are **not** tagged `@IntegrationTest` and therefore run in the coverage job, already driving a real `AmberClient`. So the CI-visible gain is bounded by the 8 lines Codecov actually reports as missing — not +25.
   
   I am stating it that way because a sibling file, `ClientActor.scala`, was assessed earlier in exactly this trap and turned out **saturated rather than undertested**: ~190 lines of new test bought 1 line. These two files are not that — `notifyNodeFailure` is genuinely unexercised, and `ClusterListenerSpec`'s own header says so in writing — but the scoped number is not the number to quote.
   
   ### Verification
   
   17 mutations, **all 17 killed, no survivors.** Each applied one at a time against a hash-verified pristine tree.
   
   The first draft claimed no survivors on a 10-mutant table; **six further mutants survived it**, and all six now die.
   
   Four of its claims were overstated and are corrected here:
   
   - A dispatch test was described as pinning that the handler saw "the request and the context — not the two swapped". It did not.
   - One kill was credited to a `notifyNodeFailure` test, but it only pinned *which branch ran*: `ClientActor` replies `Ack` to any message, so the assertion could not distinguish the call from a no-op.
   - The error-handler test was described as pinning the `catch` at line 144. It pins only that `errorHandler` is *called*; the catch's other job — swallowing so the stream survives — was unasserted.
   
   ### Traps recorded in the specs, because each would produce a false pass
   
   - **`AmberClient`'s constructor is not side-effect-free.** It does `system.actorOf(Props(new ClientActor))` and then blocks on an ask whose handler spawns a real `Coordinator` child. It is safe only with an empty `PhysicalPlan` and an all-`None` `CoordinatorConfig`, and every client must be `shutdown()` in a `finally` or the shared serialized amber JVM accumulates live actors.
   - **`AsyncRPCServer.methodsByName` is a memoized `@transient lazy val`** built from `getClass.getMethods` on the *first* `receive()`. Reassigning `server.handler` afterwards is silently ignored, so a shared server across tests would produce a false pass. Every test builds a fresh one.
   - **The ask inside `notifyNodeFailure` is governed by a 1-minute implicit timeout.** A non-replying actor would stall a full minute and then report "1 TEST FAILED" without naming it, so the spec awaits with an explicit 5-second bound instead.
   - **`registerCallback` asserts `clientActor.path.address.hasLocalScope`**, so the spec's `ActorSystem` must be plain local — not `AmberRuntime.pekkoConfig`, which is clustered.
   - The debug-level test restores the previous logback level in a `finally`. amber suites are strictly serial, so a leaked level would deterministically pollute later suites rather than occasionally.
   
   ### Deliberately not included
   
   Eight of the sixteen gap lines are structurally unwinnable: both lazy-val bitmaps, a `MatchError` arm, an `$outer` null guard, an `instanceof Object` arm, and three scala-logging `isEnabled` arms.
   
   `AsyncRPCServer:104`'s error-disabled arm has no test-only seam — `invokeMethod`, `returnResult` and `noReplyNeeded` are all private, and everything here is driven through the public `receive` plus the `handler` var. Accepted limitation; no production seam was requested.
   
   Both new specs carry the Apache licence header. No production file is touched.
   
   ### Any related issues, documentation, discussions?
   
   Closes #ISSUE_Y1
   
   ### How was this PR tested?
   
   ```
   sbt "WorkflowExecutionService/testOnly org.apache.texera.amber.engine.common.client.AmberClientSpec org.apache.texera.amber.engine.common.rpc.AsyncRPCServerSpec"
   ```
   
   ```
   [info] Total number of tests run: 13
   [info] Tests: succeeded 13, failed 0, canceled 0, ignored 0, pending 0
   ```
   
   `Test/scalafmtCheck` passes.
   
   ### Was this PR authored or co-authored using generative AI tooling?
   
   Generated-by: Claude Code (Opus 5)
   


-- 
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.

To unsubscribe, e-mail: notifications-unsubscribe@texera.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] test(amber): cover the amber client and the async RPC server [texera]

Posted by "Copilot (via GitHub)" <gi...@apache.org>.
Copilot commented on code in PR #7954:
URL: https://github.com/apache/texera/pull/7954#discussion_r3850152052


##########
amber/src/test/scala/org/apache/texera/amber/engine/common/client/AmberClientSpec.scala:
##########
@@ -0,0 +1,324 @@
+/*
+ * 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.texera.amber.engine.common.client
+
+import com.twitter.util.{Await => TwitterAwait, Duration => TwitterDuration}
+import org.apache.pekko.actor.{ActorRef, ActorSystem, Address, UnhandledMessage}
+import org.apache.pekko.pattern.StatusReply.Ack
+import org.apache.pekko.testkit.{TestKit, TestProbe}
+import org.apache.texera.amber.core.virtualidentity.ChannelIdentity
+import org.apache.texera.amber.core.workflow.{PhysicalPlan, WorkflowContext}
+import org.apache.texera.amber.engine.architecture.common.WorkflowActor.{NetworkAck, NetworkMessage}
+import org.apache.texera.amber.engine.architecture.coordinator.{
+  CoordinatorConfig,
+  ExecutionStateUpdate,
+  WorkflowRecoveryStatus
+}
+import org.apache.texera.amber.engine.architecture.rpc.controlreturns.WorkflowAggregatedState
+import org.apache.texera.amber.engine.common.ambermessage.{
+  NotifyFailedNode,
+  WorkflowFIFOMessage,
+  WorkflowFIFOMessagePayload,
+  WorkflowRecoveryMessage
+}
+import org.apache.texera.amber.engine.common.virtualidentity.util.{CLIENT, COORDINATOR}
+import org.scalatest.BeforeAndAfterAll
+import org.scalatest.flatspec.AnyFlatSpecLike
+import org.scalatest.matchers.should.Matchers
+
+import java.util.concurrent.atomic.AtomicInteger
+import java.util.concurrent.{ConcurrentLinkedQueue, CountDownLatch, TimeUnit}
+import scala.concurrent.Await
+import scala.concurrent.duration.DurationInt
+import scala.jdk.CollectionConverters._
+
+/**
+  * Unit test for [[AmberClient]].
+  *
+  * This spec lives in `...engine.common.client` on purpose: `ClientActor` and its
+  * companion messages are `private[client]`, so the event-delivery tests below could
+  * not be written from any other package.
+  *
+  * Every client is built over the empty plan
+  * (`PhysicalPlan(Set.empty, Set.empty)` + `CoordinatorConfig(None, None, None, None)`),
+  * the recipe three `org.apache.texera.web.service` specs already use: the constructor
+  * blocks on an `InitializeRequest`, which spawns a real `Coordinator` child, and only
+  * an empty plan makes that complete without an engine. Clients are always shut down
+  * in a `finally` -- amber's suites share one serially-run JVM, so a leaked client
+  * would leave live actors behind for every later suite.
+  */
+class AmberClientSpec
+    extends TestKit(ActorSystem("AmberClientSpec"))
+    with AnyFlatSpecLike
+    with Matchers
+    with BeforeAndAfterAll {
+
+  override def afterAll(): Unit = {
+    try TestKit.shutdownActorSystem(system)
+    finally super.afterAll()
+  }
+
+  private val failedNode = Address("pekko", "AmberClientSpec", "127.0.0.1", 2552)
+
+  /**
+    * `AmberClient` declares `implicit val timeout = Timeout(1.minute)` for the ask in
+    * `notifyNodeFailure`, so a reply that never arrives would stall the suite for a
+    * full minute before ScalaTest reports an unnamed failure. Every await below uses
+    * this short explicit bound instead.
+    */
+  private val awaitTimeout: TwitterDuration = TwitterDuration.fromSeconds(5)
+
+  private def newClient(
+      actorSystem: ActorSystem = system,
+      errorHandler: Throwable => Unit = _ => ()
+  ): AmberClient =
+    new AmberClient(
+      actorSystem,
+      new WorkflowContext(),
+      PhysicalPlan(Set.empty, Set.empty),
+      CoordinatorConfig(None, None, None, None),
+      errorHandler
+    )
+
+  private def withClient(body: AmberClient => Unit): Unit = {
+    val client = newClient()
+    try body(client)
+    finally client.shutdown()
+  }
+
+  // ---------------------------------------------------------------------------
+  // notifyNodeFailure
+  // ---------------------------------------------------------------------------
+
+  "notifyNodeFailure" should "forward the failed node's address to the coordinator and complete with Ack" in {
+    // `ClientActor` replies Ack to ANY WorkflowRecoveryMessage, so the Ack on its own
+    // says nothing about what was sent. The `Coordinator` it forwards to has no arm
+    // for WorkflowRecoveryMessage (`WorkflowActor.receive` is a fixed orElse-chain
+    // with no catch-all), so pekko republishes the forwarded message verbatim on the
+    // event stream -- which is how the address can be observed from outside a client
+    // whose `clientActor` field is class-private.
+    val unhandled = TestProbe()
+    system.eventStream.subscribe(unhandled.ref, classOf[UnhandledMessage])
+    try {
+      withClient { client =>
+        TwitterAwait.result(client.notifyNodeFailure(failedNode), awaitTimeout) shouldBe Ack
+
+        val forwarded = unhandled.fishForSpecificMessage[UnhandledMessage](10.seconds) {
+          case msg @ UnhandledMessage(_: WorkflowRecoveryMessage, _, _) => msg
+        }
+        forwarded.message shouldBe WorkflowRecoveryMessage(CLIENT, NotifyFailedNode(failedNode))
+      }
+    } finally system.eventStream.unsubscribe(unhandled.ref)
+  }
+
+  it should "return an already-satisfied unit future once the client has been shut down" in {
+    val client = newClient()
+    client.shutdown()
+
+    val result = client.notifyNodeFailure(failedNode)
+
+    // Short-circuited, not asked: the actor took a PoisonPill in `shutdown()`, so an
+    // ask would sit unanswered until the one-minute timeout instead of resolving now.
+    result.isDefined shouldBe true
+    TwitterAwait.result(result, awaitTimeout) shouldBe ((): Unit)

Review Comment:
   The `result.isDefined shouldBe true` assertion makes this test depend on the internal completion timing of a Twitter `Future` rather than the behavior that matters (that the call completes quickly and does not perform an `ask`). This can be flaky if `Future[Any](())` is not guaranteed to be already satisfied immediately in all implementations/versions.
   
   Rely on the bounded `Await` only, which already fails fast if `notifyNodeFailure` accidentally performs the 1-minute `ask`.



-- 
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.

To unsubscribe, e-mail: notifications-unsubscribe@texera.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] test(amber): cover the amber client and the async RPC server [texera]

Posted by "github-actions[bot] (via GitHub)" <gi...@apache.org>.
github-actions[bot] commented on PR #7954:
URL: https://github.com/apache/texera/pull/7954#issuecomment-5406189816

   <!-- texera-benchmarks-comment -->
   ## ⚠️ Benchmark changes need a look
   
   🟢 0 better · 🔴 5 worse · ⚪ 10 noise (<±5%) · 0 without baseline
   
   > Compared against main `3198595` benchmarked on **this same runner**, so the delta is largely free of cross-runner hardware noise. The "7d avg" column still reflects the gh-pages dashboard. Treat <±5% as noise unless repeated.
   
   [Dashboard](https://apache.github.io/texera/dev/bench/) · [Run](https://github.com/apache/texera/actions/runs/32814481819)
   
   | | config | throughput | MB/s | latency | max Δ latest / 7d |
   |---|---|---:|---:|---:|---:|
   | 🔴 | bs=10 sw=10 sl=64 | 374 | 0.228 | 24,103/41,598/41,598 us | 🔴 +20.0% / 🔴 +195.7% |
   | ⚪ | bs=100 sw=10 sl=64 | 819 | 0.5 | 121,978/134,490/134,490 us | ⚪ within ±5% / 🔴 +39.4% |
   | ⚪ | bs=1000 sw=10 sl=64 | 925 | 0.565 | 1,088,069/1,135,093/1,135,093 us | ⚪ within ±5% / 🔴 +22.7% |
   
   <details><summary>Baseline details</summary>
   
   Latest main `3198595` from same runner
   
   | config | metric | PR | latest main | 7d avg | Δ latest | Δ 7d |
   |---|---|---:|---:|---:|---:|---:|
   | bs=10 sw=10 sl=64 | throughput | 374 tuples/sec | 432 tuples/sec | 863.81 tuples/sec | -13.4% | -56.7% |
   | bs=10 sw=10 sl=64 | MB/s | 0.228 MB/s | 0.264 MB/s | 0.527 MB/s | -13.6% | -56.8% |
   | bs=10 sw=10 sl=64 | p50 | 24,103 us | 21,086 us | 11,488 us | +14.3% | +109.8% |
   | bs=10 sw=10 sl=64 | p95 | 41,598 us | 34,674 us | 14,067 us | +20.0% | +195.7% |
   | bs=10 sw=10 sl=64 | p99 | 41,598 us | 34,674 us | 17,591 us | +20.0% | +136.5% |
   | bs=100 sw=10 sl=64 | throughput | 819 tuples/sec | 843 tuples/sec | 1,127 tuples/sec | -2.8% | -27.3% |
   | bs=100 sw=10 sl=64 | MB/s | 0.5 MB/s | 0.514 MB/s | 0.688 MB/s | -2.7% | -27.3% |
   | bs=100 sw=10 sl=64 | p50 | 121,978 us | 117,543 us | 89,893 us | +3.8% | +35.7% |
   | bs=100 sw=10 sl=64 | p95 | 134,490 us | 130,229 us | 96,506 us | +3.3% | +39.4% |
   | bs=100 sw=10 sl=64 | p99 | 134,490 us | 130,229 us | 104,915 us | +3.3% | +28.2% |
   | bs=1000 sw=10 sl=64 | throughput | 925 tuples/sec | 952 tuples/sec | 1,156 tuples/sec | -2.8% | -20.0% |
   | bs=1000 sw=10 sl=64 | MB/s | 0.565 MB/s | 0.581 MB/s | 0.705 MB/s | -2.8% | -19.9% |
   | bs=1000 sw=10 sl=64 | p50 | 1,088,069 us | 1,049,495 us | 886,448 us | +3.7% | +22.7% |
   | bs=1000 sw=10 sl=64 | p95 | 1,135,093 us | 1,115,497 us | 930,093 us | +1.8% | +22.0% |
   | bs=1000 sw=10 sl=64 | p99 | 1,135,093 us | 1,115,497 us | 963,104 us | +1.8% | +17.9% |
   
   </details>
   
   <details><summary>Raw CSV</summary>
   
   ```csv
   config_idx,batch_size,schema_width,string_len,num_batches,total_ms,total_tuples,total_bytes,tuples_per_sec,mb_per_sec,lat_p50_us,lat_p95_us,lat_p99_us
   0,10,10,64,20,534.55,200,128000,374,0.228,24102.76,41598.17,41598.17
   1,100,10,64,20,2441.84,2000,1280000,819,0.500,121977.94,134489.96,134489.96
   2,1000,10,64,20,21613.58,20000,12800000,925,0.565,1088068.61,1135092.53,1135092.53
   ```
   
   </details>
   


-- 
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.

To unsubscribe, e-mail: notifications-unsubscribe@texera.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] test(amber): cover the amber client and the async RPC server [texera]

Posted by "aglinxinyuan (via GitHub)" <gi...@apache.org>.
aglinxinyuan merged PR #7954:
URL: https://github.com/apache/texera/pull/7954


-- 
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.

To unsubscribe, e-mail: notifications-unsubscribe@texera.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] test(amber): cover the amber client and the async RPC server [texera]

Posted by "github-actions[bot] (via GitHub)" <gi...@apache.org>.
github-actions[bot] commented on PR #7954:
URL: https://github.com/apache/texera/pull/7954#issuecomment-5406143480

   <!-- texera-reviewer-suggestion -->
   ### Automated Reviewer Suggestions
   
   Based on the `git blame` history of the changed files, we recommend the following reviewers:
   
   - No candidates found from `git blame` history.
   


-- 
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.

To unsubscribe, e-mail: notifications-unsubscribe@texera.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] test(amber): cover the amber client and the async RPC server [texera]

Posted by "codecov-commenter (via GitHub)" <gi...@apache.org>.
codecov-commenter commented on PR #7954:
URL: https://github.com/apache/texera/pull/7954#issuecomment-5406240185

   ## [Codecov](https://app.codecov.io/gh/apache/texera/pull/7954?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
   :white_check_mark: All modified and coverable lines are covered by tests.
   :white_check_mark: Project coverage is 92.80%. Comparing base ([`3198595`](https://app.codecov.io/gh/apache/texera/commit/319859571e30d123a50081a918815d9b65b4300f?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`3fd6bfd`](https://app.codecov.io/gh/apache/texera/commit/3fd6bfd808e23b41f4da508c1f4269a09421ced5?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
   :white_check_mark: All tests successful. No failed tests found.
   
   <details><summary>Additional details and impacted files</summary>
   
   
   
   ```diff
   @@             Coverage Diff              @@
   ##               main    #7954      +/-   ##
   ============================================
   + Coverage     92.79%   92.80%   +0.01%     
   - Complexity     4616     4622       +6     
   ============================================
     Files          1174     1174              
     Lines         47453    47453              
     Branches       5304     5304              
   ============================================
   + Hits          44034    44041       +7     
   + Misses         1899     1892       -7     
     Partials       1520     1520              
   ```
   
   | [Flag](https://app.codecov.io/gh/apache/texera/pull/7954/flags?src=pr&el=flags&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | | *Carryforward flag |
   |---|---|---|---|
   | [access-control-service](https://app.codecov.io/gh/apache/texera/pull/7954/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `81.00% <ø> (ø)` | | Carriedforward from [3198595](https://app.codecov.io/gh/apache/texera/commit/319859571e30d123a50081a918815d9b65b4300f?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [agent-service](https://app.codecov.io/gh/apache/texera/pull/7954/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `98.62% <ø> (ø)` | | Carriedforward from [3198595](https://app.codecov.io/gh/apache/texera/commit/319859571e30d123a50081a918815d9b65b4300f?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [amber](https://app.codecov.io/gh/apache/texera/pull/7954/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `89.16% <ø> (+0.04%)` | :arrow_up: | |
   | [computing-unit-managing-service](https://app.codecov.io/gh/apache/texera/pull/7954/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `73.67% <ø> (ø)` | | Carriedforward from [3198595](https://app.codecov.io/gh/apache/texera/commit/319859571e30d123a50081a918815d9b65b4300f?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [config-service](https://app.codecov.io/gh/apache/texera/pull/7954/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `86.73% <ø> (ø)` | | Carriedforward from [3198595](https://app.codecov.io/gh/apache/texera/commit/319859571e30d123a50081a918815d9b65b4300f?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [file-service](https://app.codecov.io/gh/apache/texera/pull/7954/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `84.48% <ø> (ø)` | | Carriedforward from [3198595](https://app.codecov.io/gh/apache/texera/commit/319859571e30d123a50081a918815d9b65b4300f?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [frontend](https://app.codecov.io/gh/apache/texera/pull/7954/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `95.03% <ø> (ø)` | | Carriedforward from [3198595](https://app.codecov.io/gh/apache/texera/commit/319859571e30d123a50081a918815d9b65b4300f?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [notebook-migration-service](https://app.codecov.io/gh/apache/texera/pull/7954/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `79.13% <ø> (ø)` | | Carriedforward from [3198595](https://app.codecov.io/gh/apache/texera/commit/319859571e30d123a50081a918815d9b65b4300f?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [pyamber](https://app.codecov.io/gh/apache/texera/pull/7954/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `97.57% <ø> (ø)` | | Carriedforward from [3198595](https://app.codecov.io/gh/apache/texera/commit/319859571e30d123a50081a918815d9b65b4300f?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   | [workflow-compiling-service](https://app.codecov.io/gh/apache/texera/pull/7954/flags?src=pr&el=flag&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | `77.19% <ø> (ø)` | | Carriedforward from [3198595](https://app.codecov.io/gh/apache/texera/commit/319859571e30d123a50081a918815d9b65b4300f?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
   
   *This pull request uses carry forward flags. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) to find out more.
   </details>
   
   [:umbrella: View full report in Codecov by Harness](https://app.codecov.io/gh/apache/texera/pull/7954?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).   
   :loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache).
   <details><summary> :rocket: New features to boost your workflow: </summary>
   
   - :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
   </details>


-- 
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.

To unsubscribe, e-mail: notifications-unsubscribe@texera.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org