// From TOCS: Each replica collects messages until it has a quorum certificate
// with 2*f+1 COMMIT messages for the same sequence number n and view v
// from different replicas (including itself). We call this certificate
// the committed certificate and say that the request is "committed"
// by the replica when it has both the prepared and committed certificates.
From TOCS: Each replica collects messages until it has a quorum certificate
with 2*f+1 COMMIT messages for the same sequence number n and view v
from different replicas (including itself). We call this certificate
the committed certificate and say that the request is "committed"
by the replica when it has both the prepared and committed certificates.
// From TOCS : Each replica collects messages until it has a quorum certificate // with 2 * f + 1 COMMIT messages for the same sequence number n and view v // from different replicas ( including itself ) . We call this certificate // the committed certificate and say that the request is " committed " // by the replica when it has both the prepared and committed certificates .
func (state *State) committed() bool {
	if !state.prepared() {
		return false
	}
	if int(atomic.LoadInt32(&state.MsgLogs.TotalCommitMsg)) < 2*state.F + 1 {
		return false
	}
	return true
}
func ( state * State ) committed ( ) bool { if ! state . prepared ( ) { return false } if int ( atomic . LoadInt32 ( & state . MsgLogs . TotalCommitMsg ) ) < 2 * state . F + 1 { return false } return true }
From TOCS: Each replica collects messages until it has a quorum certificate
with 2*f+1 COMMIT messages for the same sequence number n and view v
from different replicas (including itself).
From TOCS : Each replica collects messages until it has a quorum certificate with 2 * f + 1 COMMIT messages for the same sequence number n and view v from different replicas ( including itself ) .