Node/Acct: Audit should handle nil status
Change-Id: I5bfe79fb02ae5c5ef587608eb6e595ad2dd1f848
This commit is contained in:
parent
485d5eb037
commit
4a9b2db2df
|
@ -169,7 +169,7 @@ func (acct *Accountant) performAudit(tmpMap map[string]*pendingEntry) {
|
||||||
if exists {
|
if exists {
|
||||||
if acct.submitObservation(pe) {
|
if acct.submitObservation(pe) {
|
||||||
auditErrors.Inc()
|
auditErrors.Inc()
|
||||||
acct.logger.Error("acctaudit: contract reported pending observation as missing, resubmitting it", zap.String("msgID", pe.msgId))
|
acct.logger.Error("acctaudit: contract reported pending observation as missing, resubmitted it", zap.String("msgID", pe.msgId))
|
||||||
} else {
|
} else {
|
||||||
acct.logger.Info("acctaudit: contract reported pending observation as missing but it is queued up to be submitted, skipping it", zap.String("msgID", pe.msgId))
|
acct.logger.Info("acctaudit: contract reported pending observation as missing but it is queued up to be submitted, skipping it", zap.String("msgID", pe.msgId))
|
||||||
}
|
}
|
||||||
|
@ -202,7 +202,7 @@ func (acct *Accountant) performAudit(tmpMap map[string]*pendingEntry) {
|
||||||
if !exists {
|
if !exists {
|
||||||
if acct.submitObservation(pe) {
|
if acct.submitObservation(pe) {
|
||||||
auditErrors.Inc()
|
auditErrors.Inc()
|
||||||
acct.logger.Error("acctaudit: query did not return status for transfer, this should not happen, resubmitting it", zap.String("msgId", pe.msgId))
|
acct.logger.Error("acctaudit: query did not return status for transfer, this should not happen, resubmitted it", zap.String("msgId", pe.msgId))
|
||||||
} else {
|
} else {
|
||||||
acct.logger.Info("acctaudit: query did not return status for transfer we have not submitted yet, ignoring it", zap.String("msgId", pe.msgId))
|
acct.logger.Info("acctaudit: query did not return status for transfer we have not submitted yet, ignoring it", zap.String("msgId", pe.msgId))
|
||||||
}
|
}
|
||||||
|
@ -210,10 +210,16 @@ func (acct *Accountant) performAudit(tmpMap map[string]*pendingEntry) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if status.Committed != nil {
|
if status == nil {
|
||||||
|
// This is the case when the contract does not know about a transfer. Resubmit it.
|
||||||
|
if acct.submitObservation(pe) {
|
||||||
|
auditErrors.Inc()
|
||||||
|
acct.logger.Error("acctaudit: contract does not know about pending transfer, resubmitted it", zap.String("msgId", pe.msgId))
|
||||||
|
}
|
||||||
|
} else if status.Committed != nil {
|
||||||
digest := hex.EncodeToString(status.Committed.Digest)
|
digest := hex.EncodeToString(status.Committed.Digest)
|
||||||
if pe.digest == digest {
|
if pe.digest == digest {
|
||||||
acct.logger.Info("acctaudit: audit determined that transfer has been committed, publishing it", zap.String("msgId", pe.msgId))
|
acct.logger.Error("acctaudit: audit determined that transfer has been committed, publishing it", zap.String("msgId", pe.msgId))
|
||||||
acct.handleCommittedTransfer(pe.msgId)
|
acct.handleCommittedTransfer(pe.msgId)
|
||||||
} else {
|
} else {
|
||||||
digestMismatches.Inc()
|
digestMismatches.Inc()
|
||||||
|
@ -226,7 +232,12 @@ func (acct *Accountant) performAudit(tmpMap map[string]*pendingEntry) {
|
||||||
// This is the case when the contract does not know about a transfer. Resubmit it.
|
// This is the case when the contract does not know about a transfer. Resubmit it.
|
||||||
if acct.submitObservation(pe) {
|
if acct.submitObservation(pe) {
|
||||||
auditErrors.Inc()
|
auditErrors.Inc()
|
||||||
acct.logger.Error("acctaudit: contract does not know about pending transfer, resubmitting it", zap.String("msgId", pe.msgId))
|
bytes, err := json.Marshal(*status)
|
||||||
|
if err != nil {
|
||||||
|
acct.logger.Error("acctaudit: unknown status returned for pending transfer, resubmitted it", zap.String("msgId", pe.msgId), zap.Error(err))
|
||||||
|
} else {
|
||||||
|
acct.logger.Error("acctaudit: unknown status returned for pending transfer, resubmitted it", zap.String("msgId", pe.msgId), zap.String("status", string(bytes)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -277,7 +288,7 @@ func (acct *Accountant) queryMissingObservations() ([]MissingObservation, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// queryBatchTransferStatus queries the status of the specified transfers and returns a map keyed by transfer key (as a string) to the status.
|
// queryBatchTransferStatus queries the status of the specified transfers and returns a map keyed by transfer key (as a string) to the status.
|
||||||
func (acct *Accountant) queryBatchTransferStatus(keys []TransferKey) (map[string]TransferStatus, error) {
|
func (acct *Accountant) queryBatchTransferStatus(keys []TransferKey) (map[string]*TransferStatus, error) {
|
||||||
bytes, err := json.Marshal(keys)
|
bytes, err := json.Marshal(keys)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to marshal keys: %w", err)
|
return nil, fmt.Errorf("failed to marshal keys: %w", err)
|
||||||
|
@ -295,9 +306,9 @@ func (acct *Accountant) queryBatchTransferStatus(keys []TransferKey) (map[string
|
||||||
return nil, fmt.Errorf("failed to unmarshal response: %w", err)
|
return nil, fmt.Errorf("failed to unmarshal response: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ret := make(map[string]TransferStatus)
|
ret := make(map[string]*TransferStatus)
|
||||||
for _, item := range response.Details {
|
for _, item := range response.Details {
|
||||||
ret[item.Key.String()] = *item.Status
|
ret[item.Key.String()] = item.Status
|
||||||
}
|
}
|
||||||
|
|
||||||
acct.logger.Debug("acctaudit: batch_transfer_status query response", zap.Int("numEntries", len(ret)), zap.String("result", string(respBytes)))
|
acct.logger.Debug("acctaudit: batch_transfer_status query response", zap.Int("numEntries", len(ret)), zap.String("result", string(respBytes)))
|
||||||
|
|
Loading…
Reference in New Issue