| ZOOKEEPER |
| [CLUSTER_NAME] |
| IDEALSTATES |
| IDEALSTATE-1 |
| IDEALSTATE-2 |
| IDEALSTATE-3 |
| CONFIGURATIONS |
| CONFIG-1 |
| CONFIG-2 |
| LIVEINSTANCES |
| INSTANCE-1 |
| INSTANCE-2 |
| INSTANCES |
| INSTANCE-1 |
| MESSAGES |
| MESSAGE-1 |
| MESSAGE-2 |
| CURRENTSTATES |
| STATE-1 |
| STATE-2 |
| STATE-3 |
| ERRORS |
| ERROR-1 |
| ERROR-2 |
| STATUSUPDATES |
| UPDATE-1 |
| UPDATE-2 |
| UPDATE-3 |
| INSTANCE-2 |
| MESSAGES |
| MESSAGE-1 |
| MESSAGE-2 |
| CURRENTSTATES |
| STATE-1 |
| STATE-2 |
| STATE-3 |
| ERRORS |
| ERROR-1 |
| ERROR-2 |
| STATUSUPDATES |
| UPDATE-1 |
| UPDATE-2 |
| UPDATE-3 |
| EXTERNALVIEW |
| SUBVIEW-1 |
| SUBVIEW-2 |
| STATEMODELDEF |
| STATE_MACHINE_TABLE |
| EACH NODE CAN HOLD DATA OF THE FORMAT DESCRIBED IN ZNRECORD. Once can put any data in this and it will be JSONized and stored |
| public class ZNRecord { |
| Map<String,Object> simpleFields; |
| Map<String,Map<String,Object>> mapFields; |
| Map<String,List<Object>> listFields; |
| } |
| |
| ALL STATIC PERSISTENT NODES [IDEALSTATES, CONFIGURATIONS, CURRENTSTATES] HAVE CHILDREN. THIS IS ONLY FOR VISUAL AND |
| SOME OPERATIONAL OPTIMIZATIONS AND EASE |
| ANYDAY WE SHOULD BE ABLE TO MERGE ALL CHILDREN INTO ONE ZNODE TO REDUCE WATCHES AND ALSO SUPPORT ATOMIC UPDATES. |
| Basically all keys in ZNRecord must be unique across children |
| |
| The stored string format of a ZNRecord is the JSONized string from the ZNRecord object. |
| |
| ##################################################################################################################### |
| IDEALSTATE |
| - Even though the children are different, they should be unique across the children. One Idealstate per DB |
| EspressoDB0 |
| { "id" : "EspressoDB0", |
| "l" : { }, |
| "m" : { |
| "EspressoDB0" : |
| { |
| "EspressoDB0.partition-0" : |
| { |
| "localhost_8900" : "MASTER", |
| "localhost_8901" : "SLAVE", |
| "localhost_8902" : "SLAVE" |
| }, |
| "EspressoDB0.partition-1" : |
| { |
| "localhost_8900" : "SLAVE", |
| "localhost_8901" : "SLAVE", |
| "localhost_8902" : "MASTER" |
| }, |
| "EspressoDB0.partition-2" : |
| { |
| "localhost_8900" : "MASTER", |
| "localhost_8901" : "SLAVE", |
| "localhost_8902" : "SLAVE" |
| }, |
| "EspressoDB0.partition-3" : |
| { |
| "localhost_8900" : "SLAVE", |
| "localhost_8901" : "MASTER", |
| "localhost_8902" : "SLAVE" |
| } |
| } |
| }, |
| "s" : { } |
| } |
| ##################################################################################################################### |
| CONFIGURATIONS |
| - THIS WILL MOSTLY CONTAIN PHYSICAL INFO ABOUT A NODE and POSSIBLY SOME CONFIGURATIONS FOR THE PROCESS |
| - THERE MUST BE A CONFIGURATION FOR EACH INSTANCE. WE PROBABLY WANT TO ENHANCE THIS TO BE BASED ON TYPE OR USE REFERENCE, |
| - PARSING OF CONFIGURATION IS UPTO THE APPLICATION. CM WILL NOT PARSE THIS DATA. |
| |
| INSTANCE_NAME |
| { |
| K1:V1 |
| K2:V2 |
| } |
| ##################################################################################################################### |
| LIVEINSTANCES |
| INSTANCE_NAME |
| { |
| ID:SESSION_ID |
| HOST:HOSTNAME |
| PORT: |
| TYPE:[PARTICIPANT,CONTROLLER,SPECTATOR] |
| } |
| ##################################################################################################################### |
| INSTANCES |
| INSTANCE_NAME |
| MESSAGES |
| MESSAGE-1{ |
| ID: |
| TYPE:STATE_TRANSITION |
| FROM_STATE:SLAVE |
| TO_STATE:MASTER |
| TIMEOUT: |
| } |
| CURRENTSTATES |
| STATE-1{ |
| DBNAME.PARTITION-1:{CURRENT_STATE:MASTER } |
| DBNAME.PARTITION-2:{CURRENT_STATE:MASTER } |
| DBNAME.PARTITION-3:{CURRENT_STATE:SLAVE } |
| } |
| ERRORS |
| ERROR |
| { |
| TYPE: |
| MESSAGE: |
| } |
| STATUSUPDATES |
| UPDATE |
| { |
| ID: |
| MESSAGE: |
| } |
| EXTERNALVIEW //ONE VIEW PER IDEAL STATE |
| SUBVIEW1 |
| { |
| DBNAME.PARTITION-1:{INSTANCE-ID:MASTER,INSTANCE-ID:SLAVE,INSTANCE-ID:SLAVE} |
| DBNAME.PARTITION-2:{INSTANCE-ID:MASTER,INSTANCE-ID:SLAVE,INSTANCE-ID:SLAVE} |
| DBNAME.PARTITION-3:{INSTANCE-ID:MASTER,INSTANCE-ID:SLAVE,INSTANCE-ID:SLAVE} |
| DBNAME.PARTITION-4:{INSTANCE-ID:MASTER,INSTANCE-ID:SLAVE,INSTANCE-ID:SLAVE} |
| } |
| SUBVIEW2 |
| { |
| } |
| SUBVIEW3 |
| { |
| } |
| STATEMACHINETABLE |
| TODO |
| |
| |