You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

IDIEP-70
Author
Sponsor
Created

  

Status
DRAFT


Motivation

Cache and Compute async operations invoke the future listeners on Ignite thread pools, such as Public pool and Striped pool:

IgniteFuture fut = cache.putAsync(1, 1);
fut.listen(f -> {
    // Executes on Striped pool and causes a deadlock
    cache.replace(1, 2);
});

Users are supposed to be aware of this and handle it manually, however:

  • This behavior is unexpected
  • Users should carefully read the docs to know about this
  • Handling this manually is verbose and error-prone

The problem is more pronounced in Ignite.NET:

  • async/await exists for a long time and most code bases are async
  • async/await sugar somewhat makes this less obvious
  • custom thread pools are less common
await cache.PutAsync(1, 1);
// Now we are on a Striped pool!

// CPU-heavy method blocks the stripe and cache ops are stalled
RunSomething();


Description

// Provide the design of the solution.

Risks and Assumptions

// Describe project risks, such as API or binary compatibility issues, major protocol changes, etc.

Discussion Links

// Links to discussions on the devlist, if applicable.

Reference Links

// Links to various reference documents, if applicable.

Tickets


key summary type created updated due assignee reporter priority status resolution

JQL and issue key arguments for this macro require at least one Jira application link to be configured

  • No labels