public int propose(int seq, Operation op) throws RemoteException { if (!work) return seq; boolean decided = false; while (!decided) { seq++; ArrayList<KeyValueServerInterface> list = getServersList(); int count = 0; int max = -1; for (KeyValueServerInterface server : list) { Instance ins = server.prepare(op.op_num, seq); if (ins != null) { count++; if (ins.n_a > max) { max = ins.n_a; // content = ins.content; op.content = ins.content; } } } if (count > (list.size() / 2)) { if (sendAllAccept(op.op_num, seq, op.content, list)) { for (KeyValueServerInterface server : list) { server.decide(seq, op); } decided = true; } } } return seq; }