LARA

WiDS bug #1 scenario

  • P: Propose
  • R: ProposeResponse (i.e. Promise)
  • A: Accept
  • L: Learn
  • C: Chosen value

WiDS Bug number 1 scenario

analyze

maysam@nslrack52:~/secondRun/pastryNode2$ ~/analyzeLog.sh

NODE_NUM 3

DIR_PREFIX /home/maysam/secondRun/pastryNode

duration: 25

LIVE_CNT is 0

awk: (FILENAME=- FNR=2) fatal: division by zero attempted awk: (FILENAME=- FNR=2) fatal: division by zero attempted awk: fatal: division by zero attempted QUERY_CNT is 16

AVOID_CNT is 2

FALSE_AVOID_CNT is 1

_1STEP_RUN_CNT is 15

_1STEP_AVOID_CNT is 0

Avoidance

0

180:1221237931.799641 07 [TRACE::Paxos::propose::(demux)] Firing Transition downcall propose [ guards : (true) ] void propose(mace::string const & key, mace::string const & value, registration_uid_t rid)

267:REPRODUCE case 2

334:REPRODUCE case 3

423:REPRODUCE case 5

567:REPRODUCE case 6

684:REPRODUCE case 7

754:REPRODUCE case 10

1

171:REPRODUCE case 4

238:REPRODUCE case 9

1078:1221237945.811295 07 [TRACE::Paxos::propose::(demux)] Firing Transition downcall propose [ guards : (true) ] void propose(mace::string const & key, mace::string const & value, registration_uid_t rid)

1162:REPRODUCE case 12

1248:REPRODUCE case 13

2

816:REPRODUCE case 14 =⇒ It is avoided

speed

Bug is Reported here

depths of 11, 3419 in 6

depths of 12, 7111 in 16

depths of 13, 12242 in 40

depths of 14, 19061 in 73

depths of 15, 27726 in 116

depths of 16, 38328 in 172

depths of 17, 51130 in 242

depths of 18, 66616 in 330

depths of 19, 85838 in 443

simplified state

    void PaxosService::printState(std::ostream& __out) const {
      __out << "state=" << getStateName(state) << std::endl;
      //__out << "prepared=";  mace::printState(__out, &(prepared), (prepared));
      //__out << "accepted=";  mace::printState(__out, &(accepted), (accepted));
      //__out << "proposals=";  mace::printState(__out, &(proposals), (proposals));
      //__out << "learnedValues=";  mace::printState(__out, &(learnedValues), (learnedValues));
      __out << "chosenValues=";  mace::printState(__out, &(chosenValues), (chosenValues));
      __out << "chosenValue=";  mace::printState(__out, &(chosenValue), (chosenValue));
      //__out << "__snapshots_logicalclock=";  mace::printState(__out, &(__snapshots_logicalclock), (__snapshots_logicalclock));
      __out << std::endl;
      if(_printLower) {
        _m.printState(__out);
        _mu.printState(__out);
        _t.printState(__out);
      }
      return;
    }

params.default

#Definitely set this one!

MACE_PRINT_HOSTNAME_ONLY = 1

#For more verbosity use higher numbers. But the default is very verbose on replay.

#MACE_LOG_LEVEL = 1

#Control network and node errors

#USE_UDP_REORDER = 1

#USE_UDP_ERRORS = 1

#USE_NET_ERRORS=1 # specifically TCP errors

#SIM_NODE_FAILURE=1

#Whether the search should use best-first or not – turning on is less tested, but can be faster at the expense of more memory

USE_BEST_FIRST = 0

MACE_PORT=5377 #10201 #Just some random port number

max_num_steps=20000 #How many steps before the path is considered dead

#Controlls how often status is printed out – the path number is masked with this number, and if it's 0 prints path status

#search_print_mask=0

#search_print_mask=15

#search_print_mask=255

search_print_mask=4095

#When set to 1, prints the serch prefix to a file (prefixN.path) for each path found which leads to a live state

PRINT_SEARCH_PREFIX=0

#Controls search features. Recommended to leave these on.

#USE_RANDOM_WALKS=1

USE_GUSTO=1

USE_STATE_HASHES=1

#NUM_RANDOM_PATHS=60 # The number of paths to attempt at a prefix length before declaring a prefix dead.

#When set, the model checker will stop after exploring this number of paths.

MAX_PATHS=200000000

#MAX_PATHS=200

#MAX_PATHS=50000

#MAX_PATHS=1000000

#The divergence monitor will signal errors when transitions take

#longer than divergence_timeout. A kind of deadlock detector.

RUN_DIVERGENCE_MONITOR = 1

divergence_assert = 1 # causes a divergence to end the execution, as opposed to allowing it to continue to see if the transition will complete.

divergence_timeout = 30 # how long is considered too long to run a single transition

#Which test to run

#CHECKED_SERVICE=Pastry

#CHECKED_SERVICE=Chord

#CHECKED_SERVICE=RandTree

CHECKED_SERVICE=Paxos

#num_nodes=100 #number of nodes to create

queue_size=100000 #commonly used to pass into the SimulatedTCP service for buffer size (in # messages) before dropping them.

#You can also set service-specific parameters here:

#MaceTransport

#messageCount = 16

#messageSize = 1600

#useRTS = 1

#CHECKED_SERVICE=MaceTransport

#Trace options

#TRACE_ALL=1

#TRACE_SUBST=ERROR

#TRACE_SUBST=::forward::(demux) ::deliver::(demux) ::requestFlushedNotification ::expire ::maceInit ::route (downcall) (upcall) (routine) (timer) Propert Quantification SimulatorUDPService logThread monitor Simulator SimulateEventEnd SimulateEventBegin NumberGen getReadyNodes SimNetwork SimScheduler SimApplication SimTransportApp

#TRACE_SIMULATOR=1

#TRACE_STATE=1

#Parameters for using the replay run – the name of the file to provide the sequence

#RANDOM_REPLAY_FILE=- # a '-' means it will read the file from standard input. mdb uses this for live-replays.

#RANDOM_REPLAY_FILE=error1.path

#RANDOM_REPLAY_FILE=error2.path

#LAST_NAIL_REPLAY_FILE=error1.path # the path to search around. run-modelchecker uses this internally

#Parameters for using the state space search: Search depth and an optional sequence to start with.

SEARCH_DEPTH=11 # controls the bounded search depth increment. Is both the starting depth and the depth increment

#RANDOM_UTIL_PREFIX_FILE=prefix1.path # start the search after executing the path in prefix1.path

#RANDOM_UTIL_PREFIX_SEARCH=1 2 1 2 1 0 1 3 1 0 2 2 2 0 0 # Can also specify the path here. Advanced use only

#RANDOM_UTIL_START_SEARCH=1 1 3 0 0 1 1 1 2 0 2 1 0 0 0 # Can be used to skip ahead in the search. Advanced use only

#There are a variety of other configuration options for advanced users. See the code for these.

#Added by Maysam Yabandeh

#nodeIP(0)=nslrack52

#nodeIP(1)=nslrack04

#nodeIP(2)=nslrack06

#nodeIP(3)=nslrack07

#nodeIP(4)=nslrack08

#myNodeId=0

MAX_DEAD_PATHS=1000

#FIRST_PATH_TO_BUG_IS_ENOUGH=1

#I_USE_ONLY_LOCAL_PROPERTIES=1

DONT_EXIT=1

#LET_MODELCHECKER_FINISH_HIS_JOB=1

#child_size=5

#DEBUGGER_MODE=1

FIX_ISSAFE_INIT_BUG=1

#BACKUP_BUG_STATE=1

#START_APPLICATION_FROM_INITIAL_SCENARIO=1

FIX_ORIGINAL_ID_BUG=1

INIT_NETWORK=1

######LIVENESS_RETURN_VALUE_DOES_NOT_MATTER=1

MAX_LIVENESS_PENALTY=10

#

1STEP_CHECK=1

######PROBABILISTIC_ACTION_SELECTION=1

#

SERIAL_SEARCH=1

#SUPER_SERIAL_SEARCH=1

EXECUTION_STEERING=1

RUN_PARALLEL_MODELCHECKER=1

CONSIDER_ES_ACTION_CONSEQUENCES=1

#

#never enable CONSIDER_ES_ACTION_CONSEQUENCES && SUPER_SERIAL_SEARCH, the code is not update for both of them to be enabled

bandwidthLimit=1000000

REPRODUCE_MODE=1

num_nodes=3 #number of nodes to create

nodeIP(1)=10.0.0.5

nodeIP(0)=10.0.0.1

nodeIP(2)=10.0.0.9

myNodeId=2