-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathuml.dot
197 lines (197 loc) · 21.4 KB
/
uml.dot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
digraph "classes" {
charset="utf-8"
rankdir=BT
"0" [label="{Client.base.CLIENT_FLAG|ASKING : int\lBLOCKED : int\lCLOSE_AFTER_REPLY : int\lCLOSE_ASAP : int\lDIRTY_CAS : int\lDIRTY_EXEC : int\lFORCE_AOF : int\lFORCE_REPL : int\lLUA : int\lLUA_DEBUG : int\lLUA_DEBUG_SYNC : int\lMASTER : int\lMASTER_FORCE_REPLY : int\lMODULE : int\lMONITOR : int\lMULTI : int\lPENDING_COMMAND : int\lPENDING_WRITE : int\lPREVENT_AOF_PROP : int\lPREVENT_PROP : int\lPREVENT_REPL_PROP : int\lPRE_PSYNC : int\lPROTECTED : int\lPUBSUB : int\lREADONLY : int\lREPLY_OFF : int\lREPLY_SKIP : int\lREPLY_SKIP_NEXT : int\lSLAVE : int\lUNBLOCKED : int\lUNIX_SOCKET : int\l|}", shape="record"];
"1" [label="{Client.client.Client|authenticated : bool\lconn\lcreate_time : int\lcurrent_command : NoneType\ldb\lflag : int\lhost_as_slave : NoneType\lid\llast_interaction : NoneType\lms_state\lport_as_slave : NoneType\lpubsub_channels : set\lpubsub_patterns : list\lquery_buffer : str\lquery_cursor : int\lread_data : str\lrepl_ack_time : NoneType\lrepl_state : int\lreply_buffer\lserver\lwatch_keys : list\l|append_reply()\lclose()\lget_server()\lhandle_command()\lhandle_command_after_resp()\lis_command_input_end()\lis_slave_connected()\lread_from_client()\lread_from_conn()\lreceive_notice_from_subscribe_channel()\lsend_write_cmd_to_slave()\lset_current_command()\lslave_check()\lslave_handle_command()\ltouch_watched_key()\lwrite_to_client()\l}", shape="record"];
"2" [label="{Client.interfaces.IClient|\l|get_server()\l}", shape="record"];
"3" [label="{Client.interfaces.IResponse|\l|append_reply()\l}", shape="record"];
"4" [label="{Command.base.BaseCommand|args_order : list\lclient\lcmd_type : int\lhelp : str\lmax_args : int\lmin_args : int\lneed_kwargs : bool\lraw_cmd\l|check_arg_num()\lexecute()\lget_help()\lhandle()\lparse_args()\l}", shape="record"];
"5" [label="{Command.base.CommandType|CMD_COMMON : int\lCMD_NONE : int\lCMD_READ : int\lCMD_WRITE : int\l|}", shape="record"];
"6" [label="{Command.commands.bgsave.BgSave|args_order : list\lcmd_type : int\l|handle()\l}", shape="record"];
"7" [label="{Command.commands.discard.Discard|args_order : list\lcmd_type : int\lmax_args : int\lmin_args : int\l|discard_transaction()\lhandle()\l}", shape="record"];
"8" [label="{Command.commands.exec.Exec|args_order : list\lclient\lcmd_type : int\lmax_args : int\lmin_args : int\l|execute_all_commands()\lhandle()\lis_watched_key_expired()\l}", shape="record"];
"9" [label="{Command.commands.get.Get|args_order : list\lcmd_type : int\lmax_args : int\lmin_args : int\l|handle()\l}", shape="record"];
"10" [label="{Command.commands.multi.Multi|args_order : list\lcmd_type : int\lmax_args : int\lmin_args : int\l|handle()\l}", shape="record"];
"11" [label="{Command.commands.ping.Ping|args_order : list\lcmd_type : int\lmax_args : int\lmin_args : int\l|handle()\l}", shape="record"];
"12" [label="{Command.commands.publish.Publish|args_order : list\lcmd_type : int\l|handle()\l}", shape="record"];
"13" [label="{Command.commands.replconf.ReplConf|args_order : list\lcmd_type : int\lmax_args : int\lmin_args : int\l|handle()\l}", shape="record"];
"14" [label="{Command.commands.set.ExpiresKeyRemoveEvent|\l|handle_event()\l}", shape="record"];
"15" [label="{Command.commands.set.Set|args_order : list\lcmd_type : int\lmin_args : int\l|handle()\lset_expires_timer()\l}", shape="record"];
"16" [label="{Command.commands.slaveof.SlaveOf|args_order : list\lcmd_type : int\lmax_args : int\lmin_args : int\l|handle()\l}", shape="record"];
"17" [label="{Command.commands.subscribe.Subscribe|cmd_type : int\lneed_kwargs : bool\l|handle()\l}", shape="record"];
"18" [label="{Command.commands.sync.Sync|args_order : list\lcmd_type : int\l|handle()\l}", shape="record"];
"19" [label="{Command.commands.unsubscribe.Unsubscribe|cmd_type : int\lneed_kwargs : bool\l|handle()\l}", shape="record"];
"20" [label="{Command.commands.unwatch.UnWatch|cmd_type : int\lneed_kwargs : bool\l|handle()\lunwatched_all_keys()\l}", shape="record"];
"21" [label="{Command.commands.watch.Watch|cmd_type : int\lneed_kwargs : bool\l|handle()\l}", shape="record"];
"22" [fontcolor="red", label="{Command.exception.CommandArgsNumInvalid|msg : str\l|}", shape="record"];
"23" [fontcolor="red", label="{Command.exception.CommandNotExist|msg : str\l|}", shape="record"];
"24" [fontcolor="red", label="{Command.exception.DiscardWithoutMultiError|msg : str\l|}", shape="record"];
"25" [fontcolor="red", label="{Command.exception.ExecWithoutMultiError|msg : str\l|}", shape="record"];
"26" [fontcolor="red", label="{Command.exception.NoImplError|msg : str\l|}", shape="record"];
"27" [label="{Command.handler.CommandHandler|client\lcmd_data\lcmd_name : str\lraw_cmd\l|handle()\lis_cmd_exist()\lis_multi_on()\lis_pubsub_on()\lparse_command()\l}", shape="record"];
"28" [label="{Command.interfaces.ICommand|cmd_type : str\lraw_cmd : str\l|check_arg_num()\lexecute()\lget_help()\lhandle()\lparse_args()\l}", shape="record"];
"29" [label="{Command.interfaces.ICommandCaller|\l|handle_command()\l}", shape="record"];
"30" [label="{Command.interfaces.ICommandHandler|\l|handle()\lparse_command()\l}", shape="record"];
"31" [label="{Command.interfaces.ICommandManager|\l|set_current_command()\l}", shape="record"];
"32" [label="{Conf.command.CMD_RES|\l|}", shape="record"];
"33" [label="{Conf.command.ERR|name\lvalue\l|}", shape="record"];
"34" [label="{Conf.command.OK|name\lvalue\l|}", shape="record"];
"35" [label="{Conf.command.WAIT|name\lvalue\l|}", shape="record"];
"36" [label="{Connection.connection.Connection|sock_fd\l|enable_read()\lenable_write()\lhandle_close()\lhandle_read()\lhandle_write()\lregister()\lupdate_event()\l}", shape="record"];
"37" [label="{Connection.interfaces.IClosable|\l|close()\l}", shape="record"];
"38" [label="{Connection.interfaces.IConnection|\l|handle_read()\lhandle_write()\l}", shape="record"];
"39" [label="{Database.database.Database|blocking_keys : dict\ldict : dict\lexpires : dict\lid\lready_keys : dict\lwatch_keys : dict\l|initial_with_dict()\lremove()\lremove_expires()\lstore()\lstore_expires()\lwithdraw()\lwithdraw_expires()\l}", shape="record"];
"40" [label="{Database.interfaces.IDatabase|\l|initial_with_dict()\lremove()\lremove_expires()\lstore()\lstore_expires()\lwithdraw()\lwithdraw_expires()\l}", shape="record"];
"41" [label="{Database.interfaces.IDatabaseManager|\l|create_databases()\lget_database()\lget_databases()\l}", shape="record"];
"42" [label="{Database.interfaces.IPersistence|\l|load()\lsave()\l}", shape="record"];
"43" [label="{Database.interfaces.IPersistenceManager|\l|load_from_master()\lload_persistent_file()\l}", shape="record"];
"44" [label="{Database.interfaces.IRDBCaller|\l|rdb_reset()\lrdb_start()\l}", shape="record"];
"45" [label="{Database.key.BLOKING_VALUE_TYPE|\l|}", shape="record"];
"46" [label="{Database.key.BlockingKey|data\ltype\lvalue\l|}", shape="record"];
"47" [label="{Database.key.SLAVEOF|name\lvalue\l|}", shape="record"];
"48" [label="{Database.persistence.AOF.AOF|\l|save()\l}", shape="record"];
"49" [label="{Database.persistence.AOF.AOFWriteThread|aof\lserver\l|run()\l}", shape="record"];
"50" [label="{Database.persistence.AOF.AOF_FSYNC_TYPE|ALWAYS : int\lEVERY_SECOND : int\lNO : int\l|}", shape="record"];
"51" [label="{Database.persistence.RDB.RDB|\l|load()\lload_from_data()\lsave()\l}", shape="record"];
"52" [label="{Database.persistence.RDB.RDBWriteThread|rdb\lserver\l|run()\l}", shape="record"];
"53" [label="{Database.persistence.base.BasePersistence|save_file_path\l|create_temp_file()\lremove_temp_file()\l}", shape="record"];
"54" [label="{Database.persistence.base.PERS_STATUS|ERROR : int\lNO_WRITE : int\lRE_WRITE : int\lWRITED : int\lWRITING : int\l|}", shape="record"];
"55" [fontcolor="red", label="{Exception.base.BaseError|msg : str\l|}", shape="record"];
"56" [fontcolor="red", label="{Exception.socket.ConnectionRefuseError|msg\l|}", shape="record"];
"57" [label="{Generic.patterns.observer.AbstractObserver|\l|update()\l}", shape="record"];
"58" [label="{Generic.patterns.observer.AbstractSubject|\l|attach()\ldetach()\lnotify()\l}", shape="record"];
"59" [label="{Generic.patterns.observer.Observer|\l|update()\l}", shape="record"];
"60" [label="{Generic.patterns.observer.Subject|\l|attach()\ldetach()\lnotify()\l}", shape="record"];
"61" [label="{Generic.runtime.Platform|seconds\lseconds : staticmethod\ltype\ltype\l|getType()\lisKnown()\lisLinux()\lisMacOSX()\lisVista()\lisWinNT()\lisWindows()\lsupportsThreads()\l}", shape="record"];
"62" [label="{IOLoop.IOReader.IOReader|\l|read_from_socket()\l}", shape="record"];
"63" [label="{IOLoop.IOWriter.IOWriter|\l|write_to_socket()\l}", shape="record"];
"64" [label="{IOLoop.Reactor.acceptor.Acceptor|host\lport\l|handle_accept()\lhandle_close()\lhandle_read()\lhandle_write()\llisten_fd()\llisten_socket()\l}", shape="record"];
"65" [label="{IOLoop.Reactor.fileEvent.FileEvent|clientData : NoneType\lclient_addr\lclient_sock\lmask : int\l|}", shape="record"];
"66" [label="{IOLoop.Reactor.firedEvent.FiredEvent|fd\lmask\l|}", shape="record"];
"67" [label="{IOLoop.Reactor.firedEvent.ReEvent|RE_BARRIER : int\lRE_CLOSE : int\lRE_NONE : int\lRE_READABLE : int\lRE_WRITABLE : int\l|}", shape="record"];
"68" [label="{IOLoop.Reactor.poller.base.Poller|\l|modify()\lpoll()\lregister()\lunregister()\l}", shape="record"];
"69" [label="{IOLoop.Reactor.poller.epoll.Epoll|\l|modify()\lpoll()\lregister()\lunregister()\l}", shape="record"];
"70" [label="{IOLoop.Reactor.poller.select.Select|\l|clear_broken_fd()\lmodify()\lpoll()\lregister()\lunregister()\l}", shape="record"];
"71" [label="{IOLoop.Reactor.reactor.Reactor|acceptor\levents : dict\lfired : dict\lhost\lpoller\lport\ltimer\l|create_timeout_event()\lget_acceptor()\lget_earliest_time()\lget_poller()\lpoll()\lprocess_poll_event()\lprocess_timer_event()\l}", shape="record"];
"72" [label="{IOLoop.interfaces.IAcceptor|\l|handle_accept()\lhandle_close()\lhandle_read()\lhandle_write()\llisten_fd()\llisten_socket()\l}", shape="record"];
"73" [label="{IOLoop.interfaces.IPoller|\l|modify()\lpoll()\lregister()\lunregister()\l}", shape="record"];
"74" [label="{IOLoop.interfaces.IReactor|\l|get_acceptor()\lget_poller()\lpoll()\lprocess_poll_event()\l}", shape="record"];
"75" [label="{IOLoop.interfaces.IReactorManager|\l|get_loop()\lset_loop()\l}", shape="record"];
"76" [label="{Protocol.RESProtocol.RESProtocol|\l|parse()\l}", shape="record"];
"77" [label="{Pubsub.case.Pubsub|\l|publish()\lsubscribe()\lunsubscribe()\lunsubscribeAll()\l}", shape="record"];
"78" [label="{Pubsub.channel.Channel|channel_name\lmessage\l|get_observers_num()\lget_unsubscribe_message()\lset_publish_message()\lset_subscribe_message()\l}", shape="record"];
"79" [fontcolor="red", label="{Pubsub.exception.ChannelIsNotExistError|msg\l|}", shape="record"];
"80" [label="{Replication.base.REPL_SLAVE_STATE|CONNECT : int\lCONNECTED : int\lCONNECTING : int\lNONE : int\lRECEIVE_AUTH : int\lRECEIVE_IP : int\lRECEIVE_PONG : int\lRECEIVE_PORT : int\lRECEIVE_PSYNC : int\lSEND_AUTH : int\lSEND_CAPA : int\lSEND_IP : int\lSEND_PORT : int\lSEND_PSYNC : int\lTRANSFER : int\l|}", shape="record"];
"81" [label="{Replication.base.REPL_STATE|CONNECT : int\lCONNECTED : int\lCONNECTING : int\lNONE : int\lRECEIVE_AUTH_REPLY : int\lRECEIVE_CAPA_REPLY : int\lRECEIVE_IP_REPLY : int\lRECEIVE_PING_REPLY : int\lRECEIVE_PORT_REPLY : int\lRECEIVE_PSYNC_REPLY : int\lSEND_HANDSHAKE : int\lSEND_PSYNC : int\lTRANSFER : int\l|}", shape="record"];
"82" [label="{Replication.master.MasterClient|origin_cmd_sender : NoneType\lread_data : str\lrepl_ack_time : int\l|ping_ack()\lread_from_client()\lupgrade_from_client()\l}", shape="record"];
"83" [label="{Replication.slave.SLAVE_STATE|ONLINE : int\lSEND_BULK : int\lWAIT_BGSAVE_END : int\lWAIT_BGSAVE_START : int\l|}", shape="record"];
"84" [label="{Replication.slave.SlaveClient|read_data : str\lslaveof_cmd_sender : NoneType\l|check_master_reply()\lis_persistence_data()\lread_from_client()\lreplicate()\l}", shape="record"];
"85" [fontcolor="red", label="{Server.exception.BaseServerError|msg : str\l|}", shape="record"];
"86" [fontcolor="red", label="{Server.exception.DatabaseNotExistError|msg\lmsg : str\l|}", shape="record"];
"87" [label="{Server.interfaces.IServer|\l|start_watchdog()\l}", shape="record"];
"88" [label="{Server.server.Server|aof_buf : list\laof_enable : bool\laof_filename\laof_fsync : int\laof_rewrite_last_time : int\ldb_num : int\ldirty : int\ldirty_before_bgsave : int\lhost : NoneType\llast_save : NoneType\lmaster : NoneType\lmaster_host : NoneType\lmaster_port : NoneType\lmax_clients : int\lneed_sync : bool\lnext_client_id\lnotify_keyspace_events : NoneType\lpers_status : int\lport : NoneType\lpubsub_channels : dict\lpubsub_patterns : dict\lrdb_checksum : int\lrdb_compression : bool\lrdb_enable : bool\lrdb_filename\lrdb_save_time_start : int\lrepl_good_slaves_count : int\lrepl_id\lrepl_min_slaves_max_lag : int\lrepl_min_slaves_to_write : int\lrepl_ping_slave_period : int\lrepl_slave_ro : bool\lrepl_slaves : list\lrepl_slaves_rb_num : int\lrepl_state : int\lsave_params : list\lwatchdog_run_num : int\l|EVETY_SECOND()\laof_start()\lconnect_from_client()\lconnect_to_master()\lcreate_databases()\lget_connected_slaves()\lget_database()\lget_databases()\lget_loop()\lload_from_master()\lload_persistent_file()\lrdb_reset()\lrdb_start()\lread_from_client()\lselect_slave()\lset_host()\lset_loop()\lstart_watchdog()\lupgrade_client_to_master()\lwrite_cmd_increment()\lwrite_to_client()\l}", shape="record"];
"89" [label="{Server.server.ServerWatchDog|\l|check_persistence_status()\lhandle_event()\lkeep_alive_with_slaves()\lprocess_aof()\lprocess_persistence()\lprocess_rdb()\lsync_with_slaves()\l}", shape="record"];
"90" [label="{Timer.event.TimeoutEvent|extra_data : NoneType\l|get_timestamp()\lhandle_event()\lset_extra_data()\l}", shape="record"];
"91" [label="{Timer.interfaces.ITimeoutEvent|\l|get_timestamp()\lhandle_event()\lset_extra_data()\l}", shape="record"];
"92" [label="{Timer.interfaces.ITimer|\l|add_event()\lget_earliest_time()\lget_events()\lpop_event()\l}", shape="record"];
"93" [label="{Timer.interfaces.ITimerManager|\l|create_timeout_event()\lget_earliest_time()\lprocess_timer_event()\l}", shape="record"];
"94" [label="{Timer.interfaces.ITimestamp|\l|get_time()\l}", shape="record"];
"95" [label="{Timer.timer.SaveParam|changes\lseconds\l|}", shape="record"];
"96" [label="{Timer.timer.Timer|\l|add_event()\lget_earliest_time()\lget_events()\lis_event_can_active()\lpop_event()\l}", shape="record"];
"97" [label="{Timer.timestamp.Timestamp|\l|get_time()\l}", shape="record"];
"98" [label="{_io.TextIOWrapper|mode : str\l|close()\ldetach()\lfileno()\lflush()\lisatty()\lread()\lreadable()\lreadline()\lreadlines()\lreconfigure()\lseek()\lseekable()\ltell()\ltruncate()\lwritable()\lwrite()\lwritelines()\l}", shape="record"];
"99" [label="{_io._IOBase|\l|close()\lfileno()\lflush()\lisatty()\lreadable()\lreadline()\lreadlines()\lseek()\lseekable()\ltell()\ltruncate()\lwritable()\lwritelines()\l}", shape="record"];
"100" [label="{_io._TextIOBase|\l|close()\ldetach()\lfileno()\lflush()\lisatty()\lread()\lreadable()\lreadline()\lreadlines()\lseek()\lseekable()\ltell()\ltruncate()\lwritable()\lwrite()\lwritelines()\l}", shape="record"];
"101" [label="{_socket.socket|\l|bind()\lclose()\lconnect()\lconnect_ex()\ldetach()\lfileno()\lgetblocking()\lgetpeername()\lgetsockname()\lgetsockopt()\lgettimeout()\lioctl()\llisten()\lrecv()\lrecv_into()\lrecvfrom()\lrecvfrom_into()\lsend()\lsendall()\lsendto()\lsetblocking()\lsetsockopt()\lsettimeout()\lshare()\lshutdown()\l}", shape="record"];
"102" [label="{_thread.RLock|\l|acquire()\lrelease()\l}", shape="record"];
"103" [label="{collections.deque|iterable : list\lmaxlen : int\l|append()\lappendleft()\lclear()\lcopy()\lcount()\lextend()\lextendleft()\lindex()\linsert()\lpop()\lpopleft()\lremove()\lreverse()\lrotate()\l}", shape="record"];
"104" [label="{enum.Enum|\l|name()\lvalue()\l}", shape="record"];
"105" [label="{socket.socket|family\ltype\l|accept()\lclose()\ldetach()\ldup()\lget_inheritable()\lmakefile()\lsendfile()\lset_inheritable()\l}", shape="record"];
"106" [label="{threading.Condition|acquire\lnotifyAll\lrelease\l|notify()\lnotify_all()\lwait()\lwait_for()\l}", shape="record"];
"107" [label="{threading.Event|isSet\l|clear()\lis_set()\lset()\lwait()\l}", shape="record"];
"108" [label="{threading.Thread|daemon\ldaemon\lident\lisAlive\lname\lname\l|getName()\lisDaemon()\lis_alive()\ljoin()\lrun()\lsetDaemon()\lsetName()\lstart()\l}", shape="record"];
"109" [label="{threading._RLock|\l|acquire()\lrelease()\l}", shape="record"];
"110" [label="{uuid.UUID|bytes\lbytes_le\lclock_seq\lclock_seq_hi_variant\lclock_seq_low\lfields\lhex\lnode\ltime\ltime_hi_version\ltime_low\ltime_mid\lurn\lvariant\lversion\l|}", shape="record"];
"1" -> "3" [arrowhead="empty", arrowtail="none"];
"1" -> "29" [arrowhead="empty", arrowtail="none"];
"1" -> "31" [arrowhead="empty", arrowtail="none"];
"1" -> "37" [arrowhead="empty", arrowtail="none"];
"1" -> "59" [arrowhead="empty", arrowtail="none"];
"4" -> "28" [arrowhead="empty", arrowtail="none"];
"6" -> "4" [arrowhead="empty", arrowtail="none"];
"7" -> "4" [arrowhead="empty", arrowtail="none"];
"8" -> "4" [arrowhead="empty", arrowtail="none"];
"9" -> "4" [arrowhead="empty", arrowtail="none"];
"10" -> "4" [arrowhead="empty", arrowtail="none"];
"11" -> "4" [arrowhead="empty", arrowtail="none"];
"12" -> "4" [arrowhead="empty", arrowtail="none"];
"13" -> "4" [arrowhead="empty", arrowtail="none"];
"14" -> "90" [arrowhead="empty", arrowtail="none"];
"15" -> "4" [arrowhead="empty", arrowtail="none"];
"16" -> "4" [arrowhead="empty", arrowtail="none"];
"17" -> "4" [arrowhead="empty", arrowtail="none"];
"18" -> "4" [arrowhead="empty", arrowtail="none"];
"19" -> "4" [arrowhead="empty", arrowtail="none"];
"20" -> "4" [arrowhead="empty", arrowtail="none"];
"21" -> "4" [arrowhead="empty", arrowtail="none"];
"22" -> "55" [arrowhead="empty", arrowtail="none"];
"23" -> "55" [arrowhead="empty", arrowtail="none"];
"24" -> "55" [arrowhead="empty", arrowtail="none"];
"25" -> "55" [arrowhead="empty", arrowtail="none"];
"26" -> "55" [arrowhead="empty", arrowtail="none"];
"27" -> "30" [arrowhead="empty", arrowtail="none"];
"32" -> "104" [arrowhead="empty", arrowtail="none"];
"33" -> "104" [arrowhead="empty", arrowtail="none"];
"34" -> "104" [arrowhead="empty", arrowtail="none"];
"35" -> "104" [arrowhead="empty", arrowtail="none"];
"36" -> "38" [arrowhead="empty", arrowtail="none"];
"39" -> "40" [arrowhead="empty", arrowtail="none"];
"45" -> "104" [arrowhead="empty", arrowtail="none"];
"47" -> "104" [arrowhead="empty", arrowtail="none"];
"48" -> "53" [arrowhead="empty", arrowtail="none"];
"49" -> "108" [arrowhead="empty", arrowtail="none"];
"51" -> "53" [arrowhead="empty", arrowtail="none"];
"52" -> "108" [arrowhead="empty", arrowtail="none"];
"53" -> "42" [arrowhead="empty", arrowtail="none"];
"56" -> "55" [arrowhead="empty", arrowtail="none"];
"59" -> "57" [arrowhead="empty", arrowtail="none"];
"60" -> "58" [arrowhead="empty", arrowtail="none"];
"64" -> "72" [arrowhead="empty", arrowtail="none"];
"69" -> "73" [arrowhead="empty", arrowtail="none"];
"70" -> "73" [arrowhead="empty", arrowtail="none"];
"71" -> "74" [arrowhead="empty", arrowtail="none"];
"71" -> "93" [arrowhead="empty", arrowtail="none"];
"78" -> "60" [arrowhead="empty", arrowtail="none"];
"79" -> "55" [arrowhead="empty", arrowtail="none"];
"82" -> "1" [arrowhead="empty", arrowtail="none"];
"84" -> "1" [arrowhead="empty", arrowtail="none"];
"85" -> "55" [arrowhead="empty", arrowtail="none"];
"86" -> "85" [arrowhead="empty", arrowtail="none"];
"88" -> "41" [arrowhead="empty", arrowtail="none"];
"88" -> "43" [arrowhead="empty", arrowtail="none"];
"88" -> "44" [arrowhead="empty", arrowtail="none"];
"88" -> "75" [arrowhead="empty", arrowtail="none"];
"89" -> "90" [arrowhead="empty", arrowtail="none"];
"90" -> "91" [arrowhead="empty", arrowtail="none"];
"96" -> "92" [arrowhead="empty", arrowtail="none"];
"97" -> "94" [arrowhead="empty", arrowtail="none"];
"98" -> "100" [arrowhead="empty", arrowtail="none"];
"100" -> "99" [arrowhead="empty", arrowtail="none"];
"105" -> "101" [arrowhead="empty", arrowtail="none"];
"64" -> "71" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="acceptor", style="solid"];
"69" -> "71" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="poller", style="solid"];
"70" -> "71" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="poller", style="solid"];
"84" -> "88" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="master", style="solid"];
"96" -> "71" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="timer", style="solid"];
"98" -> "108" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="_stderr", style="solid"];
"101" -> "64" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="__socket", style="solid"];
"102" -> "106" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="_lock", style="solid"];
"103" -> "1" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="ms_state", style="solid"];
"103" -> "1" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="reply_buffer", style="solid"];
"103" -> "106" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="_waiters", style="solid"];
"105" -> "64" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="__socket", style="solid"];
"106" -> "107" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="_cond", style="solid"];
"107" -> "108" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="_started", style="solid"];
"109" -> "106" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="_lock", style="solid"];
"110" -> "88" [arrowhead="diamond", arrowtail="none", fontcolor="green", label="repl_id", style="solid"];
}