#!/usr/bin/env bash
# GridAdmin Namespace Init task
# Description: boostraps a namespace in OIO-SDS



main() {
  . oio-ga-tools-utils
  timeout=30
  TASK="NS_INIT"

  while getopts ":z:n:" opt; do
    case $opt in
      z)
        ZK_URLS=$OPTARG
        ;;
      n)
        NS=$OPTARG
        ;;
      \?)
        log "WARN" "Invalid option provided -$OPTARG"
        exit 1
        ;;
      :)
        log "WARN" "Option -$OPTARG requires argument."
        exit 1
        ;;
    esac
  done

  if [ -z "$NS" ] || [ -z "$ZK_URLS" ]; then
      log "ERROR" "Not enough arguments provided. Aborting."
      exit 1
  fi

  # TODO: implement zk checks

  if ! [ -x "$(command -v nc)" ]; then
  	log "ERROR" "Netcat (nc) not found. Please install it and try again"
  	exit 1
  fi

  while true; do
  	((timeout=timeout-1))
  	f=true
  	for url in ${ZK_URLS//,/ }; do
  		if ! [ "$(echo ruok | nc ${url/:/ })" = "imok" ]; then
  		 	f=false
  		fi
    done

  	if [ $timeout -eq 0 ]; then
  		log "ERROR" "Zookeeper connection could not be established (TIMEOUT)"
  		exit 1
  	fi

    if [ "$f" = true ]; then
      log "INFO" "Starting ZK boostrap"
  		zk-bootstrap.py --lazy $NS | zk-bootstrap.py $NS
      log "INFO" "ZK Bootstrap completed"
  		break
  	fi
    ps aux | grep -ie $NS | grep oio-meta0-server | awk '{print $2}' | xargs kill -9
    sleep 2
    ps aux | grep -ie $NS | grep oio-meta1-server | awk '{print $2}' | xargs kill -9
  	sleep 2
  done

  log "INFO" "Waiting for meta1 to register"

  nbmeta1=0
  timeout=20
  while [[ $nbmeta1 -lt $REPLICAS ]]; do
    if [[ $time -gt $timeout ]]; then
      log "ERROR" "Timeout while waiting for Meta1 to register"
      exit 1
    else
      sleep 1
      $(( timeout++ ))
      nbmeta1=$(oio-cluster -r $NS | grep -c meta1)
    fi
  done

  log "INFO" "Unlocking scores"
  openio cluster unlockall --oio-ns=$NS
  sleep 5

  log "INFO" "Starting Meta0 init"
  retry 2 openio directory bootstrap --replicas 3 --oio-ns=$NS
  log "INFO" "Meta0 init completed"
  log "INFO" "Cluster deployed"
  log "INFO" `oio-cluster $NS`
  log "INFO" `Locking scores`
  oio-cluster -r $NS | xargs -n 1 oio-cluster $NS --set-score=0 -S
  sleep 2
  log "INFO" "Namespace $NS boostrap complete"
  exit 0
}

. $(dirname $0)/oio-ga-tools-logger main "$@"
