hazelcast / hazelcast/hazelcast-code-samples
RingbufferStore does not support byte[] as type parameter.
- 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.