various Updates
[music.git] / examples / VotingApp / README.md
1
2 The voting app for MUSIC  illustrates the features of MUSIC as a
3 multi-site state management
4 service. It is a program that
5 maintains state in MUSIC in the form of a vote-count table that has two columns, the candidateName
6 and his voteCount. To the external client that is using the voting app to update votes, the
7 votingApp provides a simple function to update the
8 votecount of the candidate in an exclusive manner. This is possible because of the locking service
9 in MUSIC. Since each candidate is a key in MUSIC, the votingapp simply acquires the geo-distributed
10 lock and only then upates the count. This guarantees correctness even when clients access different
11 end-points across data centers. Further since state is replicated correctly across data-centers,
12 even when one of the data centers fail, functioning can continue simply by using the MUSIC end point
13 in the other data center. 
14
15 The main function in the VotingApp.java is emulating clients from different data centers by randomly
16 chosing MUSIC end points. By updating vote counts
17 randomly using different MUSIC end points and still receiving the correct total count when doing a
18 read, the main function indicates the multi-site capability of MUSIC. 
19
20
21 To run the application, make sure you have onboarded the application using music's admin api.
22 A curl call using the default values would be:
23 curl -X POST \
24   http://localhost:8080/MUSIC/rest/v2/admin/onboardAppWithMusic \
25   -H 'Content-Type: application/json' \
26   -d '{
27 "appname"  : "votingapp",
28 "userId"   : "abc123d",
29 "password" : "password",
30 "isAAF"    : false
31 }'