-
Notifications
You must be signed in to change notification settings - Fork 603
Open
Milestone
Description
Line 11 in e640f3e
| public void storeAll(long firstItemSequence, byte[][] items) { |
Version:
3.4.11 ( Although I just checked the 4.x code and it has the same problem )
Description:
When implementing a RingbufferStore<byte[]> 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<byte[]>
{
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<Object> and then casting it internally.