@Override
 public synchronized boolean handleStartElectionRequest(L2StateMessage msg) {
   Assert.assertEquals(L2StateMessage.START_ELECTION, msg.getType());
   if (state == ELECTION_IN_PROGRESS
       && (myVote.isANewCandidate() || !msg.getEnrollment().isANewCandidate())) {
     // Another node is also joining in the election process, Cast its vote and notify my vote
     // Note : WE dont want to do this for new candidates when we are not new.
     Enrollment vote = msg.getEnrollment();
     Enrollment old = votes.put(vote.getNodeID(), vote);
     boolean sendResponse = msg.inResponseTo().isNull();
     if (old != null && !vote.equals(old)) {
       logger.warn(
           "Received duplicate vote : Replacing with new one : " + vote + " old one : " + old);
       sendResponse = true;
     }
     if (sendResponse) {
       // This is either not a response to this node initiating election or a duplicate vote.
       // Either case notify this
       // nodes vote
       L2StateMessage response = createElectionStartedMessage(msg, myVote);
       logger.info("Casted vote from " + msg + " My Response : " + response);
       try {
         groupManager.sendTo(msg.messageFrom(), response);
       } catch (GroupException e) {
         logger.error("Error sending Votes to : " + msg.messageFrom(), e);
       }
     } else {
       logger.info("Casted vote from " + msg);
     }
     return true;
   } else {
     logger.info("Ignoring Start Election Request  : " + msg + " My state = " + state);
     return false;
   }
 }
Ejemplo n.º 2
0
 public boolean isObserver() {
   for (Enrollment enrollment : enrollments) {
     if (enrollment.isObserver()) {
       return true;
     }
   }
   return false;
 }
Ejemplo n.º 3
0
 public boolean isStudent() {
   for (Enrollment enrollment : enrollments) {
     if (enrollment.isStudent()) {
       return true;
     }
   }
   return false;
 }
 private Enrollment countVotes() {
   Enrollment computedWinner = null;
   for (Enrollment e : votes.values()) {
     if (computedWinner == null) {
       computedWinner = e;
     } else if (e.wins(computedWinner)) {
       computedWinner = e;
     }
   }
   Assert.assertNotNull(computedWinner);
   return computedWinner;
 }
Ejemplo n.º 5
0
  public String getFinalGrade() {
    if (!checkedFinalGrade) {
      checkedFinalGrade = true;
      for (Enrollment enrollment : enrollments) {
        if (enrollment.isStudent()) {
          finalGrade = enrollment.getFinalGrade();
        }
      }
    }

    return finalGrade;
  }
Ejemplo n.º 6
0
  public double getFinalScore() {
    if (finalScore == null) {
      for (Enrollment enrollment : enrollments) {
        if (enrollment.isStudent()) {
          finalScore = enrollment.getFinalScore();
          return finalScore;
        }
      }
      finalScore = 0.0;
    }

    return finalScore;
  }
Ejemplo n.º 7
0
  public String getCurrentGrade() {
    if (!checkedCurrentGrade) {
      checkedCurrentGrade = true;
      for (Enrollment enrollment : enrollments) {
        if (enrollment.isStudent()) {
          currentGrade = enrollment.getCurrentGrade();
          return currentGrade;
        }
      }
    }

    return currentGrade;
  }
Ejemplo n.º 8
0
  public double getCurrentScore() {
    if (currentScore == null) {
      for (Enrollment enrollment : enrollments) {
        if (enrollment.isStudent()) {
          currentScore = enrollment.getCurrentScore();
          return currentScore;
        }
      }
      currentScore = 0.0;
    }

    return currentScore;
  }
Ejemplo n.º 9
0
  public boolean isTA() {

    if (enrollments == null) {
      return false;
    }

    for (Enrollment enrollment : enrollments) {
      if (enrollment.isTA()) {
        return true;
      }
    }
    return false;
  }
  private NodeID doElection(NodeID myNodeId, boolean isNew, WeightGeneratorFactory weightsFactory)
      throws GroupException, InterruptedException {

    // Step 1: publish to cluster NodeID, weight and election start
    Enrollment e = EnrollmentFactory.createEnrollment(myNodeId, isNew, weightsFactory);
    electionStarted(e);

    L2StateMessage msg = createElectionStartedMessage(e);
    debugInfo("Sending my election vote to all members");
    groupManager.sendAll(msg);

    // Step 2: Wait for election completion
    waitTillElectionComplete();

    // Step 3: Compute Winner
    Enrollment lWinner = computeResult();
    if (lWinner != e) {
      logger.info("Election lost : Winner is : " + lWinner);
      Assert.assertNotNull(lWinner);
      return lWinner.getNodeID();
    }
    // Step 4 : local host won the election, so notify world for acceptance
    msg = createElectionResultMessage(e);
    debugInfo("Won election, announcing to world and waiting for response...");
    GroupResponse<L2StateMessage> responses = groupManager.sendAllAndWaitForResponse(msg);
    for (L2StateMessage response : responses.getResponses()) {
      Assert.assertEquals(msg.getMessageID(), response.inResponseTo());
      if (response.getType() == L2StateMessage.RESULT_AGREED) {
        Assert.assertEquals(e, response.getEnrollment());
      } else if (response.getType() == L2StateMessage.RESULT_CONFLICT) {
        logger.info(
            "Result Conflict: Local Result : "
                + e
                + " From : "
                + response.messageFrom()
                + " Result : "
                + response.getEnrollment());
        return ServerID.NULL_ID;
      } else {
        throw new AssertionError(
            "Node : "
                + response.messageFrom()
                + " responded neither with RESULT_AGREED or RESULT_CONFLICT :"
                + response);
      }
    }

    // Step 5 : result agreed - I am the winner
    return myNodeId;
  }
  @Test
  public void shouldFulfillAMilestoneAndAlertsForTheOneDueNext() {
    LocalDate enrollmentDate = LocalDate.now().minusWeeks(16);
    LocalDate firstFulfillmentDate = LocalDate.now().minusWeeks(3);
    Enrollment enrollment = schedule.newEnrollment("External ID", enrollmentDate);
    String nextMilestone = enrollment.fulfillMilestone(schedule, firstFulfillmentDate);
    assertThat(nextMilestone, is(equalTo("IPTI 2")));

    List<Alert> alerts = enrollment.getAlerts(schedule);
    assertThat(alerts.size(), is(equalTo(1)));
    Alert alert = alerts.get(0);
    assertThat(alert.windowName(), is(equalTo(WindowName.Due)));
    Map<String, String> data = alert.data();
    assertThat(data.get("doo"), is(equalTo("Bar")));
  }
 /** This method is called by the winner of the election to announce to the world */
 @Override
 public synchronized void declareWinner(NodeID myNodeId) {
   Assert.assertEquals(winner.getNodeID(), myNodeId);
   L2StateMessage msg = createElectionWonMessage(this.winner);
   debugInfo("Announcing as winner: " + myNodeId);
   this.groupManager.sendAll(msg);
   logger.info("Declared as Winner: Winner is : " + this.winner);
   reset(winner);
 }
Ejemplo n.º 13
0
 private synchronized void handleElectionWonMessage(L2StateMessage clusterMsg) {
   debugInfo("Received election_won or election_already_won msg: " + clusterMsg);
   Enrollment winningEnrollment = clusterMsg.getEnrollment();
   if (state == ACTIVE_COORDINATOR) {
     // Can't get Election Won from another node : Split brain
     String error =
         state
             + " Received Election Won Msg : "
             + clusterMsg
             + ". A Terracotta server tried to join the mirror group as a second ACTIVE";
     logger.error(error);
     if (clusterMsg.getType() == L2StateMessage.ELECTION_WON_ALREADY) {
       sendNGResponse(clusterMsg.messageFrom(), clusterMsg);
     }
     groupManager.zapNode(
         winningEnrollment.getNodeID(), L2HAZapNodeRequestProcessor.SPLIT_BRAIN, error);
   } else if (activeNode.isNull()
       || activeNode.equals(winningEnrollment.getNodeID())
       || clusterMsg.getType() == L2StateMessage.ELECTION_WON) {
     // There is no active server for this node or the other node just detected a failure of ACTIVE
     // server and ran an
     // election and is sending the results. This can happen if this node for some reason is not
     // able to detect that
     // the active is down but the other node did. Go with the new active.
     setActiveNodeID(winningEnrollment.getNodeID());
     moveToPassiveState(winningEnrollment);
     if (clusterMsg.getType() == L2StateMessage.ELECTION_WON_ALREADY) {
       sendOKResponse(clusterMsg.messageFrom(), clusterMsg);
     }
   } else {
     // This is done to solve DEV-1532. Node sent ELECTION_WON_ALREADY message but our ACTIVE is
     // intact.
     logger.warn(
         "Conflicting Election Won  Msg : "
             + clusterMsg
             + " since I already have a ACTIVE Node : "
             + activeNode
             + ". Sending NG response");
     // The reason we send a response for ELECTION_WON_ALREADY message is that if we don't agree we
     // don't want the
     // other server to send us cluster state messages.
     sendNGResponse(clusterMsg.messageFrom(), clusterMsg);
   }
 }
 private synchronized void electionStarted(Enrollment e) {
   if (this.state == ELECTION_IN_PROGRESS) {
     throw new AssertionError("Election Already in Progress");
   }
   this.state = ELECTION_IN_PROGRESS;
   this.myVote = e;
   this.winner = null;
   this.votes.clear();
   this.votes.put(e.getNodeID(), e); // Cast my vote
   logger.info("Election Started : " + e);
 }
  public void actionPerformed(ActionEvent e) {

    if (e.getActionCommand().equals(ACT_VERIFICATION)) {

      try {
        this.m_collection = UareUGlobal.GetReaderCollection();
        m_collection.GetReaders();
      } catch (UareUException e1) {
        // TODO Auto-generated catch block
        JOptionPane.showMessageDialog(null, "Error getting collection");
        return;
      }

      if (m_collection.size() == 0) {
        MessageBox.Warning("Reader is not selected");
        return;
      }

      m_reader = m_collection.get(0);

      if (null == m_reader) {
        MessageBox.Warning("Reader is not selected");
      } else {
        Verification.Run(m_reader, this.enrollmentFMD);
      }
    } else if (e.getActionCommand().equals(ACT_ENROLLMENT)) {

      try {
        this.m_collection = UareUGlobal.GetReaderCollection();
        m_collection.GetReaders();
      } catch (UareUException e1) {
        // TODO Auto-generated catch block
        JOptionPane.showMessageDialog(null, "Error getting collection");
        return;
      }

      if (m_collection.size() == 0) {
        MessageBox.Warning("Reader is not selected");
        return;
      }

      m_reader = m_collection.get(0);

      if (null == m_reader) {
        MessageBox.Warning("Reader is not selected");
      } else {

        this.enrollmentFMD = Enrollment.Run(m_reader, "1234");
      }
    } else if (e.getActionCommand().equals(ACT_EXIT)) {
      m_dlgParent.setVisible(false);
    }
  }
  public void gotoEnrollment(String barcode) {
    try {
      m_collection = UareUGlobal.GetReaderCollection();
      m_collection.GetReaders();
    } catch (UareUException e1) {
      // TODO Auto-generated catch block
      JOptionPane.showMessageDialog(null, "Error getting collection");
      return;
    }

    if (m_collection.size() == 0) {
      MessageBox.Warning("Reader is not selected");
      return;
    }

    m_reader = m_collection.get(0);

    if (null == m_reader) {
      MessageBox.Warning("Reader is not selected");
    } else {

      this.enrollmentFMD = Enrollment.Run(m_reader, barcode);
    }
  }
Ejemplo n.º 17
0
  @Test
  public void test() throws Exception {
    // Create Course instances and add to ArrayList
    Course c1 = new Course(UUID.randomUUID(), "Chemistry", 4, eMajor.CHEM);
    Course c2 = new Course(UUID.randomUUID(), "Math", 4, eMajor.BUSINESS);
    Course c3 = new Course(UUID.randomUUID(), "Computer Science", 4, eMajor.COMPSI);
    ArrayList<Course> courses = new ArrayList<Course>();
    courses.add(c1);
    courses.add(c2);
    courses.add(c3);

    // Create Semester instances and add to ArrayList
    Semester fall = new Semester(UUID.randomUUID(), new Date(), new Date());
    Semester spring = new Semester(UUID.randomUUID(), new Date(), new Date());
    ArrayList<Semester> semesters = new ArrayList<Semester>();
    semesters.add(fall);
    semesters.add(spring);

    // Create Section instances and add to ArrayList
    UUID secID1 = UUID.randomUUID();
    UUID secID2 = UUID.randomUUID();
    UUID secID3 = UUID.randomUUID();
    UUID secID4 = UUID.randomUUID();
    UUID secID5 = UUID.randomUUID();
    UUID secID6 = UUID.randomUUID();
    Section falls1 = new Section(c1.getCourseID(), fall.getSemesterID(), secID1, 200);
    Section falls2 = new Section(c2.getCourseID(), fall.getSemesterID(), secID2, 200);
    Section falls3 = new Section(c3.getCourseID(), fall.getSemesterID(), secID3, 200);
    Section spring1 = new Section(c1.getCourseID(), spring.getSemesterID(), secID4, 200);
    Section spring2 = new Section(c2.getCourseID(), spring.getSemesterID(), secID5, 200);
    Section spring3 = new Section(c3.getCourseID(), spring.getSemesterID(), secID6, 200);
    ArrayList<Section> sections = new ArrayList<Section>();
    sections.add(falls1);
    sections.add(falls2);
    sections.add(falls3);
    sections.add(spring1);
    sections.add(spring2);
    sections.add(spring3);

    // Create Student instances and add to ArrayList
    Student s1 =
        new Student(
            "Bob",
            "Ex",
            "Example",
            new Date(),
            eMajor.BUSINESS,
            "10 Example Street",
            "(302)-444-5555",
            "*****@*****.**",
            UUID.randomUUID());
    Student s2 =
        new Student(
            "Bob",
            "Ex",
            "Example",
            new Date(),
            eMajor.BUSINESS,
            "10 Example Street",
            "(302)-444-5555",
            "*****@*****.**",
            UUID.randomUUID());
    Student s3 =
        new Student(
            "Bob",
            "Ex",
            "Example",
            new Date(),
            eMajor.BUSINESS,
            "10 Example Street",
            "(302)-444-5555",
            "*****@*****.**",
            UUID.randomUUID());
    Student s4 =
        new Student(
            "Bob",
            "Ex",
            "Example",
            new Date(),
            eMajor.BUSINESS,
            "10 Example Street",
            "(302)-444-5555",
            "*****@*****.**",
            UUID.randomUUID());
    Student s5 =
        new Student(
            "Bob",
            "Ex",
            "Example",
            new Date(),
            eMajor.BUSINESS,
            "10 Example Street",
            "(302)-444-5555",
            "*****@*****.**",
            UUID.randomUUID());
    Student s6 =
        new Student(
            "Bob",
            "Ex",
            "Example",
            new Date(),
            eMajor.BUSINESS,
            "10 Example Street",
            "(302)-444-5555",
            "*****@*****.**",
            UUID.randomUUID());
    Student s7 =
        new Student(
            "Bob",
            "Ex",
            "Example",
            new Date(),
            eMajor.BUSINESS,
            "10 Example Street",
            "(302)-444-5555",
            "*****@*****.**",
            UUID.randomUUID());
    Student s8 =
        new Student(
            "Bob",
            "Ex",
            "Example",
            new Date(),
            eMajor.BUSINESS,
            "10 Example Street",
            "(302)-444-5555",
            "*****@*****.**",
            UUID.randomUUID());
    Student s9 =
        new Student(
            "Bob",
            "Ex",
            "Example",
            new Date(),
            eMajor.BUSINESS,
            "10 Example Street",
            "(302)-444-5555",
            "*****@*****.**",
            UUID.randomUUID());
    Student s10 =
        new Student(
            "Bob",
            "Ex",
            "Example",
            new Date(),
            eMajor.BUSINESS,
            "10 Example Street",
            "(302)-444-5555",
            "*****@*****.**",
            UUID.randomUUID());
    ArrayList<Student> students = new ArrayList<Student>();
    students.add(s1);
    students.add(s2);
    students.add(s3);
    students.add(s4);
    students.add(s5);
    students.add(s6);
    students.add(s7);
    students.add(s8);
    students.add(s9);
    students.add(s10);

    // Create ArrayList for Enrollment instances
    ArrayList<Enrollment> enrollments = new ArrayList<Enrollment>();

    // Create the 60 instances of Enrollment
    for (Student stu : students) {
      for (Section sec : sections) {
        enrollments.add(new Enrollment(stu.getStudentID(), sec.getSectionID()));
      }
    }

    // Set all the grades
    for (Enrollment en : enrollments) {
      en.setGrade(4);
    }

    // Calculate GPAs
    double gpa1 = 0;
    double gpa2 = 0;
    double gpa3 = 0;
    double gpa4 = 0;
    double gpa5 = 0;
    double gpa6 = 0;
    double gpa7 = 0;
    double gpa8 = 0;
    double gpa9 = 0;
    double gpa10 = 0;

    double sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getStudentID() == s1.getStudentID()) {
        sum += en.getGrade();
      }
      gpa1 = sum / 6;
    }

    sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getStudentID() == s2.getStudentID()) {
        sum += en.getGrade();
      }
      gpa2 = sum / 6;
    }

    sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getStudentID() == s3.getStudentID()) {
        sum += en.getGrade();
      }
      gpa3 = sum / 6;
    }

    sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getStudentID() == s4.getStudentID()) {
        sum += en.getGrade();
      }
      gpa4 = sum / 6;
    }

    sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getStudentID() == s5.getStudentID()) {
        sum += en.getGrade();
      }
      gpa5 = sum / 6;
    }

    sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getStudentID() == s6.getStudentID()) {
        sum += en.getGrade();
      }
      gpa6 = sum / 6;
    }

    sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getStudentID() == s7.getStudentID()) {
        sum += en.getGrade();
      }
      gpa7 = sum / 6;
    }

    sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getStudentID() == s8.getStudentID()) {
        sum += en.getGrade();
      }
      gpa8 = sum / 6;
    }

    sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getStudentID() == s9.getStudentID()) {
        sum += en.getGrade();
      }
      gpa9 = sum / 6;
    }

    sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getStudentID() == s10.getStudentID()) {
        sum += en.getGrade();
      }
      gpa10 = sum / 6;
    }

    // Test if the GPAs were correctly calculated
    assertTrue(gpa1 == 4);
    assertTrue(gpa2 == 4);
    assertTrue(gpa3 == 4);
    assertTrue(gpa4 == 4);
    assertTrue(gpa5 == 4);
    assertTrue(gpa6 == 4);
    assertTrue(gpa7 == 4);
    assertTrue(gpa8 == 4);
    assertTrue(gpa9 == 4);
    assertTrue(gpa10 == 4);

    // Calculate average course grades
    double ave1 = 0;
    double ave2 = 0;
    double ave3 = 0;

    sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getSectionID() == secID1 || en.getStudentID() == secID4) {
        sum += en.getGrade();
      }
      ave1 = sum / 10;
    }
    sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getSectionID() == secID2 || en.getStudentID() == secID5) {
        sum += en.getGrade();
      }
      ave2 = sum / 10;
    }
    sum = 0;
    for (Enrollment en : enrollments) {
      if (en.getSectionID() == secID3 || en.getStudentID() == secID6) {
        sum += en.getGrade();
      }
      ave3 = sum / 10;
    }

    // Test if course averages were correctly calculated
    assertTrue(ave1 == 4);
    assertTrue(ave2 == 4);
    assertTrue(ave3 == 4);

    // Attempt to change a student's major
    s1.setMajor(eMajor.CHEM);
    assertTrue(s1.getMajor() == eMajor.CHEM);
  }
 private List<Alert> enrollAndGetAlerts(int numberOfWeeksSinceEnrollment) {
   LocalDate fewWeeksAgo = LocalDate.now().minusWeeks(numberOfWeeksSinceEnrollment);
   Enrollment enrollment = schedule.newEnrollment("External ID", fewWeeksAgo);
   return enrollment.getAlerts(schedule);
 }