feat: deliver durable live signal intents
This commit is contained in:
@@ -245,7 +245,32 @@ retained_compressed_bytes = retained_compressed_bytes + ?, output_charged_bytes
|
||||
if unmarshalErr := proto.Unmarshal(event.Payload, &wire); unmarshalErr != nil || wire.GetStdinAck() == nil || wire.GetStdinAck().GetWriteSeq() == 0 {
|
||||
err = ErrInvalidSegmentRecord
|
||||
} else {
|
||||
_, err = tx.ExecContext(ctx, `UPDATE stdin_writes SET acknowledged = 1 WHERE issue_uuid = ? AND write_seq <= ?`, event.IssueUUID[:], wire.GetStdinAck().GetWriteSeq())
|
||||
var acknowledged sql.Result
|
||||
acknowledged, err = tx.ExecContext(ctx, `UPDATE stdin_writes SET acknowledged = 1 WHERE issue_uuid = ? AND write_seq <= ?`, event.IssueUUID[:], wire.GetStdinAck().GetWriteSeq())
|
||||
if err == nil {
|
||||
var affected int64
|
||||
affected, err = acknowledged.RowsAffected()
|
||||
if err == nil && affected == 0 {
|
||||
err = ErrInvalidSegmentRecord
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if err == nil && event.EventType == 8 {
|
||||
var wire rvboxv1.CommandEvent
|
||||
if unmarshalErr := proto.Unmarshal(event.Payload, &wire); unmarshalErr != nil || wire.GetSignalResult() == nil || wire.GetSignalResult().GetCommandRevision() == 0 || wire.GetSignalResult().GetSignal() < rvboxv1.SignalKind_SIGNAL_HUP || wire.GetSignalResult().GetSignal() > rvboxv1.SignalKind_SIGNAL_USR2 {
|
||||
err = ErrInvalidSegmentRecord
|
||||
} else {
|
||||
var acknowledged sql.Result
|
||||
result := wire.GetSignalResult()
|
||||
acknowledged, err = tx.ExecContext(ctx, `UPDATE signal_intents SET acknowledged = 1 WHERE issue_uuid = ? AND command_revision = ? AND signal = ?`, event.IssueUUID[:], result.GetCommandRevision(), result.GetSignal())
|
||||
if err == nil {
|
||||
var affected int64
|
||||
affected, err = acknowledged.RowsAffected()
|
||||
if err == nil && affected == 0 {
|
||||
err = ErrInvalidSegmentRecord
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if err == nil {
|
||||
|
||||
Reference in New Issue
Block a user