This is an automated email from the ASF dual-hosted git repository. chibenwa pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 7a2d2c792f19f2148b9e131328ba8c866be019f0 Author: Benoit TELLIER <[email protected]> AuthorDate: Sat Sep 5 00:40:00 2026 +0200 JAMES-4225 Remove unused messagev3.bodyOctets column in Cassandra --- .../mailbox/cassandra/mail/CassandraMessageDAOV3.java | 4 ---- .../modules/CassandraMessageDataDefinition.java | 1 - .../cassandra/table/CassandraMessageV3Table.java | 1 - upgrade-instructions.md | 17 +++++++++++++++++ 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java index 375d61bc93..4970131648 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java @@ -32,7 +32,6 @@ import static org.apache.james.blob.api.BlobStore.StoragePolicy.SIZE_BASED; import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MESSAGE_ID; import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.ATTACHMENTS; import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.BODY_CONTENT; -import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.BODY_OCTECTS; import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.BODY_START_OCTET; import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.FULL_CONTENT_OCTETS; import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.HEADER_CONTENT; @@ -158,7 +157,6 @@ public class CassandraMessageDAOV3 { .set(setColumn(INTERNAL_DATE, bindMarker(INTERNAL_DATE)), setColumn(BODY_START_OCTET, bindMarker(BODY_START_OCTET)), setColumn(FULL_CONTENT_OCTETS, bindMarker(FULL_CONTENT_OCTETS)), - setColumn(BODY_OCTECTS, bindMarker(BODY_OCTECTS)), setColumn(BODY_CONTENT, bindMarker(BODY_CONTENT)), setColumn(HEADER_CONTENT, bindMarker(HEADER_CONTENT)), prepend(ATTACHMENTS, bindMarker(ATTACHMENTS))) @@ -184,7 +182,6 @@ public class CassandraMessageDAOV3 { .setInstant(INTERNAL_DATE, message.getInternalDate().toInstant()) .setInt(BODY_START_OCTET, message.getBodyStartOctet()) .setLong(FULL_CONTENT_OCTETS, message.getSize()) - .setLong(BODY_OCTECTS, message.getSize() - message.getBodyStartOctet()) .setString(BODY_CONTENT, message.getBodyId().asString()) .setString(HEADER_CONTENT, message.getHeaderId().asString()); @@ -227,7 +224,6 @@ public class CassandraMessageDAOV3 { .setInstant(INTERNAL_DATE, message.getInternalDate().toInstant()) .setInt(BODY_START_OCTET, (int) (message.getHeaderOctets())) .setLong(FULL_CONTENT_OCTETS, message.getFullContentOctets()) - .setLong(BODY_OCTECTS, message.getBodyOctets()) .setString(BODY_CONTENT, pair.getT2().asString()) .setString(HEADER_CONTENT, pair.getT1().asString()) .setExecutionProfile(writeProfile); diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageDataDefinition.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageDataDefinition.java index e5b87ff04a..10a6bfaaf4 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageDataDefinition.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageDataDefinition.java @@ -100,7 +100,6 @@ public interface CassandraMessageDataDefinition { .withPartitionKey(CassandraMessageIds.MESSAGE_ID, TIMEUUID) .withColumn(CassandraMessageV3Table.INTERNAL_DATE, TIMESTAMP) .withColumn(CassandraMessageV3Table.BODY_START_OCTET, INT) - .withColumn(CassandraMessageV3Table.BODY_OCTECTS, BIGINT) .withColumn(CassandraMessageV3Table.FULL_CONTENT_OCTETS, BIGINT) .withColumn(CassandraMessageV3Table.BODY_CONTENT, TEXT) .withColumn(CassandraMessageV3Table.HEADER_CONTENT, TEXT) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV3Table.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV3Table.java index d78445fc08..975be16360 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV3Table.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV3Table.java @@ -27,7 +27,6 @@ public interface CassandraMessageV3Table { CqlIdentifier INTERNAL_DATE = CqlIdentifier.fromCql("internalDate"); CqlIdentifier BODY_START_OCTET = CqlIdentifier.fromCql("bodyStartOctet"); CqlIdentifier FULL_CONTENT_OCTETS = CqlIdentifier.fromCql("fullContentOctets"); - CqlIdentifier BODY_OCTECTS = CqlIdentifier.fromCql("bodyOctets"); CqlIdentifier BODY_CONTENT = CqlIdentifier.fromCql("bodyContent"); CqlIdentifier HEADER_CONTENT = CqlIdentifier.fromCql("headerContent"); CqlIdentifier ATTACHMENTS = CqlIdentifier.fromCql("attachments"); diff --git a/upgrade-instructions.md b/upgrade-instructions.md index 2dd12243b5..b70cc0d643 100644 --- a/upgrade-instructions.md +++ b/upgrade-instructions.md @@ -23,6 +23,7 @@ Change list: - [JAMES-4210 POP3 USER/PASS requires TLS by default](#james-4210-pop3-userpass-requires-tls-by-default) - [JAMES-4210 ManageSieve SASL adoption](#james-4210-managesieve-sasl-adoption) - [JAMES-4225 Blob ids default to 128 bits of entropy](#james-4225-blob-ids-default-to-128-bits-of-entropy) + - [Dropping the bodyOctets column of the Cassandra messagev3 table](#dropping-the-bodyoctets-column-of-the-cassandra-messagev3-table) ### JAMES-4225 Blob ids default to 128 bits of entropy @@ -41,6 +42,22 @@ against its shorter counterpart until it is rewritten. To keep the previous beha james.blobid.entropy=256 ``` +### Dropping the bodyOctets column of the Cassandra messagev3 table + +Date: 05/09/2026 + +Concerned products: James products using Cassandra as mailbox storage + +The `messagev3.bodyOctets` column was written upon every message save but never read back: the body size +is derived from `fullContentOctets` and `bodyStartOctet`. James no longer writes it. + +New messages stop paying for the column right away. Reclaiming the space taken by existing rows requires +dropping the column manually, after upgrading all james servers: + +```sql +ALTER TABLE james_keyspace.messagev3 DROP bodyOctets; +``` + ### JAMES-4210 POP3 USER/PASS requires TLS by default Date: 16/07/2026 --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
