MCPcopy
hub / github.com/NVIDIA/aistore / Start

Method Start

downloader/diff_resolver.go:77–146  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

75}
76
77func (dr *DiffResolver) Start() {
78 go func() {
79 defer close(dr.resultCh)
80 src, srcOk := <-dr.srcCh
81 dst, dstOk := <-dr.dstCh
82 for {
83 if !srcOk && !dstOk {
84 dr.resultCh <- DiffResolverResult{
85 Action: DiffResolverEOF,
86 }
87 return
88 } else if !srcOk || (dstOk && src.ObjName > dst.ObjName) {
89 dr.resultCh <- DiffResolverResult{
90 Action: DiffResolverRecv,
91 Dst: dst,
92 }
93 dst, dstOk = <-dr.dstCh
94 } else if !dstOk || (srcOk && src.ObjName < dst.ObjName) {
95 remote, err := dr.ctx.IsObjFromRemote(src)
96 if err != nil {
97 dr.resultCh <- DiffResolverResult{
98 Action: DiffResolverErr,
99 Src: src,
100 Dst: dst,
101 Err: err,
102 }
103 return
104 }
105 if remote {
106 cos.Assert(!dstOk || dst.Link == "") // destination must be remote as well
107 dr.resultCh <- DiffResolverResult{
108 Action: DiffResolverDelete,
109 Src: src,
110 }
111 } else {
112 dr.resultCh <- DiffResolverResult{
113 Action: DiffResolverSend,
114 Src: src,
115 }
116 }
117 src, srcOk = <-dr.srcCh
118 } else { /* s.ObjName == d.ObjName */
119 equal, err := dr.ctx.CompareObjects(src, dst)
120 if err != nil {
121 dr.resultCh <- DiffResolverResult{
122 Action: DiffResolverErr,
123 Src: src,
124 Dst: dst,
125 Err: err,
126 }
127 return
128 }
129 if equal {
130 dr.resultCh <- DiffResolverResult{
131 Action: DiffResolverSkip,
132 Src: src,
133 Dst: dst,
134 }

Callers 2

TestDiffResolverFunction · 0.95
dispatchDownloadMethod · 0.95

Calls 3

AssertFunction · 0.92
IsObjFromRemoteMethod · 0.65
CompareObjectsMethod · 0.65

Tested by 1

TestDiffResolverFunction · 0.76