MCPcopy Create free account

hub / github.com/Super-long/ChubbyGo / functions

Functions197 in github.com/Super-long/ChubbyGo

↓ 24 callersMethodError
()
Connect/common.go:52
↓ 20 callersMethodGetState
得到自己的状态,并返回自己是不是leader
Raft/raft.go:109
↓ 15 callersMethodError
()
BaseServer/fileSystem.go:55
↓ 14 callersMethodChubbyGoMapSet
(key string, value string)
BaseServer/chubbyGoMap.go:80
↓ 10 callersMethodAcquire
* * @brief: 对Fd目录下的Filename进行加锁,可以加读锁或者写锁,加锁不需要open * @param: 实例号和路径名来源于文件描述符;文件类型;文件名称 * @return: 返回加锁是否成功; */
BaseServer/lockclient.go:180
↓ 10 callersMethodChubbyGoMapGet
(key string)
BaseServer/chubbyGoMap.go:55
↓ 9 callersMethodDelete
* * @param: opType为操作类型,可以为delete或者close */
BaseServer/lockclient.go:128
↓ 9 callersMethodStart
* * @brief: raft的入口 * @params: 传入一个命令实体 * @ret: 返回这条命令在日志中的index,term和此节点在执行命令时是否为leader */
Raft/raft.go:490
↓ 8 callersMethodGetShard
* * @brief: 利用key得到哈希表内的桶 */
BaseServer/concurrentHashMap.go:75
↓ 8 callersMethodP
acquire n resources
Connect/semphore.go:24
↓ 8 callersMethodRelease
* * @brief: 对特定的文件进行解锁,需要tocken是因为标记锁的版本,防止一个锁在其定义的超时范围之外进行解锁,从而解掉其他节点持有的锁 * @param: 路径名和文件名来源于文件描述符;instanceseq号;tocken号 * @return: 返回解锁是否成功; */
BaseServer/lockclient.go:231
↓ 8 callersMethodV
release n resources
Connect/semphore.go:32
↓ 8 callersMethodpersist
* * @brief: 用于持久化需要的数据 */
Raft/raft.go:131
↓ 6 callersMethodOpen
* * @brief: 要打开的文件路径;open只是为了可以在一个目录下创建文件,与加锁权限没有一点关系 * @return: 返回一个文件描述符 * @notes: 显然打开一个文件毫无意义,对于文件的操作有锁,对于内容的操作使用绝对路径为key直接get就ok */
BaseServer/lockclient.go:31
↓ 5 callersMethodGet
* * @brief: 因为为了保证强一致性,一个客户端一次只会跑一个操作 */
BaseServer/kvclient.go:66
↓ 5 callersMethodSet
Sets the given value under the specified key.
BaseServer/concurrentHashMap.go:89
↓ 4 callersMethodBaseStore
(k string, v interface{})
BaseServer/concurrentHashMap.go:354
↓ 4 callersMethodCreate
* * @brief: 在此文件描述符下创建一个文件,有三种类型目录,临时文件,文件 * @param: 实例号和路径名来源于文件描述符;文件类型;文件名称 * @return: 返回创建文件是否成功 * @notes: 对于返回值要先判断bool值再判断seq,bool为falseseq是
BaseServer/lockclient.go:80
↓ 4 callersMethodSetUniqueFlake
(value uint64)
Connect/client_handler.go:284
↓ 4 callersMethodStartClient
* * @brief: 再调用这个函数的时候开始服务, * @return: 三种返回类型:路径解析错误;connectAll连接出现问题;成功 */
Connect/client_handler.go:218
↓ 4 callersFunctionWriteContentToFile
考虑到要把快照和基础配置放在两个文件中,这里不把下面两个函数搞成成员函数,这样可以减少代码重复 * * @brief: 向文件写入数据 * @return: 返回错误类型 * @notes: 暂定给出存盘策略,遵循所选择策略刷入磁盘,一个守护协程负责按照策略刷入磁盘;no和everysec都会
Persister/persister.go:149
↓ 4 callersMethodturnToFollow
()
Raft/raft.go:330
↓ 3 callersMethodCompareAndSwap
* * @brief: 提供一个功能更加丰富的CAS操作,见文件顶. * @notes: 操作要求key对应的值必须是数字,且现在其实没有做什么保护机制,也就是CAS操作的对象可能随时被修改成不是数字的值,这样就没办法了。 * TODO 这是后面权限的一个考虑点。 */
BaseServer/compareAndSwap.go:159
↓ 3 callersFunctionSbyte2str
[]byte转string
Connect/common.go:39
↓ 3 callersMethodmakeCheckSum
* * @brief: 基于FileSystemNode生成一个新的CheckSum; 其实保证随机性就ok了;我这种生成方式最大程度与文件有关 * @notes: 大费周章的生成这样一个数是否有必要呢?虽然用的也不多 * @!!!!!: 完全想错了;我们需要一个以文件内容生成的校验和,这样才
BaseServer/fileSystem.go:155
↓ 3 callersFunctionmin
(a, b int)
Raft/raft.go:101
↓ 3 callersMethodpersisterSnapshot
* * @notes: 调用这个函数必须在kvraft的锁保护范围之内进行 */
BaseServer/kvserver.go:207
↓ 3 callersMethodtryToReconnect
(index int)
Raft/raft.go:251
↓ 2 callersMethodBaseGet
(k string)
BaseServer/concurrentHashMap.go:360
↓ 2 callersMethodCheckToken
* * @brief: 附带着目前持有的token,检测这个token是否还有效 * @notes: 问题的关键在于检查返回无效,其实在发出数据的一刻是有效的,但是不影响正确性 */
BaseServer/lockclient.go:281
↓ 2 callersMethodChubbyGoMapDelete
(key string)
BaseServer/chubbyGoMap.go:97
↓ 2 callersMethodCount
Returns the number of elements within the map. 返回目前map中的数据总量
BaseServer/concurrentHashMap.go:142
↓ 2 callersMethodIterBuffered
Returns a buffered iterator which could be used in a for range loop. 相当于所有的值都缓存在channel中
BaseServer/concurrentHashMap.go:200
↓ 2 callersFunctionNewChubbyGoMap
(flag uint32)
BaseServer/chubbyGoMap.go:41
↓ 2 callersFunctionParserFileName
* * @brief: 解析从json提取出的文件名 * @return: 正确返回true;否则false,这里不区分各种错误类型 * @notes: 一下根据机器不同可以配置,Golang我没有找到接口可以直接获得以下值,所以手动配置 * Linux下使用getconf PATH_MAX
Connect/common.go:216
↓ 2 callersFunctionParserIP
* * @brief: 解析从json提取出的ip地址项 * @return: 正确返回true;否则false * @notes: net包的ip解析函数有点蛋疼,没办法解析"ip:port",只能解析"ip/port",或者"ip" */
Connect/common.go:178
↓ 2 callersMethodPut
(key string, value string)
BaseServer/kvclient.go:150
↓ 2 callersMethodPutAppend
(key string, value string, op string)
BaseServer/kvclient.go:111
↓ 2 callersMethodRaftStateSize
()
Persister/persister.go:89
↓ 2 callersFunctionReadContentFromFile
* * @brief: 从文件中读出数据 * @return: 返回文件的[]byte和错误类型 * @notes: 使用这个函数的时候必须先判断err,再使用[]byte,被调用于服务器启动时,先读取两个文件,放到persister,然后传递给Raft,启动时就会自动读取了 */
Persister/persister.go:182
↓ 2 callersMethodRemove
Removes an element from the map.
BaseServer/concurrentHashMap.go:158
↓ 2 callersFunctionStr2sbyte
------------------------------------------- string转ytes
Connect/common.go:32
↓ 2 callersFunctionfanIn
fanIn reads elements from channels `chans` into channel `out`
BaseServer/concurrentHashMap.go:239
↓ 2 callersMethodlastLogIndexAndTerm
得到当前日志中最新日志条目的index和term
Raft/raft.go:122
↓ 2 callersMethodreadSnapshot
(data []byte)
BaseServer/kvserver.go:223
↓ 2 callersMethodsendSnapshot
* * @brief: 用于在副本数据落后于leader的snapshotIndex时进行更新 * @param: server为副本编号 */
Raft/raft.go:1027
↓ 2 callersFunctionsnapshot
Returns a array of channels that contains elements in each shard, which likely takes a snapshot of `m`. It returns once the size of each buffered chan
BaseServer/concurrentHashMap.go:216
↓ 2 callersFunctionstr2sbyte
* * @notes: 重写一遍是为了防止环状引用 */
BaseServer/concurrentHashMap.go:35
↓ 1 callersMethodBaseDelete
(k string)
BaseServer/concurrentHashMap.go:370
↓ 1 callersMethodCheckToken
* * @param: 给出文件名和手中持有的token,返回**此时刻**token是否有效 * @brief: 可以传入绝对路径和相对路径,也不能叫相对路径 */
Connect/client_handler.go:337
↓ 1 callersMethodCreateSnapshots
快照部分 * * @brief: 用于在日志超过阈值时进行日志压缩,由kv层调用,index之前已经生成快照了 * @notes: 由raft的锁保护,不需要放在kvraft的临界区内 */
Raft/raft.go:886
↓ 1 callersMethodFastGet
* * @brief: FastGet请求不提供一致性保证,直接从主服务器的的字典中取值,不经过raft层; * @notes: FastGet请求适合客户端对一个特定的键修改以后很长时间不会修改,所有客户端可以直接get,此时fastget效率最高 */
BaseServer/fastget.go:31
↓ 1 callersMethodGetRaft
用于server_handler.go,注册raft服务
BaseServer/kvserver.go:83
↓ 1 callersFunctionInitFileOperation
()
BaseServer/lockserver.go:39
↓ 1 callersFunctionInitRoot
* * @brief: 用于初始化每个Cell内的根目录 * @return: 返回根目录的实体 */
BaseServer/fileSystem.go:403
↓ 1 callersMethodInsert
* * @brief: Type:创建的文件的类型;name:文件名称;后面则是文件初始的操作权限 * @return: 插入正确返回true;否则返回false * @notes: 文件被创建的时候默认打开,即引用计数为1,能够插入文件证明客户端的InstanceSeq是目录的 */
BaseServer/fileSystem.go:183
↓ 1 callersFunctionMakePersister
()
Persister/persister.go:46
↓ 1 callersMethodMakeRaftServer
(peers []*rpc.Client)
Raft/raft.go:819
↓ 1 callersFunctionNewConcurrentMap
* * @brief: 创建一个新的map */
BaseServer/concurrentHashMap.go:60
↓ 1 callersMethodReadRaftStateFromFile
* * @brief: 从raftstate.hdb中读取RaftState * @return: 返回文件内容的[]byte */
Persister/persister.go:80
↓ 1 callersMethodReadSnapshot
()
Persister/persister.go:115
↓ 1 callersMethodReadSnapshotFromFile
* * @brief: 根据SnapshotFileName读取快照文件 */
Persister/persister.go:130
↓ 1 callersFunctionReturnInterval
* * @brief: 李浩帮忙推出的服务器连接时间间隔函数 * @return: 毫秒,调用方不用转换 * @notes: TODO 目前看起来并不符合预期;后面可以再改, */ * * @example: 0 695 893 1005 1083 // 可以看出前几次重试斜率
Connect/common.go:282
↓ 1 callersMethodSaveRaftState
(state []byte)
Persister/persister.go:59
↓ 1 callersMethodSaveSnapshot
(snapshot []byte)
Persister/persister.go:104
↓ 1 callersMethodStartKVServer
(servers []*rpc.Client)
BaseServer/kvserver.go:283
↓ 1 callersMethodStartRaftServer
(address *[]string)
BaseServer/kvserver.go:293
↓ 1 callersMethodStartServer
* * @brief: 再调用这个函数的时候开始服务, * @return: 三种返回类型:路径解析错误;connectAll连接出现问题;成功 */
Connect/server_handler.go:250
↓ 1 callersMethodacceptFromRaftDaemon
* * @brief: 为了从raft接收数据,负责把从applyCh中接收到的命令转化成数据库中的值 * 并在接收到命令的同时通知请求上的channel用于向客户返回数据 */
BaseServer/processdaemon.go:73
↓ 1 callersMethodapplyLogEntryDaemon
*func (rf *Raft) Kill() { close(rf.shutdownCh) rf.commitCond.Broadcast() } */ * * @brief: 用于把数据提交给rf.applyCh * @notice: 调用时需要加锁 */
Raft/raft.go:689
↓ 1 callersMethodcanvassVotes
* * @brief: 用于请求投票,并在RPC成功以后处理 */
Raft/raft.go:734
↓ 1 callersFunctioncheckChubbyGoMapStrategy
* * @brief: 解析chubbygomap的map策略 */
Connect/common.go:306
↓ 1 callersMethodcheckJsonParser
* * @brief: 检查从json中解析的字段是否符合规定 * @return: 解析正确返回true,错误为false */
Connect/client_handler.go:255
↓ 1 callersMethodcheckJsonParser
* * @brief: 检查从json中解析的字段是否符合规定 * @return: 解析正确返回true,错误为false */
Connect/server_handler.go:190
↓ 1 callersFunctioncheckPersistenceStrategy
* * @brief: 解析文件中的持久化策略是否正确,目前只有三种有效的策略 */
Connect/common.go:293
↓ 1 callersMethodconnect
RedisTest/redis.h:40
↓ 1 callersMethodconnectAll
* * @brief: 拿到其他服务器的地址,分别建立RPC连接 * @return: 三种返回类型:超时;HttpError;成功 * @notes: 客户端也采取重传是因为担心在服务部署的时候直接连接导致失败;可能服务器集群此时运行时不足N个,但是仍在提供服务,所以这里逻辑与服务器并不一
Connect/client_handler.go:77
↓ 1 callersMethodconnectAll
* * @brief: 拿到其他服务器的地址,分别建立RPC连接 * @return:三种返回类型:超时;HttpError;成功 */ peers出现了条件竞争;修复,把服务启动在连接完成以后
Connect/server_handler.go:63
↓ 1 callersMethodconsistencyCheck
* * @brief: 用于leader和副本同步日志 * @params: 副本号 * @ret: void */
Raft/raft.go:590
↓ 1 callersMethodconsistencyCheckReplyHandler
* * @brief: consistencyCheck的处理函数 * @params: 副本号,调用consistencyCheck的返回值 * @ret: void */
Raft/raft.go:521
↓ 1 callersMethodelectionDaemon
* * @brief: 选举协程 */
Raft/raft.go:795
↓ 1 callersMethodfillPersister
-------------------------- * * @brief: 把从json中解出的SnapshotFileName,RaftstateFileName,PersistenceStrategy三项填充到Persister * @notes: 这个函数建立在已执行完checkJson
Connect/server_handler.go:323
↓ 1 callersMethodfillRequestVoteArgs
(args *RequestVoteArgs)
Raft/raft.go:178
↓ 1 callersMethodget
RedisTest/redis.h:51
↓ 1 callersMethodheartbeatDaemon
* * @brief: 用于leader发送心跳包 * @params: 传入一个命令实体 * @ret: 返回这条命令在日志中的index,term和此节点在执行命令时是否为leader */
Raft/raft.go:628
↓ 1 callersMethodisUpperThanMaxraftstate
* * @notes: 因为这个函数中maxraftstate是不变的,RaftStateSize()又是由persist中的锁保护的,所以完全没必要放在临界区内 */
BaseServer/processdaemon.go:349
↓ 1 callersFunctionjudgeTrueNumber
* * @brief: 用于判断此时已经重连Maxreries的协程数,在超过阈值的时候直接退出,error为超时 * @return: 返回数组中true的个数 */
Connect/client_handler.go:203
↓ 1 callersFunctionmax
(a, b int)
Raft/raft.go:94
↓ 1 callersFunctionparserMyPort
* * @brief: 解析MyPort * @return: 正确返回true;否则false */
Connect/common.go:154
↓ 1 callersMethodreadPersist
* * @brief: 读取持久化的数据 */
Raft/raft.go:149
↓ 1 callersMethodresetOnElection
* * @brief: 在重新选举以后设置基础值 * @notice: 调用时需要加锁 */
Raft/raft.go:781
↓ 1 callersMethodsendAppendEntries
(server int, args *AppendEntriesArgs, reply *AppendEntriesReply)
Raft/raft.go:458
↓ 1 callersMethodsendInstallSnapshot
(server int, args *InstallSnapshotArgs, reply *InstallSnapshotReply)
Raft/raft.go:996
↓ 1 callersMethodsendRequestVote
* * @brief: 在检测到连接失败的时候启动一个goRoutinue去进行重连 * @params: 此次要进行通信的实体的下标,RPC对象的入参和返回值 * @ret: 此次通信是否成功。要启动goRoutinue则证明失败了 */
Raft/raft.go:282
↓ 1 callersMethodserverRegisterFun
* * @brief: 把raft和kvraft的挂到RPC上 */
Connect/server_handler.go:153
↓ 1 callersMethodset
RedisTest/redis.h:59
↓ 1 callersFunctiontransformChubbyGomap2uint32
* * @brief: 已经经历过checkjson,只可能有两种情况 */
Connect/common.go:319
↓ 1 callersMethodupdateCommitIndex
* * @brief: 用于更新commitIndex * @notice: 调用时需要加锁 */
Raft/raft.go:658
↓ 1 callersFunctionxxhash_key
* * @param: 性能极其优异的哈希算法 */
BaseServer/concurrentHashMap.go:334
MethodAcquire
* * @param: 文件描述符传来的InstanceSeq;要删除的文件的名字 * @return: 成功删除返回true,否则返回false * @notes: 需要检测name是否存在; 调用方先判断bool再看seq */
BaseServer/fileSystem.go:300
next →1–100 of 197, ranked by callers