Blob Blame History Raw
#!/bin/bash

set -o errexit
set -o nounset
set -o pipefail

# insert_and_wait_for_replication insert data in host and wait all replset members
# applied recent oplog entry
function insert_and_wait_for_replication() {
  local host
  host=$1
  local data
  data=$2

  # Storing document into replset and wait replication to finish
  local script
  script="db.getSiblingDB('test_db').data.insert(${data});
    for (var i = 0; i < 60; i++) {
      var status=rs.status();
      var optime=status.members[0].optime;
      var ok=true;
      for(var j=1; j < status.members.length; j++) {
        if(tojson(optime) != tojson(status.members[j].optime)) {
          ok=false;
        }
      };
      if(ok == true) {
        print('INFO: All members of replicaset are synchronized');
        quit(0);
      }
      sleep(1000);
    }
    print('ERROR: Members of replicaset are not synchronized');
    printjson(rs.status());
    quit(1);"

  mongo admin --host "${host}" -u admin -p "${MONGODB_ADMIN_PASSWORD}" --eval "${script}"
}

# wait_replicaset_members waits till replset has specified number of members
function wait_replicaset_members() {
  local host
  host=$1
  local count
  count=$2

  local script
  script="for (var i = 0; i < 60; i++) {
    var ret = rs.status().members.length;
    if (ret == ${count}) {
      print('INFO: Replicaset has expected number of members');
      quit(0);
    }
    sleep(1000);
  }
  print('ERROR: Wrong count of members in replicaset');
  printjson(rs.status());
  quit(1);"

  mongo admin --host "${host}" -u admin -p "${MONGODB_ADMIN_PASSWORD}" --eval "${script}"
}