16
CS 711 & SE 710 A#1 DRAFT V2 radu/2009 1.16 COMPSCI 711 & SOFTENG 710: Assignment #1 Overview This assignment aims to give you a deeper understanding on several fundamental distributed algorithms, as described in the textbook, Distributed Algorithms, by Nancy Lynch. The practical implementation will use the .NET framework. Part 1 requires you to build a visual simulation of the EIG Byzantine agreement protocol (Lynch chapter 6), consisting of a number of distributed processes, synchronized via a general-purpose global synchronization library (Lynch chapter 16). The deliverable will consist of three related subprojects: 1. Synchronizer, a multi-threaded general-purpose global synchronization library, with round control facilities. 2. DriverByz, a GUI driver that runs a configurable Byz scenario, consisting of a number of ParticipantByz players, globally synchronized via the Synchronizer library. 3. ParticipantByz, a GUI participant in the EIG Byz protocol, adapted to send and receive all its messages as single packets (compatible with our synchronizer). The DriverByz GUI will initiate and control all processes and trace the message flow in a textbox. The ParticipantByz GUI will visually demonstrate the main activities of the EIG algorithm, in a way similar to the demo used in the lectures. The Driver+Synchronizer and the Participants will use communication lines as suggested by the following sample diagram: Driver+Synchronizer http://localhost:8080/Sync Participant #1 http://localhost:8091/User Participant #3 http://localhost:8093/User Participant #2 http://localhost:8092/User Participant #4 http://localhost:8094/User

COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

116

COMPSCI 711 amp SOFTENG 710 Assignment 1

Overview

This assignment aims to give you a deeper understanding on several fundamental

distributed algorithms as described in the textbook Distributed Algorithms by Nancy

Lynch The practical implementation will use the NET framework

Part 1 requires you to build a visual simulation of the EIG Byzantine agreement

protocol (Lynch chapter 6) consisting of a number of distributed processes

synchronized via a general-purpose global synchronization library (Lynch chapter

16) The deliverable will consist of three related subprojects

1 Synchronizer a multi-threaded general-purpose global synchronization

library with round control facilities

2 DriverByz a GUI driver that runs a configurable Byz scenario consisting of a

number of ParticipantByz players globally synchronized via the Synchronizer

library

3 ParticipantByz a GUI participant in the EIG Byz protocol adapted to send

and receive all its messages as single packets (compatible with our

synchronizer)

The DriverByz GUI will initiate and control all processes and trace the message flow

in a textbox

The ParticipantByz GUI will visually demonstrate the main activities of the EIG

algorithm in a way similar to the demo used in the lectures

The Driver+Synchronizer and the Participants will use communication lines as

suggested by the following sample diagram

Driver+Synchronizer

httplocalhost8080Sync

Participant 1

httplocalhost8091User

Participant 3

httplocalhost8093User

Participant 2

httplocalhost8092User

Participant 4

httplocalhost8094User

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

216

The Driver‟s GUI provides a Step button that triggers round operations Each click

will send to the participants the round n messages accumulated in Synchronizer trays

This dataflow is suggested by the following diagram below (time axis up-down)

Comments

o Note the ldquonon-standardrdquo position of the Step click According to the literal

textbook definition it is located in the middle of a round just before

forwarding out messages to processes However this seems to simplify the

implementation logic

o To simplify the bootstrap you may conceptually consider that the first Step

click triggers the last part of a virtual round 0 where the Synchronizer

conceptually sends out null messages (practically it need not do this)

o To simplify the implementation consider that a faulty process that wants to

send illegal messages or doesn‟t want to communicate will always send out

null messages in this represented by value 2

Implementation

o For the GUI part use either WPF (preferably) or Windows Forms (ok no

penalty)

o The demo ParticipantByz uses a dynamic visual tree You can do something

similar (preferably) or display the trees as indented text in a textbox (no

penalty)

Round n Round n

P

1

S

Y

N

C

P

2

State transition as

indicated by button

clicks

Step click

State transition as

indicated by button

clicks

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

316

o For messaging your implementation must use WCF with the builtin

BasicHttpBinding and OneWay messages

o The required Synchronizer service and data contract is described in the

appendices The Participants need to extend this general purpose contract with

algorithm specific features

o Configure your processes using the indicated XML config files and

command-line arguments (where command-line arguments have priority)

o Ensure wherever needed that all secondary threads respect the GUI thread

affinity

Part 2 requires you to write a README document with the following contents

1 [about 3 pages] A high-level description of your design and implementation

explaining your choices and documenting your own ideas and extensions Include

an explanation of the technique used to pass messages of unknown types through

the general-purpose synchronizer

2 [about 3 pages] Discuss how the EIG Byzantine agreement algorithm described

in the textbook and implemented by you differs from the ConsistentBroadcast

based PolyByz algorithm

3 References with proper citations and references and at least a few books and

journal articles

Even if very brief use a consistent article style such as LNCS

Submission Details

Submit a ZIP archive named after your UPI eg APOW007ZIP This archive must

contain a folder with the same name eg APOW007 containing your solution its 3

subprojects and your README document as indicated by the structure of the given

skeleton (try to follow its layout and conventions)

Before submitting ensure that your solution can be easily executed on another

computer (including the computer which will be used for marking )

Submission deadlines

Your assignment must be submitted electronically to the dropbox no later than

Monday 21 September 2009 2100 Late submissions will incur penalties

Draft note

Comments and requests for clarifications are welcome until Monday 10 August

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

416

Appendices

APOW007 Folder Layout

o Readme doc

o Solution files

o Synchronizer folder

o Synchronizer project

o hellip

o ParticipantByz folder

o ParticipantByz project

o hellip

o DriverByz folder

o DriverByz project

o hellip

Operational details

o The whole system should start by double clicking on DriverByzexe

o DriverByz reads the following key from its config file that indicates the

location of the corresponding Participant executable eg

ltadd key=participant value=ParticipantByzParticipantByzexegt

o DriverByz starts listening at the fixed base address

httplocalhost8080Sync and starts up its GUI with an editable textbox

used to configure the desired scenario

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

516

o This textbox starts with initial values ldquo2 0 1 1rdquo corresponding to N=4

participants

1 1 starts with 0 and is faulty

2 2 starts with 0 and is non-faulty

3 3 starts with 1 and is non-faulty

4 4 starts with 1 and is non-faulty

o Generally this textbox can contain any number and combination of characters

1 Whitespaces are ignored

2 Character bdquo0‟ indicates a non-faulty process starting with 0

3 Character bdquo1‟ indicates a non-faulty process starting with 1

4 Character bdquo2‟ indicates a faulty process starting with 0

5 Character bdquo3‟ or any other non-space character indicates a faulty

process starting with 1

o Clicking on the Start button will launch N copies of the ParticipantByzexe

executable individualized by way of command-line arguments The Start

button becomes and remains disabled until all participants send out their

messages

o The ParticipantByz command-line arguments indicate in order

1 A fixed value 1 indicating a process which uses the synchronizer

0 will indicate a scenario where processes communicate

directly without using the synchronizer However you are not

required to cover this case

2 N the number of participants eg 4

3 The current process index in 1N eg 1 2 3 or 4

4 The initial value ie 0 or 1

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

616

5 A slash followed by the corresponding value in the textbox (for visual

control this argument is not used by ParticipantByz) eg 2 0 1 or

1

o Participants start their own GUI and start listening at the base address

httplocalhost809xUser where x is the process index (but no activity is

actually started) In our example there will be 4 processes respectively

listening at httplocalhost8091User httplocalhost8092User

httplocalhost8093User httplocalhost8094User and showing the

following initial GUIs

o Only the Prepare button is initially enabled The EIG trees are presented via

a tree control where nodes are colour coded according to the recorded value

red for 0 green for 1 yellow for null The tree is automatically expanded

during the top-down phase and collapsed during the bottom-up evaluation

Initially only the root is shown showing initial values As mentioned you

can also display the tree by indented text in a textbox

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

716

o A first click on Prepare displays the messages that will be normally sent at

round 1 by a non-faulty process in order to all participants (including self)

The Prepare button is disabled and the Send button is enabled

o A Byzantine faulty process offers you the possibility to change the correct

messages to whatever you may want where 2 or anything different from

space 0 and 1 indicates null (extra spaces and messages are ignored and

missing messages are assumed 2 ie null)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

816

o A click on Participant‟s Send will effectively send all its messages to the

Driver where they are listed and internally reorganized by destination The

Participant‟s Send button is disabled and the Driverrsquos Send button is enabled

after all messages are received from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

916

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1016

o A click on Driverrsquos Send button forwards all accumulated round 1 messages

to their destinations Driverrsquos Send button is disabled participants process

their messages and their Prepare buttons are re-enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1116

o A second click on Participantrsquos Prepare displays the messages that will be

normally sent at round 2 Button Prepare is disabled and button Send is

enabled A Byzantine faulty participant will again offer you the possibility to

change the messages (this option was not used in this example) A click on

Send sends out the messages and then the button becomes disabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1216

o The Driver logs all received messages internally reorganizes them according

to their destination and its button Send is enabled after receiving messages

from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 2: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

216

The Driver‟s GUI provides a Step button that triggers round operations Each click

will send to the participants the round n messages accumulated in Synchronizer trays

This dataflow is suggested by the following diagram below (time axis up-down)

Comments

o Note the ldquonon-standardrdquo position of the Step click According to the literal

textbook definition it is located in the middle of a round just before

forwarding out messages to processes However this seems to simplify the

implementation logic

o To simplify the bootstrap you may conceptually consider that the first Step

click triggers the last part of a virtual round 0 where the Synchronizer

conceptually sends out null messages (practically it need not do this)

o To simplify the implementation consider that a faulty process that wants to

send illegal messages or doesn‟t want to communicate will always send out

null messages in this represented by value 2

Implementation

o For the GUI part use either WPF (preferably) or Windows Forms (ok no

penalty)

o The demo ParticipantByz uses a dynamic visual tree You can do something

similar (preferably) or display the trees as indented text in a textbox (no

penalty)

Round n Round n

P

1

S

Y

N

C

P

2

State transition as

indicated by button

clicks

Step click

State transition as

indicated by button

clicks

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

316

o For messaging your implementation must use WCF with the builtin

BasicHttpBinding and OneWay messages

o The required Synchronizer service and data contract is described in the

appendices The Participants need to extend this general purpose contract with

algorithm specific features

o Configure your processes using the indicated XML config files and

command-line arguments (where command-line arguments have priority)

o Ensure wherever needed that all secondary threads respect the GUI thread

affinity

Part 2 requires you to write a README document with the following contents

1 [about 3 pages] A high-level description of your design and implementation

explaining your choices and documenting your own ideas and extensions Include

an explanation of the technique used to pass messages of unknown types through

the general-purpose synchronizer

2 [about 3 pages] Discuss how the EIG Byzantine agreement algorithm described

in the textbook and implemented by you differs from the ConsistentBroadcast

based PolyByz algorithm

3 References with proper citations and references and at least a few books and

journal articles

Even if very brief use a consistent article style such as LNCS

Submission Details

Submit a ZIP archive named after your UPI eg APOW007ZIP This archive must

contain a folder with the same name eg APOW007 containing your solution its 3

subprojects and your README document as indicated by the structure of the given

skeleton (try to follow its layout and conventions)

Before submitting ensure that your solution can be easily executed on another

computer (including the computer which will be used for marking )

Submission deadlines

Your assignment must be submitted electronically to the dropbox no later than

Monday 21 September 2009 2100 Late submissions will incur penalties

Draft note

Comments and requests for clarifications are welcome until Monday 10 August

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

416

Appendices

APOW007 Folder Layout

o Readme doc

o Solution files

o Synchronizer folder

o Synchronizer project

o hellip

o ParticipantByz folder

o ParticipantByz project

o hellip

o DriverByz folder

o DriverByz project

o hellip

Operational details

o The whole system should start by double clicking on DriverByzexe

o DriverByz reads the following key from its config file that indicates the

location of the corresponding Participant executable eg

ltadd key=participant value=ParticipantByzParticipantByzexegt

o DriverByz starts listening at the fixed base address

httplocalhost8080Sync and starts up its GUI with an editable textbox

used to configure the desired scenario

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

516

o This textbox starts with initial values ldquo2 0 1 1rdquo corresponding to N=4

participants

1 1 starts with 0 and is faulty

2 2 starts with 0 and is non-faulty

3 3 starts with 1 and is non-faulty

4 4 starts with 1 and is non-faulty

o Generally this textbox can contain any number and combination of characters

1 Whitespaces are ignored

2 Character bdquo0‟ indicates a non-faulty process starting with 0

3 Character bdquo1‟ indicates a non-faulty process starting with 1

4 Character bdquo2‟ indicates a faulty process starting with 0

5 Character bdquo3‟ or any other non-space character indicates a faulty

process starting with 1

o Clicking on the Start button will launch N copies of the ParticipantByzexe

executable individualized by way of command-line arguments The Start

button becomes and remains disabled until all participants send out their

messages

o The ParticipantByz command-line arguments indicate in order

1 A fixed value 1 indicating a process which uses the synchronizer

0 will indicate a scenario where processes communicate

directly without using the synchronizer However you are not

required to cover this case

2 N the number of participants eg 4

3 The current process index in 1N eg 1 2 3 or 4

4 The initial value ie 0 or 1

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

616

5 A slash followed by the corresponding value in the textbox (for visual

control this argument is not used by ParticipantByz) eg 2 0 1 or

1

o Participants start their own GUI and start listening at the base address

httplocalhost809xUser where x is the process index (but no activity is

actually started) In our example there will be 4 processes respectively

listening at httplocalhost8091User httplocalhost8092User

httplocalhost8093User httplocalhost8094User and showing the

following initial GUIs

o Only the Prepare button is initially enabled The EIG trees are presented via

a tree control where nodes are colour coded according to the recorded value

red for 0 green for 1 yellow for null The tree is automatically expanded

during the top-down phase and collapsed during the bottom-up evaluation

Initially only the root is shown showing initial values As mentioned you

can also display the tree by indented text in a textbox

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

716

o A first click on Prepare displays the messages that will be normally sent at

round 1 by a non-faulty process in order to all participants (including self)

The Prepare button is disabled and the Send button is enabled

o A Byzantine faulty process offers you the possibility to change the correct

messages to whatever you may want where 2 or anything different from

space 0 and 1 indicates null (extra spaces and messages are ignored and

missing messages are assumed 2 ie null)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

816

o A click on Participant‟s Send will effectively send all its messages to the

Driver where they are listed and internally reorganized by destination The

Participant‟s Send button is disabled and the Driverrsquos Send button is enabled

after all messages are received from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

916

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1016

o A click on Driverrsquos Send button forwards all accumulated round 1 messages

to their destinations Driverrsquos Send button is disabled participants process

their messages and their Prepare buttons are re-enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1116

o A second click on Participantrsquos Prepare displays the messages that will be

normally sent at round 2 Button Prepare is disabled and button Send is

enabled A Byzantine faulty participant will again offer you the possibility to

change the messages (this option was not used in this example) A click on

Send sends out the messages and then the button becomes disabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1216

o The Driver logs all received messages internally reorganizes them according

to their destination and its button Send is enabled after receiving messages

from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 3: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

316

o For messaging your implementation must use WCF with the builtin

BasicHttpBinding and OneWay messages

o The required Synchronizer service and data contract is described in the

appendices The Participants need to extend this general purpose contract with

algorithm specific features

o Configure your processes using the indicated XML config files and

command-line arguments (where command-line arguments have priority)

o Ensure wherever needed that all secondary threads respect the GUI thread

affinity

Part 2 requires you to write a README document with the following contents

1 [about 3 pages] A high-level description of your design and implementation

explaining your choices and documenting your own ideas and extensions Include

an explanation of the technique used to pass messages of unknown types through

the general-purpose synchronizer

2 [about 3 pages] Discuss how the EIG Byzantine agreement algorithm described

in the textbook and implemented by you differs from the ConsistentBroadcast

based PolyByz algorithm

3 References with proper citations and references and at least a few books and

journal articles

Even if very brief use a consistent article style such as LNCS

Submission Details

Submit a ZIP archive named after your UPI eg APOW007ZIP This archive must

contain a folder with the same name eg APOW007 containing your solution its 3

subprojects and your README document as indicated by the structure of the given

skeleton (try to follow its layout and conventions)

Before submitting ensure that your solution can be easily executed on another

computer (including the computer which will be used for marking )

Submission deadlines

Your assignment must be submitted electronically to the dropbox no later than

Monday 21 September 2009 2100 Late submissions will incur penalties

Draft note

Comments and requests for clarifications are welcome until Monday 10 August

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

416

Appendices

APOW007 Folder Layout

o Readme doc

o Solution files

o Synchronizer folder

o Synchronizer project

o hellip

o ParticipantByz folder

o ParticipantByz project

o hellip

o DriverByz folder

o DriverByz project

o hellip

Operational details

o The whole system should start by double clicking on DriverByzexe

o DriverByz reads the following key from its config file that indicates the

location of the corresponding Participant executable eg

ltadd key=participant value=ParticipantByzParticipantByzexegt

o DriverByz starts listening at the fixed base address

httplocalhost8080Sync and starts up its GUI with an editable textbox

used to configure the desired scenario

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

516

o This textbox starts with initial values ldquo2 0 1 1rdquo corresponding to N=4

participants

1 1 starts with 0 and is faulty

2 2 starts with 0 and is non-faulty

3 3 starts with 1 and is non-faulty

4 4 starts with 1 and is non-faulty

o Generally this textbox can contain any number and combination of characters

1 Whitespaces are ignored

2 Character bdquo0‟ indicates a non-faulty process starting with 0

3 Character bdquo1‟ indicates a non-faulty process starting with 1

4 Character bdquo2‟ indicates a faulty process starting with 0

5 Character bdquo3‟ or any other non-space character indicates a faulty

process starting with 1

o Clicking on the Start button will launch N copies of the ParticipantByzexe

executable individualized by way of command-line arguments The Start

button becomes and remains disabled until all participants send out their

messages

o The ParticipantByz command-line arguments indicate in order

1 A fixed value 1 indicating a process which uses the synchronizer

0 will indicate a scenario where processes communicate

directly without using the synchronizer However you are not

required to cover this case

2 N the number of participants eg 4

3 The current process index in 1N eg 1 2 3 or 4

4 The initial value ie 0 or 1

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

616

5 A slash followed by the corresponding value in the textbox (for visual

control this argument is not used by ParticipantByz) eg 2 0 1 or

1

o Participants start their own GUI and start listening at the base address

httplocalhost809xUser where x is the process index (but no activity is

actually started) In our example there will be 4 processes respectively

listening at httplocalhost8091User httplocalhost8092User

httplocalhost8093User httplocalhost8094User and showing the

following initial GUIs

o Only the Prepare button is initially enabled The EIG trees are presented via

a tree control where nodes are colour coded according to the recorded value

red for 0 green for 1 yellow for null The tree is automatically expanded

during the top-down phase and collapsed during the bottom-up evaluation

Initially only the root is shown showing initial values As mentioned you

can also display the tree by indented text in a textbox

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

716

o A first click on Prepare displays the messages that will be normally sent at

round 1 by a non-faulty process in order to all participants (including self)

The Prepare button is disabled and the Send button is enabled

o A Byzantine faulty process offers you the possibility to change the correct

messages to whatever you may want where 2 or anything different from

space 0 and 1 indicates null (extra spaces and messages are ignored and

missing messages are assumed 2 ie null)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

816

o A click on Participant‟s Send will effectively send all its messages to the

Driver where they are listed and internally reorganized by destination The

Participant‟s Send button is disabled and the Driverrsquos Send button is enabled

after all messages are received from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

916

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1016

o A click on Driverrsquos Send button forwards all accumulated round 1 messages

to their destinations Driverrsquos Send button is disabled participants process

their messages and their Prepare buttons are re-enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1116

o A second click on Participantrsquos Prepare displays the messages that will be

normally sent at round 2 Button Prepare is disabled and button Send is

enabled A Byzantine faulty participant will again offer you the possibility to

change the messages (this option was not used in this example) A click on

Send sends out the messages and then the button becomes disabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1216

o The Driver logs all received messages internally reorganizes them according

to their destination and its button Send is enabled after receiving messages

from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 4: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

416

Appendices

APOW007 Folder Layout

o Readme doc

o Solution files

o Synchronizer folder

o Synchronizer project

o hellip

o ParticipantByz folder

o ParticipantByz project

o hellip

o DriverByz folder

o DriverByz project

o hellip

Operational details

o The whole system should start by double clicking on DriverByzexe

o DriverByz reads the following key from its config file that indicates the

location of the corresponding Participant executable eg

ltadd key=participant value=ParticipantByzParticipantByzexegt

o DriverByz starts listening at the fixed base address

httplocalhost8080Sync and starts up its GUI with an editable textbox

used to configure the desired scenario

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

516

o This textbox starts with initial values ldquo2 0 1 1rdquo corresponding to N=4

participants

1 1 starts with 0 and is faulty

2 2 starts with 0 and is non-faulty

3 3 starts with 1 and is non-faulty

4 4 starts with 1 and is non-faulty

o Generally this textbox can contain any number and combination of characters

1 Whitespaces are ignored

2 Character bdquo0‟ indicates a non-faulty process starting with 0

3 Character bdquo1‟ indicates a non-faulty process starting with 1

4 Character bdquo2‟ indicates a faulty process starting with 0

5 Character bdquo3‟ or any other non-space character indicates a faulty

process starting with 1

o Clicking on the Start button will launch N copies of the ParticipantByzexe

executable individualized by way of command-line arguments The Start

button becomes and remains disabled until all participants send out their

messages

o The ParticipantByz command-line arguments indicate in order

1 A fixed value 1 indicating a process which uses the synchronizer

0 will indicate a scenario where processes communicate

directly without using the synchronizer However you are not

required to cover this case

2 N the number of participants eg 4

3 The current process index in 1N eg 1 2 3 or 4

4 The initial value ie 0 or 1

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

616

5 A slash followed by the corresponding value in the textbox (for visual

control this argument is not used by ParticipantByz) eg 2 0 1 or

1

o Participants start their own GUI and start listening at the base address

httplocalhost809xUser where x is the process index (but no activity is

actually started) In our example there will be 4 processes respectively

listening at httplocalhost8091User httplocalhost8092User

httplocalhost8093User httplocalhost8094User and showing the

following initial GUIs

o Only the Prepare button is initially enabled The EIG trees are presented via

a tree control where nodes are colour coded according to the recorded value

red for 0 green for 1 yellow for null The tree is automatically expanded

during the top-down phase and collapsed during the bottom-up evaluation

Initially only the root is shown showing initial values As mentioned you

can also display the tree by indented text in a textbox

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

716

o A first click on Prepare displays the messages that will be normally sent at

round 1 by a non-faulty process in order to all participants (including self)

The Prepare button is disabled and the Send button is enabled

o A Byzantine faulty process offers you the possibility to change the correct

messages to whatever you may want where 2 or anything different from

space 0 and 1 indicates null (extra spaces and messages are ignored and

missing messages are assumed 2 ie null)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

816

o A click on Participant‟s Send will effectively send all its messages to the

Driver where they are listed and internally reorganized by destination The

Participant‟s Send button is disabled and the Driverrsquos Send button is enabled

after all messages are received from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

916

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1016

o A click on Driverrsquos Send button forwards all accumulated round 1 messages

to their destinations Driverrsquos Send button is disabled participants process

their messages and their Prepare buttons are re-enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1116

o A second click on Participantrsquos Prepare displays the messages that will be

normally sent at round 2 Button Prepare is disabled and button Send is

enabled A Byzantine faulty participant will again offer you the possibility to

change the messages (this option was not used in this example) A click on

Send sends out the messages and then the button becomes disabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1216

o The Driver logs all received messages internally reorganizes them according

to their destination and its button Send is enabled after receiving messages

from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 5: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

516

o This textbox starts with initial values ldquo2 0 1 1rdquo corresponding to N=4

participants

1 1 starts with 0 and is faulty

2 2 starts with 0 and is non-faulty

3 3 starts with 1 and is non-faulty

4 4 starts with 1 and is non-faulty

o Generally this textbox can contain any number and combination of characters

1 Whitespaces are ignored

2 Character bdquo0‟ indicates a non-faulty process starting with 0

3 Character bdquo1‟ indicates a non-faulty process starting with 1

4 Character bdquo2‟ indicates a faulty process starting with 0

5 Character bdquo3‟ or any other non-space character indicates a faulty

process starting with 1

o Clicking on the Start button will launch N copies of the ParticipantByzexe

executable individualized by way of command-line arguments The Start

button becomes and remains disabled until all participants send out their

messages

o The ParticipantByz command-line arguments indicate in order

1 A fixed value 1 indicating a process which uses the synchronizer

0 will indicate a scenario where processes communicate

directly without using the synchronizer However you are not

required to cover this case

2 N the number of participants eg 4

3 The current process index in 1N eg 1 2 3 or 4

4 The initial value ie 0 or 1

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

616

5 A slash followed by the corresponding value in the textbox (for visual

control this argument is not used by ParticipantByz) eg 2 0 1 or

1

o Participants start their own GUI and start listening at the base address

httplocalhost809xUser where x is the process index (but no activity is

actually started) In our example there will be 4 processes respectively

listening at httplocalhost8091User httplocalhost8092User

httplocalhost8093User httplocalhost8094User and showing the

following initial GUIs

o Only the Prepare button is initially enabled The EIG trees are presented via

a tree control where nodes are colour coded according to the recorded value

red for 0 green for 1 yellow for null The tree is automatically expanded

during the top-down phase and collapsed during the bottom-up evaluation

Initially only the root is shown showing initial values As mentioned you

can also display the tree by indented text in a textbox

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

716

o A first click on Prepare displays the messages that will be normally sent at

round 1 by a non-faulty process in order to all participants (including self)

The Prepare button is disabled and the Send button is enabled

o A Byzantine faulty process offers you the possibility to change the correct

messages to whatever you may want where 2 or anything different from

space 0 and 1 indicates null (extra spaces and messages are ignored and

missing messages are assumed 2 ie null)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

816

o A click on Participant‟s Send will effectively send all its messages to the

Driver where they are listed and internally reorganized by destination The

Participant‟s Send button is disabled and the Driverrsquos Send button is enabled

after all messages are received from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

916

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1016

o A click on Driverrsquos Send button forwards all accumulated round 1 messages

to their destinations Driverrsquos Send button is disabled participants process

their messages and their Prepare buttons are re-enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1116

o A second click on Participantrsquos Prepare displays the messages that will be

normally sent at round 2 Button Prepare is disabled and button Send is

enabled A Byzantine faulty participant will again offer you the possibility to

change the messages (this option was not used in this example) A click on

Send sends out the messages and then the button becomes disabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1216

o The Driver logs all received messages internally reorganizes them according

to their destination and its button Send is enabled after receiving messages

from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 6: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

616

5 A slash followed by the corresponding value in the textbox (for visual

control this argument is not used by ParticipantByz) eg 2 0 1 or

1

o Participants start their own GUI and start listening at the base address

httplocalhost809xUser where x is the process index (but no activity is

actually started) In our example there will be 4 processes respectively

listening at httplocalhost8091User httplocalhost8092User

httplocalhost8093User httplocalhost8094User and showing the

following initial GUIs

o Only the Prepare button is initially enabled The EIG trees are presented via

a tree control where nodes are colour coded according to the recorded value

red for 0 green for 1 yellow for null The tree is automatically expanded

during the top-down phase and collapsed during the bottom-up evaluation

Initially only the root is shown showing initial values As mentioned you

can also display the tree by indented text in a textbox

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

716

o A first click on Prepare displays the messages that will be normally sent at

round 1 by a non-faulty process in order to all participants (including self)

The Prepare button is disabled and the Send button is enabled

o A Byzantine faulty process offers you the possibility to change the correct

messages to whatever you may want where 2 or anything different from

space 0 and 1 indicates null (extra spaces and messages are ignored and

missing messages are assumed 2 ie null)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

816

o A click on Participant‟s Send will effectively send all its messages to the

Driver where they are listed and internally reorganized by destination The

Participant‟s Send button is disabled and the Driverrsquos Send button is enabled

after all messages are received from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

916

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1016

o A click on Driverrsquos Send button forwards all accumulated round 1 messages

to their destinations Driverrsquos Send button is disabled participants process

their messages and their Prepare buttons are re-enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1116

o A second click on Participantrsquos Prepare displays the messages that will be

normally sent at round 2 Button Prepare is disabled and button Send is

enabled A Byzantine faulty participant will again offer you the possibility to

change the messages (this option was not used in this example) A click on

Send sends out the messages and then the button becomes disabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1216

o The Driver logs all received messages internally reorganizes them according

to their destination and its button Send is enabled after receiving messages

from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 7: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

716

o A first click on Prepare displays the messages that will be normally sent at

round 1 by a non-faulty process in order to all participants (including self)

The Prepare button is disabled and the Send button is enabled

o A Byzantine faulty process offers you the possibility to change the correct

messages to whatever you may want where 2 or anything different from

space 0 and 1 indicates null (extra spaces and messages are ignored and

missing messages are assumed 2 ie null)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

816

o A click on Participant‟s Send will effectively send all its messages to the

Driver where they are listed and internally reorganized by destination The

Participant‟s Send button is disabled and the Driverrsquos Send button is enabled

after all messages are received from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

916

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1016

o A click on Driverrsquos Send button forwards all accumulated round 1 messages

to their destinations Driverrsquos Send button is disabled participants process

their messages and their Prepare buttons are re-enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1116

o A second click on Participantrsquos Prepare displays the messages that will be

normally sent at round 2 Button Prepare is disabled and button Send is

enabled A Byzantine faulty participant will again offer you the possibility to

change the messages (this option was not used in this example) A click on

Send sends out the messages and then the button becomes disabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1216

o The Driver logs all received messages internally reorganizes them according

to their destination and its button Send is enabled after receiving messages

from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 8: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

816

o A click on Participant‟s Send will effectively send all its messages to the

Driver where they are listed and internally reorganized by destination The

Participant‟s Send button is disabled and the Driverrsquos Send button is enabled

after all messages are received from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

916

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1016

o A click on Driverrsquos Send button forwards all accumulated round 1 messages

to their destinations Driverrsquos Send button is disabled participants process

their messages and their Prepare buttons are re-enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1116

o A second click on Participantrsquos Prepare displays the messages that will be

normally sent at round 2 Button Prepare is disabled and button Send is

enabled A Byzantine faulty participant will again offer you the possibility to

change the messages (this option was not used in this example) A click on

Send sends out the messages and then the button becomes disabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1216

o The Driver logs all received messages internally reorganizes them according

to their destination and its button Send is enabled after receiving messages

from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 9: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

916

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1016

o A click on Driverrsquos Send button forwards all accumulated round 1 messages

to their destinations Driverrsquos Send button is disabled participants process

their messages and their Prepare buttons are re-enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1116

o A second click on Participantrsquos Prepare displays the messages that will be

normally sent at round 2 Button Prepare is disabled and button Send is

enabled A Byzantine faulty participant will again offer you the possibility to

change the messages (this option was not used in this example) A click on

Send sends out the messages and then the button becomes disabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1216

o The Driver logs all received messages internally reorganizes them according

to their destination and its button Send is enabled after receiving messages

from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 10: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1016

o A click on Driverrsquos Send button forwards all accumulated round 1 messages

to their destinations Driverrsquos Send button is disabled participants process

their messages and their Prepare buttons are re-enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1116

o A second click on Participantrsquos Prepare displays the messages that will be

normally sent at round 2 Button Prepare is disabled and button Send is

enabled A Byzantine faulty participant will again offer you the possibility to

change the messages (this option was not used in this example) A click on

Send sends out the messages and then the button becomes disabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1216

o The Driver logs all received messages internally reorganizes them according

to their destination and its button Send is enabled after receiving messages

from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 11: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1116

o A second click on Participantrsquos Prepare displays the messages that will be

normally sent at round 2 Button Prepare is disabled and button Send is

enabled A Byzantine faulty participant will again offer you the possibility to

change the messages (this option was not used in this example) A click on

Send sends out the messages and then the button becomes disabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1216

o The Driver logs all received messages internally reorganizes them according

to their destination and its button Send is enabled after receiving messages

from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 12: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1216

o The Driver logs all received messages internally reorganizes them according

to their destination and its button Send is enabled after receiving messages

from all participants

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 13: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1316

o A second click on Driverrsquos Send button forwards all accumulated round 2

messages to their destinations Driverrsquos Send button is disabled participants

process their messages and because there are only 2 messaging rounds for 4

participants the participants‟ Eval buttons are now enabled

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 14: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1416

o In this case there are three bottom-up evaluation steps 0 1 and 2 that

proceed similarly for all processes Here the final decision is 0

o A click on the DriverByz‟s form close button (X) must immediately terminate

all related processes (and free all their allocated resources eg ports)

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 15: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1516

A typical XML configuration file for DriverByz

ltconfigurationgt

ltappSettingsgt

lt--

ltadd key=participanturl

value=httplocalhost0User gt

ltadd key=syncurl

value=httplocalhost8080Sync gt

--gt

ltadd key=participant

value=ParticipantByzParticipantByzexegt

ltadd key=timeout value=30000gt

ltappSettingsgt

ltconfigurationgt

Further details

o The url‟s are considered fixed However you can take them from the config

file

o The timeouts need not be used in this simplified version

A typical XML configuration file for ParticipantByz (command-line arguments

will take precedence)

ltconfigurationgt

ltappSettingsgt

ltadd key=v0 value=0 gt

ltadd key=usesync value=1 gt

ltadd key=byzurl value=httplocalhost0Byz gt

ltadd key=userurl value=httplocalhost0User gt

ltadd key=syncurl value=httplocalhost8080Syncgt

ltadd key=maxindex value=4 gt

ltadd key=index value=1 gt

ltadd key=init value=0 gt

ltadd key=faulty value=1 gt

ltappSettingsgt

ltconfigurationgt

Further details

o v0 is the default value used by the EIG Byzantine algorithm for two distinct

purposes

o to indicate an incorrect or missing message (for us null codified as 2)

o as a tie break during a majority vote in the bottom-up evaluation

o You need only consider communications via the synchronizer when usesync

is always 1 and the byzurl is inoperant

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)

Page 16: COMPSCI 711 & SOFTENG 710: Assignment #1 · 2009. 8. 6. · CS 711 & SE 710 A#1 – DRAFT V2 radu/2009 2.16 The Driver‟s GUI provides a Step button that triggers round operations

CS 711 amp SE 710 A1 ndash DRAFT V2 radu2009

1616

Service Data Types and Interfaces (as known by the general purpose

synchronizer)

namespace Synchronizer

[DataContract]

public partial class TaggedMessageOut

[DataMember]

public int To

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class TaggedMessageIn

[DataMember]

public int From

[DataMember]

public string AsString

[DataMember]

public MessageBase Message

[DataContract]

public partial class MessageBaseIExtensibleDataObject

private ExtensionDataObject Data

public virtual ExtensionDataObject ExtensionData

get return Data

set Data = value

[ServiceContract(

Namespace = httpcompsci711comsync)]

public interface ISynchronizerService

[OperationContract(IsOneWay = true)]

void UserSend(int From ListltTaggedMessageOutgt msg)

From is not strictly needed but may help

[ServiceContract(Namespace =

httpcompsci711compart)]

public interface IParticipantService

[OperationContract(IsOneWay = true)]

void UserReceive(ListltTaggedMessageIngt msg)