Skip to content
Open
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
7 changes: 5 additions & 2 deletions hack/cleanup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,19 @@ cleanup_env() {
for env in "${ENVS_TO_CLEAN[@]}"; do
case $env in
rs)
cleanup_env "rs" "$SCRIPT_DIR/rs/compose.yml"
docker volume ls -q | grep -E '^rs[0-9]+' | xargs -r docker volume rm 2>/dev/null || true
cleanup_env "rs" "$SCRIPT_DIR/rs/compose.yml" "r1"
docker volume ls -q | grep -E '^r1_rs[0-9]+' | xargs -r docker volume rm 2>/dev/null || true
docker network ls -q --filter "name=r1_" | xargs -r docker network rm 2>/dev/null || true
;;
sh)
cleanup_env "sh" "$SCRIPT_DIR/sh/compose.yml" "s1"
docker volume ls -q | grep -E '^(src-|tgt-|s1_)' | xargs -r docker volume rm 2>/dev/null || true
docker network ls -q --filter "name=s1_" | xargs -r docker network rm 2>/dev/null || true
;;
sh-ha)
cleanup_env "sh-ha" "$SCRIPT_DIR/sh-ha/compose.yml" "s1"
docker volume ls -q | grep -E '^s1_' | xargs -r docker volume rm 2>/dev/null || true
docker network ls -q --filter "name=s1_" | xargs -r docker network rm 2>/dev/null || true
;;
esac
done
Expand Down
70 changes: 61 additions & 9 deletions hack/rs/run.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
#!/usr/bin/env bash
# Start MongoDB replica sets for source and target
#
# Usage:
# ./run.sh # Default: start both rs0 and rs1
# RS_COUNT=1 ./run.sh # Start only rs0
# RS_COUNT=2 ./run.sh # Start both rs0 and rs1
#
# Limits: Max 2 replica sets (rs0 and rs1)
# Each replica set has 3 members (rs{N}0, rs{N}1, rs{N}2)
# Ports: rs0 uses 30000-30002, rs1 uses 30100-30102

export COMPOSE_PROJECT_NAME=r1

BASE=$(dirname "$(dirname "$0")")
echo "BASE=$BASE"

# shellcheck source=/dev/null
source "$BASE/util"
Expand All @@ -9,16 +22,55 @@ RDIR="$BASE/rs"

export compose="$RDIR/compose.yml"

dcf up -d rs00 rs01 rs02 rs10 rs11 rs12
# Port mappings for each replica set (must match compose.yml)
# rs0: 30000, 30001, 30002
# rs1: 30100, 30101, 30102
RS_PORTS=(
"30000 30001 30002"
"30100 30101 30102"
)

# Dynamically defined by the length of sets of ports
MAX_RS_COUNT=${#RS_PORTS[@]}

# Configuration: Number of replica sets to start
# Can be overridden with environment variable: RS_COUNT=1 ./run.sh
RS_COUNT="${RS_COUNT:-$MAX_RS_COUNT}"

if [ "$RS_COUNT" -gt "$MAX_RS_COUNT" ]; then
echo "ERROR: RS_COUNT=$RS_COUNT exceeds maximum $MAX_RS_COUNT"
echo "Available init scripts: $RDIR/mongo/scripts/rs{0..$((MAX_RS_COUNT-1))}.js"
exit 1
fi

if [ "$RS_COUNT" -lt 1 ]; then
echo "ERROR: RS_COUNT=$RS_COUNT must be at least 1"
exit 1
fi

echo "Starting $RS_COUNT replica set(s) (max: $MAX_RS_COUNT)"

# Build list of services to start and initialize each replica set
SERVICES=""
for rs_idx in $(seq 0 $((RS_COUNT - 1))); do
echo "Starting replica set rs${rs_idx}"
SERVICES="$SERVICES rs${rs_idx}0 rs${rs_idx}1 rs${rs_idx}2"
done

mwait "rs00:30000"
mwait "rs01:30001"
mwait "rs02:30002"
# Start the selected services
dcf up -d $SERVICES

rsinit "scripts/rs0" "rs00:30000"
# Initialize each replica set
for rs_idx in $(seq 0 $((RS_COUNT - 1))); do
# Get ports for this replica set
read -r -a PORTS <<< "${RS_PORTS[$rs_idx]}"

mwait "rs10:30100"
mwait "rs11:30101"
mwait "rs12:30102"
# Wait for all members
for member_idx in 0 1 2; do
PORT=${PORTS[$member_idx]}
mwait "rs${rs_idx}${member_idx}:${PORT}"
done

rsinit "scripts/rs1" "rs10:30100"
# Initialize replica set
rsinit "scripts/rs${rs_idx}" "rs${rs_idx}0:${PORTS[0]}"
done
137 changes: 76 additions & 61 deletions hack/sh/run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
# SRC_SHARDS=1 ./run.sh # Custom source shards, default target
# TGT_SHARDS=3 ./run.sh # Default source, custom target shards
# SRC_SHARDS=3 TGT_SHARDS=1 ./run.sh # Custom both
# SRC_SHARDS=0 TGT_SHARDS=2 ./run.sh # Target only
# SRC_SHARDS=2 TGT_SHARDS=0 ./run.sh # Source only
#
# Limits: Max 3 shards each for source and target
# Limits: Max 3 shards each for source and target (0 = skip source/target cluster)
# Services are named: src-rs{N}0 and tgt-rs{N}0 where N is the shard index (0-based)
# Ports: source shards start at 30000 (increment by 100), target shards at 40000

Expand Down Expand Up @@ -49,63 +51,76 @@ if [ "$TGT_SHARDS" -gt "$MAX_TGT_SHARDS" ]; then
exit 1
fi

echo "Starting source cluster with $SRC_SHARDS shards (max: $MAX_SRC_SHARDS)"
echo "Starting target cluster with $TGT_SHARDS shards (max: $MAX_TGT_SHARDS)"

# Build list of source shard services to start
SRC_SERVICES="src-cfg0"
for i in $(seq 0 $((SRC_SHARDS - 1))); do
SRC_SERVICES="$SRC_SERVICES src-rs${i}0"
done

# Start source config server and shards
dcf up -d $SRC_SERVICES

# Initialize source config server
mwait "src-cfg0:27000" && rsinit "src/cfg" "src-cfg0:27000"

# Initialize source shards
for i in $(seq 0 $((SRC_SHARDS - 1))); do
PORT=${SRC_SHARD_PORTS[$i]}
mwait "src-rs${i}0:${PORT}" && rsinit "src/rs${i}" "src-rs${i}0:${PORT}"
done

# Start source mongos
dcf up -d src-mongos && mwait "src-mongos:27017"

# Add source shards to cluster
ADD_SHARDS_CMD=""
for i in $(seq 0 $((SRC_SHARDS - 1))); do
PORT=${SRC_SHARD_PORTS[$i]}
ADD_SHARDS_CMD="${ADD_SHARDS_CMD}sh.addShard('rs${i}/src-rs${i}0:${PORT}'); "
done
msh "src-mongos:27017" --eval "$ADD_SHARDS_CMD"

# Build list of target shard services to start
TGT_SERVICES="tgt-cfg0"
for i in $(seq 0 $((TGT_SHARDS - 1))); do
TGT_SERVICES="$TGT_SERVICES tgt-rs${i}0"
done

# Start target config server and shards
dcf up -d $TGT_SERVICES

# Initialize target config server
mwait "tgt-cfg0:28000" && rsinit "tgt/cfg" "tgt-cfg0:28000"

# Initialize target shards
for i in $(seq 0 $((TGT_SHARDS - 1))); do
PORT=${TGT_SHARD_PORTS[$i]}
mwait "tgt-rs${i}0:${PORT}" && rsinit "tgt/rs${i}" "tgt-rs${i}0:${PORT}"
done

# Start target mongos
dcf up -d tgt-mongos && mwait "tgt-mongos:27017"

# Add target shards to cluster
ADD_SHARDS_CMD=""
for i in $(seq 0 $((TGT_SHARDS - 1))); do
PORT=${TGT_SHARD_PORTS[$i]}
ADD_SHARDS_CMD="${ADD_SHARDS_CMD}sh.addShard('rs${i}/tgt-rs${i}0:${PORT}'); "
done
msh "tgt-mongos:27017" --eval "$ADD_SHARDS_CMD"


# Start source sharded cluster only if SRC_SHARDS > 0
if [ "$SRC_SHARDS" -gt 0 ]; then
echo "Starting source cluster with $SRC_SHARDS shards (max: $MAX_SRC_SHARDS)"

# Build list of source shard services to start
SRC_SERVICES="src-cfg0"
for i in $(seq 0 $((SRC_SHARDS - 1))); do
SRC_SERVICES="$SRC_SERVICES src-rs${i}0"
done

# Start source config server and shards
dcf up -d $SRC_SERVICES

# Initialize source config server
mwait "src-cfg0:27000" && rsinit "src/cfg" "src-cfg0:27000"

# Initialize source shards
for i in $(seq 0 $((SRC_SHARDS - 1))); do
PORT=${SRC_SHARD_PORTS[$i]}
mwait "src-rs${i}0:${PORT}" && rsinit "src/rs${i}" "src-rs${i}0:${PORT}"
done

# Start source mongos
dcf up -d src-mongos && mwait "src-mongos:27017"

# Add source shards to cluster
ADD_SHARDS_CMD=""
for i in $(seq 0 $((SRC_SHARDS - 1))); do
PORT=${SRC_SHARD_PORTS[$i]}
ADD_SHARDS_CMD="${ADD_SHARDS_CMD}sh.addShard('rs${i}/src-rs${i}0:${PORT}'); "
done
msh "src-mongos:27017" --eval "$ADD_SHARDS_CMD"
else
echo "Skipping source cluster (SRC_SHARDS=0)"
fi

# Start target sharded cluster only if TGT_SHARDS > 0
if [ "$TGT_SHARDS" -gt 0 ]; then
echo "Starting target cluster with $TGT_SHARDS shards (max: $MAX_TGT_SHARDS)"

# Build list of target shard services to start
TGT_SERVICES="tgt-cfg0"
for i in $(seq 0 $((TGT_SHARDS - 1))); do
TGT_SERVICES="$TGT_SERVICES tgt-rs${i}0"
done

# Start target config server and shards
dcf up -d $TGT_SERVICES

# Initialize target config server
mwait "tgt-cfg0:28000" && rsinit "tgt/cfg" "tgt-cfg0:28000"

# Initialize target shards
for i in $(seq 0 $((TGT_SHARDS - 1))); do
PORT=${TGT_SHARD_PORTS[$i]}
mwait "tgt-rs${i}0:${PORT}" && rsinit "tgt/rs${i}" "tgt-rs${i}0:${PORT}"
done

# Start target mongos
dcf up -d tgt-mongos && mwait "tgt-mongos:27017"

# Add target shards to cluster
ADD_SHARDS_CMD=""
for i in $(seq 0 $((TGT_SHARDS - 1))); do
PORT=${TGT_SHARD_PORTS[$i]}
ADD_SHARDS_CMD="${ADD_SHARDS_CMD}sh.addShard('rs${i}/tgt-rs${i}0:${PORT}'); "
done
msh "tgt-mongos:27017" --eval "$ADD_SHARDS_CMD"
else
echo "Skipping target cluster (TGT_SHARDS=0)"
fi
2 changes: 1 addition & 1 deletion tests/test_documents.py
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ def test_update_one_multiple_arrays(t: Testing, phase: Runner.Phase):


@pytest.mark.parametrize("phase", [Runner.Phase.APPLY])
def test_update_one_with_trucated_arrays(t: Testing, phase: Runner.Phase):
def test_update_one_with_truncated_arrays(t: Testing, phase: Runner.Phase):
t.source["db_1"]["coll_1"].insert_one(
{
"i": "f1",
Expand Down
Loading