[ 
https://issues.apache.org/jira/browse/IGNITE-29136?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18126701#comment-18126701
 ] 

Ignite TC Bot commented on IGNITE-29136:
----------------------------------------

{panel:title=Branch: [pull/13684/head] Base: [master] : No blockers 
found!|borderStyle=dashed|borderColor=#ccc|titleBGColor=#D6F7C1}{panel}
{panel:title=Branch: [pull/13684/head] Base: [master] : No new tests 
found!|borderStyle=dashed|borderColor=#ccc|titleBGColor=#F7D6C1}{panel}
[TeamCity *--> Run :: All* 
Results|https://ci2.ignite.apache.org/viewLog.html?buildId=9409152&buildTypeId=IgniteTests24Java8_RunAll]
{color:#ffffff}tcbot-analysis-comment chainBuildId=9409152 
rerunBuildIds=none{color}

> Fix flaky ViewsIntegrationTest.testSchemaCleaning
> -------------------------------------------------
>
>                 Key: IGNITE-29136
>                 URL: https://issues.apache.org/jira/browse/IGNITE-29136
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Dmitry Werner
>            Assignee: Dmitry Werner
>            Priority: Minor
>
> *Summary:*
> `ViewsIntegrationTest.testSchemaCleaning` fails intermittently: SQL view is 
> still visible in `sys.views` right after the schema cache is destroyed.
> https://ci2.ignite.apache.org/test/-4439343006317346895?currentProjectId=IgniteTests24Java8&branch=%3Cdefault%3E
> Stacktrace:
> java.lang.AssertionError: Unexpected views count 
> [grid=integration.ViewsIntegrationTest2, schemaName=CACHE1, viewName=MY_VIEW]
>     at 
> org.apache.ignite.internal.processors.query.calcite.integration.ViewsIntegrationTest.assertViewsCount(ViewsIntegrationTest.java:411)
>     at 
> org.apache.ignite.internal.processors.query.calcite.integration.ViewsIntegrationTest.testSchemaCleaning(ViewsIntegrationTest.java:189)
> Caused by: java.lang.AssertionError: expected:<0> but was:<1>
> The failing parameterization is `[2]` = `IndexingQueryEngineConfiguration` 
> (H2 engine); the Calcite parameterization `[1]` passed. The whole test 
> completed in 0.451 s (node uptimes 0.15–0.40 s) on a heavily loaded agent.
> *Root cause*
> `testSchemaCleaning` asserts that a view created in the cache's SQL schema 
> disappears from `sys.views` immediately after the cache is destroyed 
> (ViewsIntegrationTest.java:186-189). However, view cleanup is applied on 
> nodes **asynchronously** relative to `destroyCache` completion:
> 1. `client.destroyCache("CACHE1")` finishes the synchronous destroy exchange; 
> on every node `SchemaManager.onCacheStopped` drops the SQL schema when its 
> usage count reaches zero (core: `SchemaManager.java:420-466`).
> 2. Removal of SQL views tied to the dropped schema is *not* part of that 
> synchronous path: `SchemaManager.java:460` calls 
> `SchemaSqlViewManager.clearSchemaViews(schemaName)` 
> (`SchemaSqlViewManager.java:120-137`), which runs **only on the coordinator** 
> and deletes the `ignite.sql.view.<schema>.*` metastorage keys via 
> `metastorage.removeAsync(k)` — **the returned future is ignored** 
> (fire-and-forget).
> 3. The actual local view removal on every node happens later, via a 
> metastorage notification round trip: 
> `DistributedMetaStorageImpl.onGridDataReceived` → 
> `SchemaSqlViewManager.processMetastorageUpdate` 
> (`SchemaSqlViewManager.java:150-164`) → `SchemaManager.dropView` → 
> `H2SchemaManager.onViewDropped`.
> 4. The test queries `sys.views` locally on all grids without waiting, so a 
> node that has not yet processed the metastorage update still lists 
> `CACHE1.MY_VIEW` → `expected:<0> but was:<1>`.
> The same family of races is visible in the log as benign 
> `SchemaManager$CompoundSchemaChangeListener "Failed to notify listener (will 
> ignore): Failed to create view: MY_VIEW — Table "MY_TABLE" not found"` 
> warnings during node joins of sibling tests — metastorage view updates 
> replaying ahead of the local SQL schema state.
> *Proposed fix*
> Make `assertViewsCount` wait for convergence instead of asserting 
> immediately: poll all grids with `GridTestUtils.waitForCondition` (timeout 10 
> s) until every grid reports the expected count, and fail with a descriptive 
> message (grid, schema, view, expected count) on timeout. This covers both the 
> drop-side race (`cnt == 0` after `destroyCache`) and the symmetric 
> create-side race (`cnt == 1` after `CREATE VIEW`, which is propagated through 
> the metastorage the same way). No product code changes; the semantic that 
> `destroyCache` does not guarantee metastorage view cleanup propagation is 
> left untouched.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to