Skip to content

RingbufferStore does not support byte[] as type parameter. #417

@andrewfinnell

Description

@andrewfinnell

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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions