Skip to content

Commit a88335e

Browse files
feature(cluster): add scylla cluster for local testing
Signed-off-by: Dusan Malusev <dusan.malusev@scylladb.com>
1 parent 3e95898 commit a88335e

8 files changed

+88
-25
lines changed

Makefile

+32-5
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@ MODE ?= mixed
1515
DATASET_SIZE ?= large
1616
SEED ?= $(shell date +%s)
1717
GEMINI_BINARY ?= $(PWD)/bin/gemini
18-
GEMINI_TEST_CLUSTER ?= $(shell docker inspect --format='{{ .NetworkSettings.Networks.gemini.IPAddress }}' gemini-test)
19-
GEMINI_ORACLE_CLUSTER ?= $(shell docker inspect --format='{{ .NetworkSettings.Networks.gemini.IPAddress }}' gemini-oracle)
2018
GEMINI_DOCKER_NETWORK ?= gemini
19+
20+
define get_scylla_ip
21+
$(shell docker inspect --format "{{ .NetworkSettings.Networks.$(GEMINI_DOCKER_NETWORK).IPAddress }}" "$(1)")
22+
endef
23+
2124
GEMINI_FLAGS ?= --fail-fast \
2225
--level=info \
2326
--consistency=QUORUM \
@@ -93,6 +96,19 @@ scylla-setup:
9396
scylla-shutdown:
9497
@docker compose -f docker/docker-compose-$(DOCKER_COMPOSE_TESTING).yml down --volumes
9598

99+
.PHONY: scylla-setup-cluster
100+
scylla-setup-cluster:
101+
@docker compose -f docker/docker-compose-scylla-cluster.yml up -d --wait
102+
103+
until docker logs gemini-oracle 2>&1 | grep "Starting listening for CQL clients" > /dev/null; do sleep 0.2; done
104+
until docker logs gemini-test-1 2>&1 | grep "Starting listening for CQL clients" > /dev/null; do sleep 0.2; done
105+
until docker logs gemini-test-2 2>&1 | grep "Starting listening for CQL clients" > /dev/null; do sleep 0.2; done
106+
until docker logs gemini-test-3 2>&1 | grep "Starting listening for CQL clients" > /dev/null; do sleep 0.2; done
107+
108+
.PHONY: scylla-shutdown-cluster
109+
scylla-shutdown-cluster:
110+
@docker compose -f docker/docker-compose-scylla-cluster.yml down --volumes
111+
96112
.PHONY: test
97113
test:
98114
@go test -covermode=atomic -tags testing -race -coverprofile=coverage.txt -timeout 5m -json -v ./... 2>&1 | gotestfmt -showteststatus
@@ -141,11 +157,22 @@ integration-test:
141157
@mkdir -p $(PWD)/results
142158
@touch $(PWD)/results/gemini_seed
143159
@echo $(GEMINI_SEED) > $(PWD)/results/gemini_seed
144-
@$(GEMINI_BINARY) \
145-
--test-cluster=$(GEMINI_TEST_CLUSTER) \
146-
--oracle-cluster=$(GEMINI_ORACLE_CLUSTER) \
160+
$(GEMINI_BINARY) \
161+
--test-cluster="$(call get_scylla_ip,gemini-test)" \
162+
--oracle-cluster="$(call get_scylla_ip,gemini-oracle)" \
147163
$(GEMINI_FLAGS)
148164

165+
.PHONY: integration-cluster-test
166+
integration-cluster-test:
167+
@mkdir -p $(PWD)/results
168+
@touch $(PWD)/results/gemini_seed
169+
@echo $(GEMINI_SEED) > $(PWD)/results/gemini_seed
170+
$(GEMINI_BINARY) \
171+
--test-cluster="$(call get_scylla_ip,gemini-test-1),$(call get_scylla_ip,gemini-test-2),$(call get_scylla_ip,gemini-test-3)" \
172+
--oracle-cluster="$(call get_scylla_ip,gemini-oracle)" \
173+
$(GEMINI_FLAGS)
174+
175+
149176
.PHONY: clean
150177
clean: clean-bin clean-results
151178

cmd/gemini/root.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,6 @@ func run(_ *cobra.Command, _ []string) error {
200200
gocql.ParseConsistency(consistency),
201201
testHostSelectionPolicy,
202202
oracleHostSelectionPolicy,
203-
logger,
204203
)
205204

206205
storeConfig := store.Config{
@@ -331,8 +330,15 @@ func createLogger(level string) *zap.Logger {
331330
func createClusters(
332331
consistency gocql.Consistency,
333332
testHostSelectionPolicy, oracleHostSelectionPolicy gocql.HostSelectionPolicy,
334-
logger *zap.Logger,
335333
) (*gocql.ClusterConfig, *gocql.ClusterConfig) {
334+
for i := range len(testClusterHost) {
335+
testClusterHost[i] = strings.TrimSpace(testClusterHost[i])
336+
}
337+
338+
for i := range len(oracleClusterHost) {
339+
oracleClusterHost[i] = strings.TrimSpace(oracleClusterHost[i])
340+
}
341+
336342
testCluster := gocql.NewCluster(testClusterHost...)
337343
testCluster.Timeout = requestTimeout
338344
testCluster.ConnectTimeout = connectTimeout
+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
networks:
2+
gemini:
3+
name: gemini
4+
driver: bridge
5+
ipam:
6+
driver: default
7+
config:
8+
- subnet: 192.168.100.0/24
9+
10+
services:
11+
gemini-oracle:
12+
image: scylladb/scylla:${SCYLLA_ORACLE_VERSION:-6.2}
13+
container_name: gemini-oracle
14+
restart: unless-stopped
15+
command: --smp 4 --memory 2048M --api-address 0.0.0.0
16+
networks:
17+
gemini:
18+
ipv4_address: 192.168.100.2
19+
20+
gemini-test-1:
21+
image: scylladb/scylla:${SCYLLA_TEST_VERSION:-6.2}
22+
container_name: gemini-test-1
23+
restart: unless-stopped
24+
command: --smp 2 --memory 1024M --api-address 0.0.0.0
25+
networks:
26+
gemini:
27+
ipv4_address: 192.168.100.3
28+
gemini-test-2:
29+
image: scylladb/scylla:${SCYLLA_TEST_VERSION:-6.2}
30+
container_name: gemini-test-2
31+
restart: unless-stopped
32+
command: --smp 2 --memory 1024M --api-address 0.0.0.0 --seeds=gemini-test-1
33+
networks:
34+
gemini:
35+
ipv4_address: 192.168.100.4
36+
gemini-test-3:
37+
image: scylladb/scylla:${SCYLLA_TEST_VERSION:-6.2}
38+
container_name: gemini-test-3
39+
restart: unless-stopped
40+
command: --smp 2 --memory 1024M --api-address 0.0.0.0 --seeds=gemini-test-1
41+
networks:
42+
gemini:
43+
ipv4_address: 192.168.100.5

pkg/jobs/gen_check_stmt_test.go

-9
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ func TestGenSingleIndexQuery(t *testing.T) {
149149
}
150150

151151
func BenchmarkGenSinglePartitionQuery(t *testing.B) {
152-
153152
for idx := range genSinglePartitionQueryCases {
154153
caseName := genSinglePartitionQueryCases[idx]
155154
t.Run(caseName,
@@ -164,7 +163,6 @@ func BenchmarkGenSinglePartitionQuery(t *testing.B) {
164163
}
165164

166165
func BenchmarkGenSinglePartitionQueryMv(t *testing.B) {
167-
168166
for idx := range genSinglePartitionQueryMvCases {
169167
caseName := genSinglePartitionQueryMvCases[idx]
170168
t.Run(caseName,
@@ -180,7 +178,6 @@ func BenchmarkGenSinglePartitionQueryMv(t *testing.B) {
180178
}
181179

182180
func BenchmarkGenMultiplePartitionQuery(t *testing.B) {
183-
184181
for idx := range genMultiplePartitionQueryCases {
185182
caseName := genMultiplePartitionQueryCases[idx]
186183
t.Run(caseName,
@@ -196,7 +193,6 @@ func BenchmarkGenMultiplePartitionQuery(t *testing.B) {
196193
}
197194

198195
func BenchmarkGenMultiplePartitionQueryMv(t *testing.B) {
199-
200196
for idx := range genMultiplePartitionQueryMvCases {
201197
caseName := genMultiplePartitionQueryMvCases[idx]
202198
t.Run(caseName,
@@ -220,7 +216,6 @@ func BenchmarkGenMultiplePartitionQueryMv(t *testing.B) {
220216
}
221217

222218
func BenchmarkGenClusteringRangeQuery(t *testing.B) {
223-
224219
for idx := range genClusteringRangeQueryCases {
225220
caseName := genClusteringRangeQueryCases[idx]
226221
t.Run(caseName,
@@ -237,7 +232,6 @@ func BenchmarkGenClusteringRangeQuery(t *testing.B) {
237232
}
238233

239234
func BenchmarkGenClusteringRangeQueryMv(t *testing.B) {
240-
241235
for idx := range genClusteringRangeQueryMvCases {
242236
caseName := genClusteringRangeQueryMvCases[idx]
243237
t.Run(caseName,
@@ -261,7 +255,6 @@ func BenchmarkGenClusteringRangeQueryMv(t *testing.B) {
261255
}
262256

263257
func BenchmarkGenMultiplePartitionClusteringRangeQuery(t *testing.B) {
264-
265258
for idx := range genMultiplePartitionClusteringRangeQueryCases {
266259
caseName := genMultiplePartitionClusteringRangeQueryCases[idx]
267260
t.Run(caseName,
@@ -285,7 +278,6 @@ func BenchmarkGenMultiplePartitionClusteringRangeQuery(t *testing.B) {
285278
}
286279

287280
func BenchmarkGenMultiplePartitionClusteringRangeQueryMv(t *testing.B) {
288-
289281
for idx := range genMultiplePartitionClusteringRangeQueryMvCases {
290282
caseName := genMultiplePartitionClusteringRangeQueryMvCases[idx]
291283
t.Run(caseName,
@@ -310,7 +302,6 @@ func BenchmarkGenMultiplePartitionClusteringRangeQueryMv(t *testing.B) {
310302
}
311303

312304
func BenchmarkGenSingleIndexQuery(t *testing.B) {
313-
314305
for idx := range genSingleIndexQueryCases {
315306
caseName := genSingleIndexQueryCases[idx]
316307
t.Run(caseName,

pkg/jobs/gen_ddl_stmt_test.go

-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ func TestGenAddColumnStmt(t *testing.T) {
5151
}
5252

5353
func BenchmarkGenDropColumnStmt(t *testing.B) {
54-
5554
for idx := range genDropColumnStmtCases {
5655
caseName := genDropColumnStmtCases[idx]
5756
t.Run(caseName,
@@ -68,7 +67,6 @@ func BenchmarkGenDropColumnStmt(t *testing.B) {
6867
}
6968

7069
func BenchmarkGenAddColumnStmt(t *testing.B) {
71-
7270
for idx := range genAddColumnStmtCases {
7371
caseName := genAddColumnStmtCases[idx]
7472
t.Run(caseName,

pkg/jobs/gen_mutate_stmt_test.go

-4
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ func TestGenDeleteRows(t *testing.T) {
6666
}
6767

6868
func BenchmarkGenInsertStmt(t *testing.B) {
69-
7069
for idx := range genInsertStmtCases {
7170
caseName := genInsertStmtCases[idx]
7271
t.Run(caseName,
@@ -83,7 +82,6 @@ func BenchmarkGenInsertStmt(t *testing.B) {
8382
}
8483

8584
func BenchmarkGenInsertJSONStmt(t *testing.B) {
86-
8785
for idx := range genInsertJSONStmtCases {
8886
caseName := genInsertJSONStmtCases[idx]
8987
t.Run(caseName,
@@ -99,7 +97,6 @@ func BenchmarkGenInsertJSONStmt(t *testing.B) {
9997
}
10098

10199
func BenchmarkGenUpdateStmt(t *testing.B) {
102-
103100
for idx := range genUpdateStmtCases {
104101
caseName := genUpdateStmtCases[idx]
105102
t.Run(caseName,
@@ -115,7 +112,6 @@ func BenchmarkGenUpdateStmt(t *testing.B) {
115112
}
116113

117114
func BenchmarkGenDeleteRows(t *testing.B) {
118-
119115
for idx := range genDeleteStmtCases {
120116
caseName := genDeleteStmtCases[idx]
121117
t.Run(caseName,

pkg/store/helpers.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package store
1616

1717
import (
18+
"bytes"
1819
"fmt"
1920
"math/big"
2021
"strings"
@@ -49,7 +50,7 @@ func lt(mi, mj map[string]any) bool {
4950
switch mis := mi["pk0"].(type) {
5051
case []byte:
5152
mjs, _ := mj["pk0"].([]byte)
52-
return string(mis) < string(mjs)
53+
return bytes.Compare(mis, mjs) < 0
5354
case string:
5455
mjs, _ := mj["pk0"].(string)
5556
return mis < mjs
@@ -70,7 +71,7 @@ func lt(mi, mj map[string]any) bool {
7071
return mis < mjs
7172
case gocql.UUID:
7273
mjs, _ := mj["pk0"].(gocql.UUID)
73-
return mis.String() < mjs.String()
74+
return bytes.Compare(mis[:], mjs[:]) < 0
7475
case time.Time:
7576
mjs, _ := mj["pk0"].(time.Time)
7677
return mis.UnixNano() < mjs.UnixNano()

pkg/utils/utils.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import (
1818
"encoding/binary"
1919
"encoding/hex"
2020
"fmt"
21-
"github.com/pkg/errors"
2221
"io"
2322
"math/rand/v2"
2423
"os"
@@ -27,6 +26,8 @@ import (
2726
"strings"
2827
"time"
2928

29+
"github.com/pkg/errors"
30+
3031
"github.com/gocql/gocql"
3132
)
3233

0 commit comments

Comments
 (0)