Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- Prevent panic with queries during session init (CASSGO-92)
- Return correct values from RowData (CASSGO-95)
- Prevent setting a compression flag in a frame header when native proto v5 is being used (CASSGO-98)

## [2.0.0]

Expand Down
2 changes: 1 addition & 1 deletion frame.go
Original file line number Diff line number Diff line change
Expand Up @@ -393,7 +393,7 @@ func newFramer(compressor Compressor, version byte, r *RegisteredTypes) *framer
types: r,
}
var flags byte
if compressor != nil {
if compressor != nil && version < protoVersion5 {
flags |= flagCompress
}

Expand Down
57 changes: 57 additions & 0 deletions frame_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ import (
"reflect"
"testing"

"github.com/apache/cassandra-gocql-driver/v2/lz4"
"github.com/apache/cassandra-gocql-driver/v2/snappy"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
Expand Down Expand Up @@ -836,3 +838,58 @@ func BenchmarkFramerReadCol_Set(b *testing.B) {
_ = framer.readCol(&col, nil, true, "", "")
}
}

func Test_newFrame_compressionFlag(t *testing.T) {
tests := []struct {
name string
protoVersion protoVersion
compressor Compressor
expectedFlags byte
}{
{
name: "proto3-nil-compressor",
protoVersion: protoVersion3,
compressor: nil,
expectedFlags: 0, // no flags
},
{
name: "proto3-snappy-compressor",
protoVersion: protoVersion3,
compressor: snappy.SnappyCompressor{},
expectedFlags: 0b1, // compressions is enabled
},
{
name: "proto4-nil-compressor",
protoVersion: protoVersion4,
compressor: nil,
expectedFlags: 0,
},
{
name: "proto4-snappy-compressor",
protoVersion: protoVersion4,
compressor: snappy.SnappyCompressor{},
expectedFlags: 0b1,
},
{
name: "proto5-nil-compressor",
protoVersion: protoVersion5,
compressor: nil,
expectedFlags: 0,
},
{
// In protocol v5 compression happens on the segment level (v5 new frame format). The body of the frame (envelope)
// is not compressed, so we don't have to set compression flag in the frame header
name: "proto5-lz4-compressor-no-compression-flag",
protoVersion: protoVersion5,
compressor: lz4.LZ4Compressor{},
expectedFlags: 0,
},
}

for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
f := newFramer(test.compressor, byte(test.protoVersion), GlobalTypes)
require.Equal(t, test.expectedFlags, f.flags)
})
}
}