Skip to content

Map with Near Cache causes get_all operations to fail with exception. #701

@pegwymonie

Description

@pegwymonie

This code will replicate the issue.
Running the Hazelcast Python Client 5.5.0 driver, with a 3 node cluster running community 5.5.
Downgrading did not fix the issue.
Exception was cannot convert dictionary update sequence element #0 to a sequence

import time
import uuid

import hazelcast
from hazelcast.config import NearCacheConfig, InMemoryFormat

test_size = 10000

test_target_near_cache_config = NearCacheConfig()
test_target_near_cache_config.in_memory_format = InMemoryFormat.BINARY
test_target_near_cache_config.time_to_live = 30
test_target_near_cache_config.max_idle = 15
test_target_near_cache_config.eviction_max_size = test_size * 2

client = hazelcast.HazelcastClient(
    cluster_name="hazelcast",
    cluster_members=[...
    ],
    near_caches={
       "test-target-nc": test_target_near_cache_config
    }
)

nc_map = client.get_map('test-target-nc')
uc_map = client.get_map('test-target-uc')

def readSingle(map, keys):
    try:
        startms = round(time.time() * 1000)
        futures = []
        for key in keys:
            futures.append(map.get(key))
        for future in futures:
            future.result()
        endms = round(time.time()* 1000)
        print(f"total time: {endms - startms:0.2f}ms")
        print(f"op    time: {(endms - startms)/(len(keys)):0.2f}ms")
    except Exception as e:
        print("operation failed", e)

def readMulti(map, keys):
    try:
        startms = round(time.time() * 1000)
        map.get_all(keys).result()
        endms = round(time.time()* 1000)
        print(f"total time: {endms - startms:0.2f}ms")
        print(f"op    time: {(endms - startms)/(len(keys)):0.2f}ms")
    except Exception as e:
        print("operation failed", e)



content = {}
for index in range(0, test_size):
    id = uuid.uuid4()
    value = uuid.uuid4()
    content[id] = value

keys = list(content.keys())

nc_map.put_all(content)
uc_map.put_all(content)

print("Warm Near Cache")
futures = []
for key in keys:
    futures.append(nc_map.get(key))
for future in futures:
    future.result()

print('Read Single, No Cache')
readSingle(uc_map, keys)
print('Read Single, With Cache')
readSingle(nc_map, keys)
print('Read Multi, No Cache')
readMulti(uc_map, keys)
print('Read Multi, With Cache')
readMulti(nc_map, keys)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions