|
| 1 | +#!/bin/bash |
| 2 | +# the script test when we enable syncpoint, and pause the changefeed, |
| 3 | +# then resume with a forward checkpoint, to ensure the changefeed can be sync correctly. |
| 4 | + |
| 5 | +set -eux |
| 6 | + |
| 7 | +CUR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) |
| 8 | +source $CUR/../_utils/test_prepare |
| 9 | +WORK_DIR=$OUT_DIR/$TEST_NAME |
| 10 | +CDC_BINARY=cdc.test |
| 11 | +SINK_TYPE=$1 |
| 12 | + |
| 13 | +function check_ts_forward() { |
| 14 | + changefeedid=$1 |
| 15 | + rts1=$(cdc cli changefeed query --changefeed-id=${changefeedid} 2>&1 | jq '.resolved_ts') |
| 16 | + checkpoint1=$(cdc cli changefeed query --changefeed-id=${changefeedid} 2>&1 | jq '.checkpoint_tso') |
| 17 | + sleep 1 |
| 18 | + rts2=$(cdc cli changefeed query --changefeed-id=${changefeedid} 2>&1 | jq '.resolved_ts') |
| 19 | + checkpoint2=$(cdc cli changefeed query --changefeed-id=${changefeedid} 2>&1 | jq '.checkpoint_tso') |
| 20 | + if [[ "$rts1" != "null" ]] && [[ "$rts1" != "0" ]]; then |
| 21 | + if [[ "$rts1" -ne "$rts2" ]] || [[ "$checkpoint1" -ne "$checkpoint2" ]]; then |
| 22 | + echo "changefeed is working normally rts: ${rts1}->${rts2} checkpoint: ${checkpoint1}->${checkpoint2}" |
| 23 | + return |
| 24 | + fi |
| 25 | + fi |
| 26 | + exit 1 |
| 27 | +} |
| 28 | + |
| 29 | +function run() { |
| 30 | + # No need to test kafka and storage sink. |
| 31 | + if [ "$SINK_TYPE" != "mysql" ]; then |
| 32 | + return |
| 33 | + fi |
| 34 | + |
| 35 | + rm -rf $WORK_DIR && mkdir -p $WORK_DIR |
| 36 | + |
| 37 | + start_tidb_cluster --workdir $WORK_DIR |
| 38 | + |
| 39 | + cd $WORK_DIR |
| 40 | + |
| 41 | + run_cdc_server --workdir $WORK_DIR --binary $CDC_BINARY |
| 42 | + |
| 43 | + SINK_URI= "mysql://[email protected]:3306/" |
| 44 | + run_cdc_cli changefeed create --sink-uri="$SINK_URI" --config=$CUR/conf/changefeed.toml --changefeed-id="test4" |
| 45 | + |
| 46 | + check_ts_forward "test4" |
| 47 | + |
| 48 | + run_cdc_cli changefeed pause --changefeed-id="test4" |
| 49 | + |
| 50 | + sleep 15 |
| 51 | + |
| 52 | + checkpoint1=$(cdc cli changefeed query --changefeed-id="test4" 2>&1 | jq '.checkpoint_tso') |
| 53 | + # add a large number to avoid the problem of losing precision when jq processing large integers |
| 54 | + checkpoint1=$((checkpoint1 + 1000000)) |
| 55 | + |
| 56 | + # resume a forward checkpointTs |
| 57 | + run_cdc_cli changefeed resume --changefeed-id="test4" --no-confirm --overwrite-checkpoint-ts=$checkpoint1 |
| 58 | + |
| 59 | + check_ts_forward "test4" |
| 60 | + |
| 61 | + cleanup_process $CDC_BINARY |
| 62 | +} |
| 63 | + |
| 64 | +trap stop_tidb_cluster EXIT |
| 65 | +run $* |
| 66 | +check_logs $WORK_DIR |
| 67 | +echo "[$(date)] <<<<<< run test case $TEST_NAME success! >>>>>>" |
0 commit comments