#!/usr/bin/env bash # Copyright 2016 The Kubernetes Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. set -euo pipefail proc sql { # TODO(knz): Why does the more idiomatic read from stdin not produce any # output? kubectl exec "cockroachdb-${1}" -- /cockroach/cockroach sql \ --host "cockroachdb-${1}.cockroachdb" \ --insecure \ -e $(cat /dev/stdin) } proc kill { ! kubectl exec -t "cockroachdb-${1}" -- /bin/bash -c "while true; do kill 1; done" &> /dev/null } # Create database on second node (idempotently for convenience). cat <<< """ | sql 1 CREATE DATABASE IF NOT EXISTS foo; CREATE TABLE IF NOT EXISTS foo.bar (k STRING PRIMARY KEY, v STRING); UPSERT INTO foo.bar VALUES ('Kuber', 'netes'), ('Cockroach', 'DB'); """ sql 1 CREATE DATABASE IF NOT EXISTS foo; CREATE TABLE IF NOT EXISTS foo.bar (k STRING PRIMARY KEY, v STRING); UPSERT INTO foo.bar VALUES ('Kuber', 'netes'), ('Cockroach', 'DB'); EOF # Kill the node we just created the table on. kill 1 # Read the data from all other nodes (we could also read from the one we just # killed, but it's awkward to wait for it to respawn). for i in 0 2 3 4 { cat <<< """ | sql "${i}" SELECT CONCAT(k, v) FROM foo.bar; """ sql ${i} SELECT CONCAT(k, v) FROM foo.bar; EOF }