Skip to content

Cache control is not working as expected in v1.5.0 [BUG]Β #10109

@andry-brill

Description

@andry-brill

First of all, I’d like to thank everyone who introduced and developed this feature. πŸ‘

Describe the bug

Cache disabling doesn’t work for instant queries that run without any delay.

To Reproduce
I made a test using Java + Cube REST API like this (see java code + logging at the end)

  • added old entity to DB
  • GET load / entity id, count(id)
  • returned only old one βœ…
  • added new entity to DB
  • GET load / entity id, count(id) (mainly to test cache)
  • returned only old one βœ…
  • GET load / entity id, count(id) with cache = "no-cache"
  • Still returned only old one πŸ”΄

Expected behavior
Both entities should be returned when cache = "no-cache"

Version:
1.5.0

Additional context

If you need more logs or details, just let me know.

Java test


    @Test
    public void testCubeCache() {

        var oldMerchant = dataService.merchantBuilder()
                .withName("Old Cube Merchant")
                .save();

        var dto = new ReportQueryDto();
        dto.measures = List.of(Cube.merchant_id__count);
        dto.dimensions = List.of(Cube.merchant_id);
        dto.orderDescBy(Cube.merchant_id);
        dto.size = 3;

        var query = dto.build();

        var result = cubeJsService.load(walletId(), query, true);  // true = use cache
        assertTrue(containsMerchantId(result, oldMerchant.getId()));

        var newMerchant = dataService.merchantBuilder()
                .withName("New Cube Merchant")
                .save();

        assertTrue(newMerchant.getId() > oldMerchant.getId());

        var result2 = cubeJsService.load(walletId(), query, true);
        assertTrue(containsMerchantId(result2, oldMerchant.getId()));
        assertFalse(containsMerchantId(result2, newMerchant.getId()));

        var result3 = cubeJsService.load(walletId(), query, false); // false = no cache
        assertTrue(containsMerchantId(result3, oldMerchant.getId()));
        // fails on this line as resutl3 contains only one line with old one
        assertTrue(containsMerchantId(result3, newMerchant.getId())); 
    }

Cube logging

[CUBE] STDOUT: πŸ”₯ Cube Store (1.5.0) is assigned to 3030 port.
[CUBE] STDOUT: πŸ”“ Authentication checks are disabled in developer mode. Please use NODE_ENV=production to enable it.
[CUBE] STDOUT: πŸ¦… Dev environment available at http://localhost:4000
[CUBE] STDOUT: πŸ”— Cube SQL (pg) is listening on 0.0.0.0:15432
[CUBE] STDOUT: πŸš€ Cube API server (1.5.0) is listening on 4000

[CUBE] STDOUT: Executing SQL: 85fd74f9-5309-4ca0-8b52-66284ef9901c-span-1 
[CUBE] STDOUT: --
[CUBE] STDOUT:   SELECT
[CUBE] STDOUT:       "merchant".id "merchant__id", count("merchant".id) "merchant__id__count"
[CUBE] STDOUT:     FROM
[CUBE] STDOUT:       merchant AS "merchant"  WHERE ("merchant".wallet_id = '373662154753') GROUP BY 1 ORDER BY 1 DESC LIMIT 3
[CUBE] STDOUT: --
[CUBE] STDOUT: Performing query completed: 85fd74f9-5309-4ca0-8b52-66284ef9901c-span-1 (8ms)
[CUBE] STDOUT: Load Request Success: 85fd74f9-5309-4ca0-8b52-66284ef9901c-span-1 (221ms)
[CUBE] STDOUT: --
[CUBE] STDOUT: {
[CUBE] STDOUT:   "measures": [
[CUBE] STDOUT:     "merchant.id__count"
[CUBE] STDOUT:   ],
[CUBE] STDOUT:   "dimensions": [
[CUBE] STDOUT:     "merchant.id"
[CUBE] STDOUT:   ],
[CUBE] STDOUT:   "segments": [],
[CUBE] STDOUT:   "timeDimensions": [],
[CUBE] STDOUT:   "filters": [],
[CUBE] STDOUT:   "limit": 3,
[CUBE] STDOUT:   "offset": 0,
[CUBE] STDOUT:   "order": {
[CUBE] STDOUT:     "merchant.id": "desc"
[CUBE] STDOUT:   },
[CUBE] STDOUT:   "timezone": "UTC",
[CUBE] STDOUT:   "cacheMode": "stale-if-slow"
[CUBE] STDOUT: }

DEBUG 36144 --- HTTP POST http://localhost:43120/cubejs-api/v1/load
DEBUG 36144 --- Accept=[application/json, application/*+json]
DEBUG 36144 --- Writing 
[CUBE] STDOUT: Load Request Success: 424566f5-eab8-4132-b87c-326a1ce89e1c-span-1 (180ms)
[CUBE] STDOUT: --
[CUBE] STDOUT: {
[CUBE] STDOUT:   "measures": [
[CUBE] STDOUT:     "merchant.id__count"
[CUBE] STDOUT:   ],
[CUBE] STDOUT:   "dimensions": [
[CUBE] STDOUT:     "merchant.id"
[CUBE] STDOUT:   ],
[CUBE] STDOUT:   "segments": [],
[CUBE] STDOUT:   "timeDimensions": [],
[CUBE] STDOUT:   "filters": [],
[CUBE] STDOUT:   "limit": 3,
[CUBE] STDOUT:   "offset": 0,
[CUBE] STDOUT:   "order": {
[CUBE] STDOUT:     "merchant.id": "desc"
[CUBE] STDOUT:   },
[CUBE] STDOUT:   "timezone": "UTC",
[CUBE] STDOUT:   "cacheMode": "stale-if-slow"
[CUBE] STDOUT: }
[CUBE] STDOUT: --
DEBUG 36144 --- HTTP POST http://localhost:43120/cubejs-api/v1/load
DEBUG 36144 --- Accept=[application/json, application/*+json]
[CUBE] STDOUT: Load Request Success: e6ea74b5-ff56-46a6-8404-7a9c32f15664-span-1 (155ms)
[CUBE] STDOUT: --
[CUBE] STDOUT: {
[CUBE] STDOUT:   "measures": [
[CUBE] STDOUT:     "merchant.id__count"
[CUBE] STDOUT:   ],
[CUBE] STDOUT:   "dimensions": [
[CUBE] STDOUT:     "merchant.id"
[CUBE] STDOUT:   ],
[CUBE] STDOUT:   "segments": [],
[CUBE] STDOUT:   "timeDimensions": [],
[CUBE] STDOUT:   "filters": [],
[CUBE] STDOUT:   "limit": 3,
[CUBE] STDOUT:   "offset": 0,
[CUBE] STDOUT:   "order": {
[CUBE] STDOUT:     "merchant.id": "desc"
[CUBE] STDOUT:   },
[CUBE] STDOUT:   "timezone": "UTC",
[CUBE] STDOUT:   "cacheMode": "no-cache"
[CUBE] STDOUT: }
[CUBE] STDOUT: --

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions