hazelcast / hazelcast/hazelcast-code-samples

RingbufferStore does not support byte[] as type parameter.

Open
#417 1 comment 0 reactions 1 assignee Claimed by @mmedenjak View on GitHub
Dominant language
Java
Stars
558
Forks
600
PR merge metrics
No merged PRs in 30d

Description

https://github.com/hazelcast/hazelcast-code-samples/blob/e640f3ea1c3659e954e4dcfc91f55079675314a5/distributed-collections/ringbufferstore/src/main/java/TheRingbufferBinaryStore.java#L11

**Version**:

`3.4.11` ( Although I just checked the `4.x` code and it has the same problem )

**Description**:

When implementing a `RingbufferStore` as in the example, when `storeAll` is invoked it will fail with a `ClassCastException`. This is because the `RingbufferStoreWrapper` converts the data into an `Object` array before trying to call the main `RingBufferStore`. An `Object[]` cannot be cast into an `byte[][]` so it fails to properly cast the data.

**Example**:
```
public class SimpleRingBufferStore implements RingbufferStore
{
public void store(final long sequence, final byte[] data) {}
public void storeAll(long firstItemSequence, byte[] [] items) {}
public byte[] load(long sequence) { return new byte[0]; }
public long getLargestSequence() { return 0L; }
}

var hazelcastInstance = ... // configure with ring buffer store and binary mode
var ringbuffer = hazelcastInstance .getRingbuffer("test_ringbuffer");

// This will fail internally
ringbuffer.addAllAsync(asList("A", "B", "C"), OverflowPolicy.FAIL)
.get();

// This will work
ringbuffer.add("A");
ringbuffer.add("B");
ringbuffer.add("C");

```

**Solution**:

The solution seems to be change it to `RingBufferStore` and then casting it internally.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.