#!/bin/bash

set -e

. ./CLUSTER-SERVER/_mongodb_cluster_common.bash

LOCAL_SHARD_INDEX=$(gs_mongodb_cluster_find_local_shard) ||
    gs_mongodb_die "The current host is not listed in GS_MONGODB_SHARD_HOSTNAMES."

SHARD_NUMBER=$((LOCAL_SHARD_INDEX + 1))
SHARD_HOST=$(gs_mongodb_cluster_shard_host "$LOCAL_SHARD_INDEX")
SHARD_REPLSET=$(gs_mongodb_cluster_shard_replset "$LOCAL_SHARD_INDEX")
SHARD_HOME="$GS_MONGODB_CLUSTER_HOME/shards/shard-${SHARD_NUMBER}"
DATA_DIR="$SHARD_HOME/data"
LOG_FILE="$SHARD_HOME/log/mongod.log"
PID_FILE="$SHARD_HOME/run/mongod.pid"
BIND_IP="$GS_MONGODB_CLUSTER_LOOPBACK_ADDRESS,$SHARD_HOST"

gs_mongodb_cluster_prepare_shard_dirs "$LOCAL_SHARD_INDEX"
gs_mongodb_start_guard "MongoDB shard $SHARD_NUMBER" "$PID_FILE"

echo "Starting MongoDB shard $SHARD_NUMBER:"
echo "  host:        $SHARD_HOST"
echo "  port:        $GS_MONGODB_SHARD_PORT"
echo "  replica set: $SHARD_REPLSET"
echo "  data:        $DATA_DIR"
echo "  log:         $LOG_FILE"

mongod \
    --shardsvr \
    --replSet "$SHARD_REPLSET" \
    --port "$GS_MONGODB_SHARD_PORT" \
    --bind_ip "$BIND_IP" \
    --dbpath "$DATA_DIR" \
    --logpath "$LOG_FILE" \
    --logappend \
    --pidfilepath "$PID_FILE" \
    --fork

gs_mongodb_cluster_wait_for_ping \
    "MongoDB shard $SHARD_NUMBER" \
    "$SHARD_HOST" \
    "$GS_MONGODB_SHARD_PORT" \
    "$GS_MONGODB_START_TIMEOUT"
