Declarative Specification of FSM-Inference Algorithms InvariMint - - PowerPoint PPT Presentation

declarative specification of fsm inference algorithms
SMART_READER_LITE
LIVE PREVIEW

Declarative Specification of FSM-Inference Algorithms InvariMint - - PowerPoint PPT Presentation

Declarative Specification of FSM-Inference Algorithms InvariMint Observations Model Declarative specification Ivan Beschastnikh Yuriy Brun Jenny Abrahamson Michael D. Ernst University of Washington UMass. Amherst Arvind Krishnamurthy


slide-1
SLIDE 1

Declarative Specification of FSM-Inference Algorithms

Ivan Beschastnikh Yuriy Brun Jenny Abrahamson Michael D. Ernst Arvind Krishnamurthy

University of Washington

  • UMass. Amherst

Observations

InvariMint

Model Declarative specification

slide-2
SLIDE 2 src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 1, dst : 2, timestamp : 19, type : commit

University of Washington Ivan Beschastnikh

FSM-inference

Observations

...

FSM Model

2

FSM-inference algorithm

Invalid Write Read Only

slide-3
SLIDE 3 src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 1, dst : 2, timestamp : 19, type : commit

University of Washington Ivan Beschastnikh

FSM-inference

Observations

...

Model

3

FSM-inference algorithm

Invalid Write Read Only

  • Mental model validation
  • Test case generation
  • Anomaly detection
  • Log summarization

Applications:

...

Mariani et al. ICSE 2007 Cook et al. TSE 1998 Dallmeier et al. ASE 2009 Beschastnikh et al. FSE 2011

slide-4
SLIDE 4 src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 1, dst : 2, timestamp : 19, type : commit

University of Washington Ivan Beschastnikh

FSM-inference

Observations

...

Model

4

FSM-inference algorithm

Invalid Write Read Only

  • Mental model validation
  • Test case generation
  • Anomaly detection
  • Log summarization

Applications:

...

Mariani et al. ICSE 2007 Cook et al. TSE 1998 Dallmeier et al. ASE 2009 Beschastnikh et al. FSE 2011

slide-5
SLIDE 5 src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 1, dst : 2, timestamp : 19, type : commit

University of Washington Ivan Beschastnikh

FSM-inference

Observations

...

Model

5

FSM-inference algorithm

Invalid Write Read Only

  • Mental model validation
  • Test case generation
  • Anomaly detection
  • Log summarization

Applications:

...

Mariani et al. ICSE 2007 Cook et al. TSE 1998 Dallmeier et al. ASE 2009 Beschastnikh et al. FSE 2011

slide-6
SLIDE 6

...

src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 1, dst : 2, timestamp : 19, type : commit

University of Washington Ivan Beschastnikh

FSM-inference in prior work

Observations

...

Model

6

Model inference

Invalid Write Read Only

  • Specification mining
  • Process discovery
  • Grammar inference

Prior work:

Mariani et al. ICSE 2007 Cook et al. TSE 1998 Dallmeier et al. ASE 2009 Beschastnikh et al. FSE 2011

slide-7
SLIDE 7

Observations

src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 1, dst : 2, timestamp : 19, type : commit

University of Washington Ivan Beschastnikh

FSM-inference in prior work

...

7

Inference algorithm

Invalid Write Read Only

...

Prior work:

Mariani et al. ICSE 2007 Cook et al. TSE 1998 Dallmeier et al. ASE 2009 Beschastnikh et al. FSE 2011

Model

slide-8
SLIDE 8

University of Washington Ivan Beschastnikh

8

Model

FSM-inference representations

src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit

Observations

Invalid Write Read Only

Inference algorithm

slide-9
SLIDE 9

University of Washington Ivan Beschastnikh

9

Model Code

FSM-inference representations

src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit

Observations

Invalid Write Read Only
slide-10
SLIDE 10

University of Washington Ivan Beschastnikh

FSM-inference representations

10

  • Formally, given two sequences of length k seq1 = (x1
1, P 1 1 ) . . . (x1 k, P 1 k ) and seq2 = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • seq1 = seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇔ P 2 i
  • seq1 ⊆ seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇒ P 2 i Given two k-futures f1 = {seq1 1, . . . seq1 n1}, with seq1 i = (x1 1, P 1 1 ) . . . (x1 k, P 1 k ) and f2 = {seq2 1, . . . seq2 n2}, with seq2 i = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • f1 is equivalent to f2 iff n1 = n2, ∀i = 1, . . . n1 ∃j =
1, . . . n1 s.t. seq1 i = seq2 j
  • f1 weakly subsumes f2 iff n1 = n2, ∀j = 1, . . . n1 ∃i =
1, . . . n1 s.t. seq2 j ⊆ seq1 i , and vice versa ∀i = 1, . . . n1 ∃j = 1, . . . n1 s.t. seq2 j ⊆ seq1 i
  • f1 strongly subsumes f2 iff ∀j = 1, . . . n2 ∃i = 1, . . . n1
s.t. seq2 j ⊆ seq1 i
  • Set theory

Code Model

src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit

Observations

Invalid Write Read Only
slide-11
SLIDE 11

University of Washington Ivan Beschastnikh

11

Code

  • Formally, given two sequences of length k seq1 = (x1
1, P 1 1 ) . . . (x1 k, P 1 k ) and seq2 = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • seq1 = seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇔ P 2 i
  • seq1 ⊆ seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇒ P 2 i Given two k-futures f1 = {seq1 1, . . . seq1 n1}, with seq1 i = (x1 1, P 1 1 ) . . . (x1 k, P 1 k ) and f2 = {seq2 1, . . . seq2 n2}, with seq2 i = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • f1 is equivalent to f2 iff n1 = n2, ∀i = 1, . . . n1 ∃j =
1, . . . n1 s.t. seq1 i = seq2 j
  • f1 weakly subsumes f2 iff n1 = n2, ∀j = 1, . . . n1 ∃i =
1, . . . n1 s.t. seq2 j ⊆ seq1 i , and vice versa ∀i = 1, . . . n1 ∃j = 1, . . . n1 s.t. seq2 j ⊆ seq1 i
  • f1 strongly subsumes f2 iff ∀j = 1, . . . n2 ∃i = 1, . . . n1
s.t. seq2 j ⊆ seq1 i
  • Set theory
1 Input: event log L 2 let initialGraph = extract(L) 3 let I = mineInvariants(initialGraph) 4 let (V,E) = partition(initialGraph) 5 while (V,E) does not satisfy invariants I 6 // p: event → boolean, π: partition that will be split 7 let (p, π) = selectSplit((V,E), I) 8 let π1 = {event ∈ π | p(event)} 9 let π2 = {event ∈ π | ¬p(event)} 10 V := (V −{π})∪{π1,π2} 11 E := {(π3,π4,r) ∈ V ×V ×R | ∃ event1 ∈ π3,∃ event2 ∈ π4 12 : event1 revent2 ∈ initialGraph} 13 end while 14 if (hybrid) 15 (V,E) := kTail((V,E), 0, I) 16 Output: (V,E)

Pseudo-code

FSM-inference representations

Model

src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit

Observations

Invalid Write Read Only
slide-12
SLIDE 12 1 Input: event log L 2 let initialGraph = extract(L) 3 let I = mineInvariants(initialGraph) 4 let (V,E) = partition(initialGraph) 5 while (V,E) does not satisfy invariants I 6 // p: event → boolean, π: partition that will be split 7 let (p, π) = selectSplit((V,E), I) 8 let π1 = {event ∈ π | p(event)} 9 let π2 = {event ∈ π | ¬p(event)} 10 V := (V −{π})∪{π1,π2} 11 E := {(π3,π4,r) ∈ V ×V ×R | ∃ event1 ∈ π3,∃ event2 ∈ π4 12 : event1 revent2 ∈ initialGraph} 13 end while 14 if (hybrid) 15 (V,E) := kTail((V,E), 0, I) 16 Output: (V,E)

Pseudo-code

University of Washington Ivan Beschastnikh

12

...

Code

  • Formally, given two sequences of length k seq1 = (x1
1, P 1 1 ) . . . (x1 k, P 1 k ) and seq2 = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • seq1 = seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇔ P 2 i
  • seq1 ⊆ seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇒ P 2 i Given two k-futures f1 = {seq1 1, . . . seq1 n1}, with seq1 i = (x1 1, P 1 1 ) . . . (x1 k, P 1 k ) and f2 = {seq2 1, . . . seq2 n2}, with seq2 i = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • f1 is equivalent to f2 iff n1 = n2, ∀i = 1, . . . n1 ∃j =
1, . . . n1 s.t. seq1 i = seq2 j
  • f1 weakly subsumes f2 iff n1 = n2, ∀j = 1, . . . n1 ∃i =
1, . . . n1 s.t. seq2 j ⊆ seq1 i , and vice versa ∀i = 1, . . . n1 ∃j = 1, . . . n1 s.t. seq2 j ⊆ seq1 i
  • f1 strongly subsumes f2 iff ∀j = 1, . . . n2 ∃i = 1, . . . n1
s.t. seq2 j ⊆ seq1 i
  • Set theory

FSM-inference representations

Model

src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit

Observations

Invalid Write Read Only
slide-13
SLIDE 13 1 Input: event log L 2 let initialGraph = extract(L) 3 let I = mineInvariants(initialGraph) 4 let (V,E) = partition(initialGraph) 5 while (V,E) does not satisfy invariants I 6 // p: event → boolean, π: partition that will be split 7 let (p, π) = selectSplit((V,E), I) 8 let π1 = {event ∈ π | p(event)} 9 let π2 = {event ∈ π | ¬p(event)} 10 V := (V −{π})∪{π1,π2} 11 E := {(π3,π4,r) ∈ V ×V ×R | ∃ event1 ∈ π3,∃ event2 ∈ π4 12 : event1 revent2 ∈ initialGraph} 13 end while 14 if (hybrid) 15 (V,E) := kTail((V,E), 0, I) 16 Output: (V,E)

Pseudo-code

University of Washington Ivan Beschastnikh

13

...

Code

  • Formally, given two sequences of length k seq1 = (x1
1, P 1 1 ) . . . (x1 k, P 1 k ) and seq2 = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • seq1 = seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇔ P 2 i
  • seq1 ⊆ seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇒ P 2 i Given two k-futures f1 = {seq1 1, . . . seq1 n1}, with seq1 i = (x1 1, P 1 1 ) . . . (x1 k, P 1 k ) and f2 = {seq2 1, . . . seq2 n2}, with seq2 i = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • f1 is equivalent to f2 iff n1 = n2, ∀i = 1, . . . n1 ∃j =
1, . . . n1 s.t. seq1 i = seq2 j
  • f1 weakly subsumes f2 iff n1 = n2, ∀j = 1, . . . n1 ∃i =
1, . . . n1 s.t. seq2 j ⊆ seq1 i , and vice versa ∀i = 1, . . . n1 ∃j = 1, . . . n1 s.t. seq2 j ⊆ seq1 i
  • f1 strongly subsumes f2 iff ∀j = 1, . . . n2 ∃i = 1, . . . n1
s.t. seq2 j ⊆ seq1 i
  • FSM-inference representations

x Transparency x Extensibility

Limitations:

Model

src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit

Observations

Invalid Write Read Only

Set theory

slide-14
SLIDE 14 1 Input: event log L 2 let initialGraph = extract(L) 3 let I = mineInvariants(initialGraph) 4 let (V,E) = partition(initialGraph) 5 while (V,E) does not satisfy invariants I 6 // p: event → boolean, π: partition that will be split 7 let (p, π) = selectSplit((V,E), I) 8 let π1 = {event ∈ π | p(event)} 9 let π2 = {event ∈ π | ¬p(event)} 10 V := (V −{π})∪{π1,π2} 11 E := {(π3,π4,r) ∈ V ×V ×R | ∃ event1 ∈ π3,∃ event2 ∈ π4 12 : event1 revent2 ∈ initialGraph} 13 end while 14 if (hybrid) 15 (V,E) := kTail((V,E), 0, I) 16 Output: (V,E)

Pseudo-code

University of Washington Ivan Beschastnikh

15

...

Code

  • Formally, given two sequences of length k seq1 = (x1
1, P 1 1 ) . . . (x1 k, P 1 k ) and seq2 = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • seq1 = seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇔ P 2 i
  • seq1 ⊆ seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇒ P 2 i Given two k-futures f1 = {seq1 1, . . . seq1 n1}, with seq1 i = (x1 1, P 1 1 ) . . . (x1 k, P 1 k ) and f2 = {seq2 1, . . . seq2 n2}, with seq2 i = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • f1 is equivalent to f2 iff n1 = n2, ∀i = 1, . . . n1 ∃j =
1, . . . n1 s.t. seq1 i = seq2 j
  • f1 weakly subsumes f2 iff n1 = n2, ∀j = 1, . . . n1 ∃i =
1, . . . n1 s.t. seq2 j ⊆ seq1 i , and vice versa ∀i = 1, . . . n1 ∃j = 1, . . . n1 s.t. seq2 j ⊆ seq1 i
  • f1 strongly subsumes f2 iff ∀j = 1, . . . n2 ∃i = 1, . . . n1
s.t. seq2 j ⊆ seq1 i
  • FSM-inference representations

Model

src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit

Observations

Invalid Write Read Only

Observed trace

Trace admitted by the model?

x Transparency x Extensibility

Limitations:

Set theory

slide-15
SLIDE 15 1 Input: event log L 2 let initialGraph = extract(L) 3 let I = mineInvariants(initialGraph) 4 let (V,E) = partition(initialGraph) 5 while (V,E) does not satisfy invariants I 6 // p: event → boolean, π: partition that will be split 7 let (p, π) = selectSplit((V,E), I) 8 let π1 = {event ∈ π | p(event)} 9 let π2 = {event ∈ π | ¬p(event)} 10 V := (V −{π})∪{π1,π2} 11 E := {(π3,π4,r) ∈ V ×V ×R | ∃ event1 ∈ π3,∃ event2 ∈ π4 12 : event1 revent2 ∈ initialGraph} 13 end while 14 if (hybrid) 15 (V,E) := kTail((V,E), 0, I) 16 Output: (V,E)

Pseudo-code

University of Washington Ivan Beschastnikh

17

...

Code

  • Formally, given two sequences of length k seq1 = (x1
1, P 1 1 ) . . . (x1 k, P 1 k ) and seq2 = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • seq1 = seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇔ P 2 i
  • seq1 ⊆ seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇒ P 2 i Given two k-futures f1 = {seq1 1, . . . seq1 n1}, with seq1 i = (x1 1, P 1 1 ) . . . (x1 k, P 1 k ) and f2 = {seq2 1, . . . seq2 n2}, with seq2 i = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • f1 is equivalent to f2 iff n1 = n2, ∀i = 1, . . . n1 ∃j =
1, . . . n1 s.t. seq1 i = seq2 j
  • f1 weakly subsumes f2 iff n1 = n2, ∀j = 1, . . . n1 ∃i =
1, . . . n1 s.t. seq2 j ⊆ seq1 i , and vice versa ∀i = 1, . . . n1 ∃j = 1, . . . n1 s.t. seq2 j ⊆ seq1 i
  • f1 strongly subsumes f2 iff ∀j = 1, . . . n2 ∃i = 1, . . . n1
s.t. seq2 j ⊆ seq1 i
  • FSM-inference representations

Model

src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit

Observations

Invalid Write Read Only

Why is this execution admitted?

x Transparency x Extensibility

Limitations:

Set theory

slide-16
SLIDE 16 1 Input: event log L 2 let initialGraph = extract(L) 3 let I = mineInvariants(initialGraph) 4 let (V,E) = partition(initialGraph) 5 while (V,E) does not satisfy invariants I 6 // p: event → boolean, π: partition that will be split 7 let (p, π) = selectSplit((V,E), I) 8 let π1 = {event ∈ π | p(event)} 9 let π2 = {event ∈ π | ¬p(event)} 10 V := (V −{π})∪{π1,π2} 11 E := {(π3,π4,r) ∈ V ×V ×R | ∃ event1 ∈ π3,∃ event2 ∈ π4 12 : event1 revent2 ∈ initialGraph} 13 end while 14 if (hybrid) 15 (V,E) := kTail((V,E), 0, I) 16 Output: (V,E)

Pseudo-code

University of Washington Ivan Beschastnikh

18

...

Code

  • Formally, given two sequences of length k seq1 = (x1
1, P 1 1 ) . . . (x1 k, P 1 k ) and seq2 = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • seq1 = seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇔ P 2 i
  • seq1 ⊆ seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇒ P 2 i Given two k-futures f1 = {seq1 1, . . . seq1 n1}, with seq1 i = (x1 1, P 1 1 ) . . . (x1 k, P 1 k ) and f2 = {seq2 1, . . . seq2 n2}, with seq2 i = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • f1 is equivalent to f2 iff n1 = n2, ∀i = 1, . . . n1 ∃j =
1, . . . n1 s.t. seq1 i = seq2 j
  • f1 weakly subsumes f2 iff n1 = n2, ∀j = 1, . . . n1 ∃i =
1, . . . n1 s.t. seq2 j ⊆ seq1 i , and vice versa ∀i = 1, . . . n1 ∃j = 1, . . . n1 s.t. seq2 j ⊆ seq1 i
  • f1 strongly subsumes f2 iff ∀j = 1, . . . n2 ∃i = 1, . . . n1
s.t. seq2 j ⊆ seq1 i
  • Set theory

FSM-inference representations

Model

src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit

Observations

Invalid Write Read Only

Base Algorithm Feature A Feature B

How to add features to an algorithm?

x Transparency x Extensibility

Limitations:

slide-17
SLIDE 17 1 Input: event log L 2 let initialGraph = extract(L) 3 let I = mineInvariants(initialGraph) 4 let (V,E) = partition(initialGraph) 5 while (V,E) does not satisfy invariants I 6 // p: event → boolean, π: partition that will be split 7 let (p, π) = selectSplit((V,E), I) 8 let π1 = {event ∈ π | p(event)} 9 let π2 = {event ∈ π | ¬p(event)} 10 V := (V −{π})∪{π1,π2} 11 E := {(π3,π4,r) ∈ V ×V ×R | ∃ event1 ∈ π3,∃ event2 ∈ π4 12 : event1 revent2 ∈ initialGraph} 13 end while 14 if (hybrid) 15 (V,E) := kTail((V,E), 0, I) 16 Output: (V,E)

Pseudo-code

University of Washington Ivan Beschastnikh

19

Observations Model

...

Code

  • Formally, given two sequences of length k seq1 = (x1
1, P 1 1 ) . . . (x1 k, P 1 k ) and seq2 = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • seq1 = seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇔ P 2 i
  • seq1 ⊆ seq2 iff ∀i = 1, . . . k x1
i = x2 i and P 1 i ⇒ P 2 i Given two k-futures f1 = {seq1 1, . . . seq1 n1}, with seq1 i = (x1 1, P 1 1 ) . . . (x1 k, P 1 k ) and f2 = {seq2 1, . . . seq2 n2}, with seq2 i = (x2 1, P 2 1 ) . . . (x2 k, P 2 k ), we say that
  • f1 is equivalent to f2 iff n1 = n2, ∀i = 1, . . . n1 ∃j =
1, . . . n1 s.t. seq1 i = seq2 j
  • f1 weakly subsumes f2 iff n1 = n2, ∀j = 1, . . . n1 ∃i =
1, . . . n1 s.t. seq2 j ⊆ seq1 i , and vice versa ∀i = 1, . . . n1 ∃j = 1, . . . n1 s.t. seq2 j ⊆ seq1 i
  • f1 strongly subsumes f2 iff ∀j = 1, . . . n2 ∃i = 1, . . . n1
s.t. seq2 j ⊆ seq1 i
  • Set theory
  • 2. Monolithic architecture
  • 1. Low-level specifications

FSM-inference representations

x Transparency x Extensibility

Limitations:

slide-18
SLIDE 18

University of Washington Ivan Beschastnikh

23

Observations Model

Prior work: InvariMint:

Observations Model Property miner Property composition

Property Instances

Declarative specification

  • f FSM-inference algorithm

InvariMint: modular and declarative

slide-19
SLIDE 19

University of Washington Ivan Beschastnikh

24

Observations Model

Prior work: InvariMint:

Observations Model Property miner Property composition

Property Instances

Declarative specification

InvariMint: modular and declarative

✓ Transparent ✓ Extensible

slide-20
SLIDE 20

University of Washington Ivan Beschastnikh

25

Observations Model

Prior work: InvariMint:

Observations Model Property miner

Property Instances

Property types

InvariMint: modular and declarative

✓ Transparent ✓ Extensible

slide-21
SLIDE 21
  • FSM-inference algorithms not transparent/extensible
  • InvariMint -- modular and declarative FSM-inference
  • Expressing algorithm using InvariMint
  • kTails -- a state-merging algorithm
  • Synoptic -- a state-splitting algorithm
  • General specification formalism
  • InvariMint evaluation

University of Washington Ivan Beschastnikh

Outline

26

slide-22
SLIDE 22 src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 1, dst : 2, timestamp : 19, type : commit

University of Washington Ivan Beschastnikh

kTails and Synoptic overview

Observations

...

Model

27

kTails

propose commit tx-commit tx-abort abort commit abort

Beschastnikh et al.

ESEC/FSE 2011

Synoptic

Biermann et al.

IEEE TC 2011

slide-23
SLIDE 23

University of Washington Ivan Beschastnikh

28

propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit

...

kTails and Synoptic overview

c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5

Larger models: fewer behaviors Smaller models: more behaviors Observations Smallest model

slide-24
SLIDE 24

University of Washington Ivan Beschastnikh

30

propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit

...

kTails(k) and Synoptic overview

c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5

Larger models: fewer behaviors Smaller models: more behaviors

Merging

Observations end start

Merge states followed by identical k-length execution sequences

slide-25
SLIDE 25

University of Washington Ivan Beschastnikh

31

propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit

...

kTails(k) and Synoptic overview

c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5

Larger models: fewer behaviors Smaller models: more behaviors Observations end start

Merging

slide-26
SLIDE 26

University of Washington Ivan Beschastnikh

31

propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit

...

kTails(k) and Synoptic overview

c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5

Larger models: fewer behaviors Smaller models: more behaviors Observations end start

Merging

  • 1. Choose any merge
  • 2. Terminate when no more states

can be merged

slide-27
SLIDE 27

University of Washington Ivan Beschastnikh

32

propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit

...

kTails(k) and Synoptic overview

c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5

Larger models: fewer behaviors Smaller models: more behaviors Smallest model Observations end start

Splitting

Split states to eliminate executions that violate a set of mined observation invariants

t

slide-28
SLIDE 28

University of Washington Ivan Beschastnikh

33

propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit

...

kTails(k) and Synoptic overview

c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5

Larger models: fewer behaviors Smaller models: more behaviors Smallest model Observations end start

Splitting

slide-29
SLIDE 29

University of Washington Ivan Beschastnikh

34

propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit

...

kTails(k) and Synoptic overview

c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5

Larger models: fewer behaviors Smaller models: more behaviors Smallest model Observations end start

Splitting

  • 1. Choose split to eliminate counter-

examples to unsatisfied mined invariants:

  • x AlwaysFollowedBy y
  • x NeverFollowedBy y
  • x AlwaysPrecedes y
  • 2. Terminate when model satisfies all mined

invariants

S y n

  • p

t i c i s n

  • n
  • d

e t e r m i n i s t i c : F i n a l m

  • d

e l d e p e n d s

  • n

s p l i t t i n g c h

  • i

c e s

slide-30
SLIDE 30

University of Washington Ivan Beschastnikh

35

propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit

...

Motivating questions

c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5

Larger models: fewer behaviors Smaller models: more behaviors Smallest model Observations

Synoptic kTails

slide-31
SLIDE 31

University of Washington Ivan Beschastnikh

36

propose propose abort commit tx-abort tx-abort propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit commit tx-commit tx-commit propose propose commit abort tx-abort tx-abort propose propose commit commit tx-commit tx-commit

...

Motivating questions

c1 c3 B a1 a2 c2 2 3 1,4 a3 a4 5 c1 c3 B a2 c2 3 4 a3 a4 5 2 a1 1 c1 c3 B a2 c2 3 4 a3 5 a1 1 a4 2 c1 c3 B a1 a2 c2 3 1,4 a4 5 a3 2 a1 a3 a2 B C 1 2 3 4 a4 5 a1 a3 a2 B c1 c3 1 2 3 4 a4 5 c2 c1 c3 a1 a3 a2 a4 B c2 2 1 4 3,5 c1 c3 B a2 a4 c2 3,5 4 a1 1 a3 2 a1 B 3 1 C a3 a4 5 2 a2 4 c1 c3 B A c2 2 3,5 1,4 a1 a3 a2 a4 B C 1 2 3,5 4 a1 a2 a4 B C a3 3,5 2 1,4 a1 a2 B 1 2 3 4 a4 5 C a3 a2 a4 B C a1 a3 2 3,5 4 1 a1 a2 a4 B c1 c3 a3 c2 2 1,4 3,5 a1 a2 B C a4 a3 1,4 3 5 2 a1 a2 B C a3 a4 3 5 2 1,4 B C A 1,4 2 3,5

Larger models: fewer behaviors Smaller models: more behaviors Smallest model Observations

How can we easily: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

We can answer all of these questions by representing these algorithms with InvariMint

slide-32
SLIDE 32

University of Washington Ivan Beschastnikh

37

Observations Model Property miner

Property Instances

property types

InvariMint: modular and declarative

slide-33
SLIDE 33

University of Washington Ivan Beschastnikh

39

Observations Model Property miner

Property Instances

property types

Expressing kTails(k=1)

kTails

slide-34
SLIDE 34

University of Washington Ivan Beschastnikh

41

Observations Model Property miner

Property Instances

A template to express merging of

  • bservation sequences that are

identical in the first 1 event(s)

Expressing kTails(k=1)

= A property type: “x can be immediately followed by one of Y”

slide-35
SLIDE 35

s1

login

s2 s3 s4

check check logout

s6

compose send

s5

logout

login check compose send logout login check check logout trace 2: trace 1:

University of Washington Ivan Beschastnikh

43

Observations kTails output

Expressing kTails(k=1)

Observations Model Property miner

Property Instances

“x can be immediately followed by one of Y”

slide-36
SLIDE 36

s1 s2

check login

¬login

s3

check

¬ Σ

University of Washington Ivan Beschastnikh

Expressing kTails(k=1)

45

Observations x=login property instance

Observations Model Property miner

Property Instances

“x can be immediately followed by one of Y”

login check compose send logout login check check logout trace 2: trace 1:

slide-37
SLIDE 37

s1 s2

check, logout, compose check

¬check

s3

Σ

send, login

University of Washington Ivan Beschastnikh

Expressing kTails(k=1)

47

Observations

Observations Model Property miner

Property Instances

“x can be immediately followed by one of Y”

x=check property instance

login check compose send logout login check check logout trace 2: trace 1:

slide-38
SLIDE 38

University of Washington Ivan Beschastnikh

Expressing kTails(k=1)

50

Observations Model Property miner

Property Instances

s1 s2

Y x

s3

Y

Σ\

Σ

{x}

Σ\

= “x can be immediately followed by one of Y”

FSM template:

+

Eval(Log L, hx=a, Y =Bi) =    true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise

When to instantiate:

slide-39
SLIDE 39

University of Washington Ivan Beschastnikh

Expressing kTails(k=1)

51

Observations Model Property miner

Property Instances

s1 s2

Y x

s3

Y

Σ\

Σ

{x}

Σ\

= “x can be immediately followed by one of Y”

FSM template:

+

Eval(Log L, hx=a, Y =Bi) =    true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise

When to instantiate:

Complete template

slide-40
SLIDE 40

Complete template

University of Washington Ivan Beschastnikh

Expressing kTails(k=1)

52

Observations Model Property miner

Property Instances

s1 s2

Y x

s3

Y

Σ\

Σ

{x}

Σ\

= “x can be immediately followed by one of Y”

FSM template:

+

Eval(Log L, hx=a, Y =Bi) =    true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise

When to instantiate:

  • This formulation is exact (identical models)
  • Generalizes to arbitrary k value
slide-41
SLIDE 41

University of Washington Ivan Beschastnikh

Expressing kTails(k=1)

53

Observations Model Property miner

Property Instances

s1 s2

Y x

s3

Y

Σ\

Σ

{x}

Σ\

= “x can be immediately followed by one of Y”

FSM template:

+

Eval(Log L, hx=a, Y =Bi) =    true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise

When to instantiate:

Complete template

package synoptic.algorithms; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.logging.Logger; import synoptic.algorithms.graphops.PartitionMultiMerge; import synoptic.model.ChainsTraceGraph; import synoptic.model.Partition; import synoptic.model.PartitionGraph; import synoptic.model.event.EventType; import synoptic.model.interfaces.INode; import synoptic.model.interfaces.ITransition; import synoptic.util.InternalSynopticException; import synoptic.util.NotImplementedException; /** * Implements the KTails algorithm as defined in Biermann & Feldman '72. */ public class KTails { public static Logger logger; static { logger = Logger.getLogger("KTails"); } /** * Constructs and returns a PartitionGraph generated by applying kTails with * the given k value to the given trace graph */ public static PartitionGraph performKTails(ChainsTraceGraph g, int k) { PartitionGraph pGraph = new PartitionGraph(g, false, null); attemptMerge(pGraph, k); return pGraph; } /** * Finds all possible merges in pGraph. Requires making a new call to * attemptMerge after every merge in case previously un-merge-able pairs * become merge-able. */ private static void attemptMerge(PartitionGraph pGraph, int k) { // Keeps track of the merges that we want to perform.

kTails Procedural description

slide-42
SLIDE 42

University of Washington Ivan Beschastnikh

Expressing kTails(k=1)

53

Observations Model Property miner

Property Instances

s1 s2

Y x

s3

Y

Σ\

Σ

{x}

Σ\

= “x can be immediately followed by one of Y”

FSM template:

+

Eval(Log L, hx=a, Y =Bi) =    true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise

When to instantiate:

Complete template

allVisitedMatches.put(n1, n2); for (ITransition<NodeType> t1 : n1Trans) { NodeType c1 = t1.getTarget(); // Skip c1 if it was visited by this method earlier. if (visitedN1Children.contains(c1)) { continue; } boolean kEqual = false; // Make sure to get transitions of the same relation. for (ITransition<NodeType> t2 : n2 .getTransitionsWithExactRelations(t1.getRelation())) { NodeType c2 = t2.getTarget(); // Skip c2 if it was visited by this method earlier. if (visitedN2Children.contains(c2)) { continue; } // Skip c2 if its already been mapped to a c1 previously in the // outer loop. if (childKEquivMatches.contains(c2)) { continue; } if (kEqualsWithoutSubsumption(c1, c2, k - 1, allVisitedMatches)) { kEqual = true; childKEquivMatches.add(c2); break; } } // Could not find any kEqual c2 to match with c1. if (!kEqual) { // Remove the record of visiting n1 and n2. allVisitedMatches.remove(n1); return false; } } return true; } }

kTails Procedural description

slide-43
SLIDE 43

University of Washington Ivan Beschastnikh

Expressing kTails(k)

54

Observations Model Property miner

Property Instances

“x can be immediately followed by one of Y”

s1 s2

Y x

s3

Y

Σ\

Σ

{x}

Σ\

= +

Eval(Log L, hx=a, Y =Bi) =    true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

  • This formulation is exact (identical models)
  • Generalizes to arbitrary k value
slide-44
SLIDE 44

University of Washington Ivan Beschastnikh

Expressing kTails(k)

55

Observations Model Property miner

Property Instances

“x can be immediately followed by one of Y”

s1 s2

Y x

s3

Y

Σ\

Σ

{x}

Σ\

= +

Eval(Log L, hx=a, Y =Bi) =    true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

slide-45
SLIDE 45

University of Washington Ivan Beschastnikh

Expressing kTails(k)

56

Observations Model Property miner

Property Instances

“x can be immediately followed by one of Y”

s1 s2

Y x

s3

Y

Σ\

Σ

{x}

Σ\

= +

Eval(Log L, hx=a, Y =Bi) =    true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

slide-46
SLIDE 46

University of Washington Ivan Beschastnikh

Expressing kTails(k)

57

Observations Model Property miner

Property Instances

“x can be immediately followed by one of Y”

s1 s2

Y x

s3

Y

Σ\

Σ

{x}

Σ\

= +

Eval(Log L, hx=a, Y =Bi) =    true : 8t 2 L, 9b 2 B, ♦(a ! b) in t ^ 8b 2 B, 9t 2 L, ♦(a ! b) in t false : otherwise

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

slide-47
SLIDE 47

University of Washington Ivan Beschastnikh

58

Observations Model Property miner

Property Instances

property types

Expressing Synoptic with InvariMint

Synoptic

slide-48
SLIDE 48

University of Washington Ivan Beschastnikh

59

Observations Model Property miner

Property Instances

x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y

Expressing Synoptic with InvariMint

Synoptic invariants

slide-49
SLIDE 49

University of Washington Ivan Beschastnikh

60

Observations Model Property miner

Property Instances

x AlwaysPrecedes y x NeverFollowedBy y

Expressing Synoptic with InvariMint

Synoptic invariants

s1 s2

y x {x}

Σ\

{y}

Σ\

x AlwaysFollowedBy y

slide-50
SLIDE 50

University of Washington Ivan Beschastnikh

61

Observations Model Property miner

Property Instances

x NeverFollowedBy y

Expressing Synoptic with InvariMint

Synoptic invariants

s1 s2

y x {x}

Σ\

{y}

Σ\

x AlwaysFollowedBy y

s1 s2

y x

s3

{x,y}

Σ\

Σ Σ

x AlwaysPrecedes y

slide-51
SLIDE 51

University of Washington Ivan Beschastnikh

62

Observations Model Property miner

Property Instances

Expressing Synoptic with InvariMint

Synoptic invariants

s1 s2

y x {x}

Σ\

{y}

Σ\

s1 s2

y x

s3

{x,y}

Σ\

Σ Σ

s1

y x

s3 s2

Σ

{x}

Σ\

{y}

Σ\

x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y

slide-52
SLIDE 52

University of Washington Ivan Beschastnikh

63

Observations Model Property miner

Property Instances

Expressing Synoptic with InvariMint

Synoptic invariants

s1 s2

y x {x}

Σ\

{y}

Σ\

s1 s2

y x

s3

{x,y}

Σ\

Σ Σ

s1

y x

s3 s2

Σ

{x}

Σ\

{y}

Σ\

x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y

This formulation is approximate: InvariMint model superset of Synoptic models

slide-53
SLIDE 53

x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y

University of Washington Ivan Beschastnikh

Expressing Synoptic with InvariMint

64

Observations Model Property miner

Property Instances

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

slide-54
SLIDE 54

x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y

University of Washington Ivan Beschastnikh

Expressing Synoptic with InvariMint

64

Observations Model Property miner

Property Instances

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

✓ ✓

slide-55
SLIDE 55

x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y

University of Washington Ivan Beschastnikh

Expressing Synoptic with InvariMint

65

Observations Model Property miner

Property Instances

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

✓ ✓

slide-56
SLIDE 56

x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y

University of Washington Ivan Beschastnikh

Expressing Synoptic with InvariMint

65

Observations Model Property miner

Property Instances

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

✓ ✓ ✓

slide-57
SLIDE 57

x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y

University of Washington Ivan Beschastnikh

Expressing Synoptic with InvariMint

66

Observations Model Property miner

Property Instances

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

✓ ✓ ✓

slide-58
SLIDE 58

x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y

University of Washington Ivan Beschastnikh

Expressing Synoptic with InvariMint

66

Observations Model Property miner

Property Instances

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

✓ ✓ ✓ ✓

slide-59
SLIDE 59

x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y

University of Washington Ivan Beschastnikh

Expressing Synoptic with InvariMint

67

Observations Model Property miner

Property Instances

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

✓ ✓ ✓ ✓

slide-60
SLIDE 60

x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y

University of Washington Ivan Beschastnikh

Expressing Synoptic with InvariMint

67

Observations Model Property miner

Property Instances

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

✓ ✓ ✓ ✓ ✓

slide-61
SLIDE 61

x AlwaysFollowedBy y x AlwaysPrecedes y x NeverFollowedBy y

University of Washington Ivan Beschastnikh

Expressing Synoptic with InvariMint

68

Observations Model Property miner

Property Instances

How can we: ... get kTails to ignore certain k-length sequences? ... add the x AlwaysFollowedBy y invariant to kTails? ... make Synoptic deterministic? ... add a new kind of invariant to Synoptic? ... learn which properties kTails/Synoptic preserve?

✓Transparency ✓Extensibility

InvariMint advantages:

slide-62
SLIDE 62
  • FSM-inference algorithms not transparent/extensible
  • InvariMint -- modular and declarative FSM-inference
  • Expressing algorithm using InvariMint
  • kTails -- a state-merging algorithm
  • Synoptic -- a state-splitting algorithm
  • General specification formalism
  • InvariMint evaluation

University of Washington Ivan Beschastnikh

Outline

69

slide-63
SLIDE 63

University of Washington Ivan Beschastnikh

70

Model Property miner

Property instances

InvariMint specifications

Observations Property types

slide-64
SLIDE 64

University of Washington Ivan Beschastnikh

71

Model Property miner Property composition

Property instances

InvariMint specifications

Observations Composition function Property types

slide-65
SLIDE 65

University of Washington Ivan Beschastnikh

72

Model Property miner Property composition

Property instances

InvariMint specifications

Observations Composition function Property type 1 Property type 2

...

slide-66
SLIDE 66

University of Washington Ivan Beschastnikh

73

Model Property miner Property composition

Property instances

InvariMint specifications

Observations Composition function Parameterized FSM Evaluation function

...

Parameterized FSM Evaluation function Property 1: Property 2:

  • Parameterized FSM (PFSM) -- property template
  • An FSM with variable-labeled transitions
  • Evaluation function
  • Controls when a PFSM is instantiated as an FSM
slide-67
SLIDE 67

University of Washington Ivan Beschastnikh

74

Model Property miner Property composition

Property instances

InvariMint specifications

Observations Composition function Parameterized FSM Evaluation function

...

Parameterized FSM Evaluation function Property 1: Property 2:

  • Parameterized FSM (PFSM) -- property template
  • An FSM with variable-labeled transitions
  • Evaluation function
  • Controls when a PFSM is instantiated as an FSM

FSMs

slide-68
SLIDE 68

University of Washington Ivan Beschastnikh

75

Model Property miner Property composition

Property instances

InvariMint specifications

Observations Composition function

...

Property 1: Property 2:

  • Parameterized FSM (PFSM) -- property template
  • An FSM with variable-labeled transitions
  • Evaluation function
  • Controls when a PFSM is instantiated as an FSM

FSMs An equation over FSMs

Parameterized FSM Evaluation function Parameterized FSM Evaluation function

slide-69
SLIDE 69
  • FSM-inference algorithms not transparent/extensible
  • InvariMint -- modular and declarative FSM-inference
  • Expressing algorithm using InvariMint
  • kTails -- a state-merging algorithm
  • Synoptic -- a state-splitting algorithm
  • General specification formalism
  • InvariMint evaluation

University of Washington Ivan Beschastnikh

Outline

76

slide-70
SLIDE 70

University of Washington Ivan Beschastnikh

InvariMint expressiveness

  • FSM-inference algorithms from prior work
  • Expressed kTails and Synoptic
  • Useful for understanding both algorithms
  • Noticed overlap in their InvariMint specifications!
  • What can and can’t we express with InvariMint?
  • Limited to FSM algorithms that consider temporality
  • Constrains inference to composition of properties
  • Benefits from a formal background

77

slide-71
SLIDE 71

University of Washington Ivan Beschastnikh

InvariMint performance

  • FSM inference useful for large systems
  • Compact representation of mass executions
  • A node at Google generates a million messages/day
  • Does transparency and extensibility impact

performance?

  • InvariMint versions of kTails and Synoptic
  • ver 100x faster than procedural variants

78

Xu et al. SLAML 2010

slide-72
SLIDE 72

University of Washington Ivan Beschastnikh

Performance: kTails

79

200 400 600 800 1000 5 10 15 20 25 30 35 40 45 50 Time (s) Log length (thousands of events) kTails InvariMint kTails

Observations

  • InvariMint kTails much faster than procedural kTails
  • Efficient FSM composition (e.g., intersection)
  • The full log is never maintained in memory

Procedural kTails (thousands of events)

slide-73
SLIDE 73

100 200 300 400 500 600 700 5 10 15 20 25 30 35 40 45 Time (s) Property instances Synoptic InvariMint Synoptic

University of Washington Ivan Beschastnikh

Performance: Synoptic

80

Property Instances

  • Procedural Synoptic much slower than InvariMint Synoptic
  • Synoptic’s modeling check invariants
  • Synoptic’s refinement deals with concrete event instances

Procedural Synoptic

slide-74
SLIDE 74

University of Washington Ivan Beschastnikh

Contributions

81

synoptic.googlecode.com

FSM-inference algorithms are not transparent/extensible

Open source

InvariMint

src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit src : 2, dst : 0, timestamp : 4, type : tx_commit src : 2, dst : 1, timestamp : 5, type : tx_commit src : 0, dst : 2, timestamp : 6, type : ack src : 1, dst : 2, timestamp : 7, type : ack src : 2, dst : 0, timestamp : 8, type : prepare src : 2, dst : 1, timestamp : 9, type : prepare src : 0, dst : 2, timestamp : 10, type : commit src : 1, dst : 2, timestamp : 11, type : commit src : 2, dst : 0, timestamp : 12, type : tx_commit src : 2, dst : 1, timestamp : 13, type : tx_commit src : 0, dst : 2, timestamp : 14, type : ack src : 1, dst : 2, timestamp : 15, type : ack src : 2, dst : 0, timestamp : 16, type : prepare src : 2, dst : 1, timestamp : 17, type : prepare src : 0, dst : 2, timestamp : 18, type : commit src : 1, dst : 2, timestamp : 19, type : commit src : 2, dst : 0, timestamp : 20, type : tx_commit src : 2, dst : 1, timestamp : 21, type : tx_commit src : 0, dst : 2, timestamp : 22, type : ack src : 1, dst : 2, timestamp : 23, type : ack src : 2, dst : 0, timestamp : 0, type : prepare src : 2, dst : 1, timestamp : 1, type : prepare src : 0, dst : 2, timestamp : 2, type : commit src : 1, dst : 2, timestamp : 3, type : commit s1 s2

¬x ¬y

y x

t1 t3

¬y

y x t2

* *

propose commit tx-commit tx-abort abort commit abort
slide-75
SLIDE 75

University of Washington Ivan Beschastnikh

Contributions

82

FSM-inference algorithms are not transparent/extensible

  • Provides insight into how an algorithms works
  • A common language for inference algorithms
  • Simplifies extension of existing algorithms
  • Faster than procedural equivalents

Open source

InvariMint

Declarative specification of FSM-inference algorithms

synoptic.googlecode.com