Hi,

I'm new to the list but not new to Cassandra. I'm writing an app on top of
C* and I have come across an issue (huge cell buffer size after applying a
mutation) that I haven't been able to resolve yet. I would appreciate any
suggestions/help to resolve this. Here are the details:

1. I have a column family defined as follows:

TableMetadata.Builder metadata =
TableMetadata
    .builder(KEYSPACE1, CF_STANDARD1)
    .addPartitionKeyColumn("key", Int32Type.instance)
    .addRegularColumn(
    "a",
    MapType.getInstance(AsciiType.instance,
SetType.getInstance(UTF8Type.instance,false),false))
    .addRegularColumn("b", UTF8Type.instance);

2. And here's a test that I wrote and works on cassandra-4.0 branch:

Row.Builder builder = BTreeRow.unsortedBuilder();
builder.newRow(Clustering.EMPTY);

ColumnMetadata def = metadata.getColumn(new ColumnIdentifier("b", true));

Cell<?> cell = BufferCell.live(def, System.currentTimeMillis(),
UTF8Type.instance.decompose("/b1"));
builder.addCell(cell);

PartitionUpdate update = PartitionUpdate.singleRowUpdate(metadata, dk,
builder.build());
new Mutation(update).apply();

Row row = Util.getOnlyRow(Util.cmd(cfs, dk).withLimit(1).build());
assertEquals(3, row.getCell(def).buffer().array().length);

3. However, in my app when I do the getOnlyRow after applying the mutation
the string value of b is 3 but the buffer().array().length is 1048576.

4. Restarting the app (which starts the cassandra daemon), fixes the issue
i.e. getOnlyRow returns the correct buffer size.

5. I'm importing cassandra-all 4.0.1 and the app uses jdk-11.

If you need further info, please do not hesitate to ask.

- Neophytos

PS. I'm experimenting with C* internals for the first time so it's very
likely I'm doing something wrong.

Reply via email to