##// END OF EJS Templates
setdiscovery: batch heads and known(ownheads)...
Peter Arrenbrecht -
r14624:f03c82d1 default
parent child Browse files
Show More
@@ -91,15 +91,27 b' def findcommonheads(ui, local, remote,'
91 91 roundtrips = 0
92 92 cl = local.changelog
93 93 dag = dagutil.revlogdag(cl)
94 nodes = dag.nodeset()
95 94
96 # early exit if we know all the specified server heads already
95 # early exit if we know all the specified remote heads already
97 96 ui.debug("query 1; heads\n")
98 97 roundtrips += 1
99 srvheadhashes = remote.heads()
100
101 ## TODO We might want to request an additional random sample of the server's
102 ## nodes batched with the heads query here.
98 ownheads = dag.heads()
99 sample = ownheads
100 if remote.local():
101 # stopgap until we have a proper localpeer that supports batch()
102 srvheadhashes = remote.heads()
103 yesno = remote.known(dag.externalizeall(sample))
104 elif remote.capable('batch'):
105 batch = remote.batch()
106 srvheadhashesref = batch.heads()
107 yesnoref = batch.known(dag.externalizeall(sample))
108 batch.submit()
109 srvheadhashes = srvheadhashesref.value
110 yesno = yesnoref.value
111 else:
112 # compatibitity with pre-batch, but post-known remotes during 1.9 devel
113 srvheadhashes = remote.heads()
114 sample = []
103 115
104 116 if cl.tip() == nullid:
105 117 if srvheadhashes != [nullid]:
@@ -115,46 +127,48 b' def findcommonheads(ui, local, remote,'
115 127 ui.note("all remote heads known locally\n")
116 128 return (srvheadhashes, False, srvheadhashes,)
117 129
130 if sample and util.all(yesno):
131 ui.note("all local heads known remotely\n")
132 ownheadhashes = dag.externalizeall(ownheads)
133 return (ownheadhashes, True, srvheadhashes,)
134
118 135 # full blown discovery
119 undecided = nodes # own nodes where I don't know if the server knows them
136 undecided = dag.nodeset() # own nodes where I don't know if remote knows them
120 137 common = set() # own nodes I know we both know
121 missing = set() # own nodes I know the server lacks
138 missing = set() # own nodes I know remote lacks
122 139
123 # treat remote heads as a first implicit sample response
140 # treat remote heads (and maybe own heads) as a first implicit sample response
124 141 common.update(dag.ancestorset(srvheads))
125 142 undecided.difference_update(common)
126 # use cheapish initial sample
127 if common:
128 ui.debug("taking initial sample\n")
129 sample = _takefullsample(dag, undecided, size=fullsamplesize)
130 else:
131 ui.debug("taking quick initial sample\n")
132 sample = _takequicksample(dag, nodes, size=initialsamplesize,
133 initial=True)
143
144 full = False
145 while undecided:
134 146
135 roundtrips += 1
136 ui.progress(_('searching'), roundtrips, unit=_('queries'))
137 ui.debug("query %i; still undecided: %i, sample size is: %i\n"
138 % (roundtrips, len(undecided), len(sample)))
139 # indices between sample and externalized version must match
140 sample = list(sample)
141 yesno = remote.known(dag.externalizeall(sample))
147 if sample:
148 commoninsample = set(n for i, n in enumerate(sample) if yesno[i])
149 common.update(dag.ancestorset(commoninsample, common))
142 150
143 while undecided:
144 commoninsample = set(n for i, n in enumerate(sample) if yesno[i])
145 common.update(dag.ancestorset(commoninsample, common))
151 missinginsample = [n for i, n in enumerate(sample) if not yesno[i]]
152 missing.update(dag.descendantset(missinginsample, missing))
146 153
147 missinginsample = [n for i, n in enumerate(sample) if not yesno[i]]
148 missing.update(dag.descendantset(missinginsample, missing))
149
150 undecided.difference_update(missing)
151 undecided.difference_update(common)
154 undecided.difference_update(missing)
155 undecided.difference_update(common)
152 156
153 157 if not undecided:
154 158 break
155 159
156 ui.note("sampling from both directions\n")
157 sample = _takefullsample(dag, undecided, size=fullsamplesize)
160 if full:
161 ui.note("sampling from both directions\n")
162 sample = _takefullsample(dag, undecided, size=fullsamplesize)
163 elif common:
164 # use cheapish initial sample
165 ui.debug("taking initial sample\n")
166 sample = _takefullsample(dag, undecided, size=fullsamplesize)
167 else:
168 # use even cheaper initial sample
169 ui.debug("taking quick initial sample\n")
170 sample = _takequicksample(dag, undecided, size=initialsamplesize,
171 initial=True)
158 172
159 173 roundtrips += 1
160 174 ui.progress(_('searching'), roundtrips, unit=_('queries'))
@@ -163,6 +177,7 b' def findcommonheads(ui, local, remote,'
163 177 # indices between sample and externalized version must match
164 178 sample = list(sample)
165 179 yesno = remote.known(dag.externalizeall(sample))
180 full = True
166 181
167 182 result = dag.headsetofconnecteds(common)
168 183 ui.progress(_('searching'), None)
@@ -102,19 +102,19 b' do not use the proxy if it is in the no '
102 102 * - - [*] "GET http://localhost:$HGPORT/?cmd=stream_out HTTP/1.1" - - (glob)
103 103 * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=bookmarks (glob)
104 104 * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
105 * - - [*] "GET http://localhost:$HGPORT/?cmd=heads HTTP/1.1" - - (glob)
105 * - - [*] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
106 106 * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629 (glob)
107 107 * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=bookmarks (glob)
108 108 * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
109 * - - [*] "GET http://localhost:$HGPORT/?cmd=heads HTTP/1.1" - - (glob)
109 * - - [*] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
110 110 * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629 (glob)
111 111 * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=bookmarks (glob)
112 112 * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
113 * - - [*] "GET http://localhost:$HGPORT/?cmd=heads HTTP/1.1" - - (glob)
113 * - - [*] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
114 114 * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629 (glob)
115 115 * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=bookmarks (glob)
116 116 * - - [*] "GET http://localhost:$HGPORT/?cmd=capabilities HTTP/1.1" - - (glob)
117 * - - [*] "GET http://localhost:$HGPORT/?cmd=heads HTTP/1.1" - - (glob)
117 * - - [*] "GET http://localhost:$HGPORT/?cmd=batch HTTP/1.1" - - x-hgarg-1:cmds=heads+%3Bknown+nodes%3D (glob)
118 118 * - - [*] "GET http://localhost:$HGPORT/?cmd=getbundle HTTP/1.1" - - x-hgarg-1:common=0000000000000000000000000000000000000000&heads=83180e7845de420a1bb46896fd5fe05294f8d629 (glob)
119 119 * - - [*] "GET http://localhost:$HGPORT/?cmd=listkeys HTTP/1.1" - - x-hgarg-1:namespace=bookmarks (glob)
120 120
@@ -35,7 +35,7 b''
35 35 searching for changes
36 36 taking quick initial sample
37 37 searching: 2 queries
38 query 2; still undecided: 2, sample size is: 2
38 query 2; still undecided: 1, sample size is: 1
39 39 2 total queries
40 40 new remote heads on branch 'default'
41 41 new remote head 1e108cc5548c
@@ -28,7 +28,7 b' check that {1} syntax works'
28 28 sending capabilities command
29 29 comparing with parts://localhost/
30 30 query 1; heads
31 sending heads command
31 sending batch command
32 32 searching for changes
33 33 all remote heads known locally
34 34 no changes found
@@ -44,10 +44,7 b' Small superset:'
44 44 comparing with b
45 45 query 1; heads
46 46 searching for changes
47 taking initial sample
48 searching: 2 queries
49 query 2; still undecided: 4, sample size is: 4
50 2 total queries
47 all local heads known remotely
51 48 common heads: b5714e113bc0 01241442b3c2
52 49 local is subset
53 50
@@ -83,9 +80,9 b' Many new:'
83 80 comparing with b
84 81 query 1; heads
85 82 searching for changes
86 taking quick initial sample
83 taking initial sample
87 84 searching: 2 queries
88 query 2; still undecided: 35, sample size is: 35
85 query 2; still undecided: 29, sample size is: 29
89 86 2 total queries
90 87 common heads: bebd167eb94d
91 88
@@ -101,7 +98,7 b' Many new:'
101 98 searching for changes
102 99 taking initial sample
103 100 searching: 2 queries
104 query 2; still undecided: 3, sample size is: 3
101 query 2; still undecided: 2, sample size is: 2
105 102 2 total queries
106 103 common heads: bebd167eb94d
107 104
@@ -122,9 +119,9 b' Both sides many new with stub:'
122 119 comparing with b
123 120 query 1; heads
124 121 searching for changes
125 taking quick initial sample
122 taking initial sample
126 123 searching: 2 queries
127 query 2; still undecided: 34, sample size is: 34
124 query 2; still undecided: 29, sample size is: 29
128 125 2 total queries
129 126 common heads: 2dc09a01254d
130 127
@@ -140,7 +137,7 b' Both sides many new with stub:'
140 137 searching for changes
141 138 taking initial sample
142 139 searching: 2 queries
143 query 2; still undecided: 30, sample size is: 30
140 query 2; still undecided: 29, sample size is: 29
144 141 2 total queries
145 142 common heads: 2dc09a01254d
146 143
@@ -163,7 +160,7 b' Both many new:'
163 160 searching for changes
164 161 taking quick initial sample
165 162 searching: 2 queries
166 query 2; still undecided: 32, sample size is: 32
163 query 2; still undecided: 31, sample size is: 31
167 164 2 total queries
168 165 common heads: 66f7d451a68b
169 166
@@ -179,7 +176,7 b' Both many new:'
179 176 searching for changes
180 177 taking quick initial sample
181 178 searching: 2 queries
182 query 2; still undecided: 32, sample size is: 32
179 query 2; still undecided: 31, sample size is: 31
183 180 2 total queries
184 181 common heads: 66f7d451a68b
185 182
@@ -202,7 +199,7 b' Both many new skewed:'
202 199 searching for changes
203 200 taking quick initial sample
204 201 searching: 2 queries
205 query 2; still undecided: 52, sample size is: 52
202 query 2; still undecided: 51, sample size is: 51
206 203 2 total queries
207 204 common heads: 66f7d451a68b
208 205
@@ -218,7 +215,7 b' Both many new skewed:'
218 215 searching for changes
219 216 taking quick initial sample
220 217 searching: 2 queries
221 query 2; still undecided: 32, sample size is: 32
218 query 2; still undecided: 31, sample size is: 31
222 219 2 total queries
223 220 common heads: 66f7d451a68b
224 221
@@ -241,7 +238,7 b' Both many new on top of long history:'
241 238 searching for changes
242 239 taking quick initial sample
243 240 searching: 2 queries
244 query 2; still undecided: 1050, sample size is: 11
241 query 2; still undecided: 1049, sample size is: 11
245 242 sampling from both directions
246 243 searching: 3 queries
247 244 query 3; still undecided: 31, sample size is: 31
@@ -260,7 +257,7 b' Both many new on top of long history:'
260 257 searching for changes
261 258 taking quick initial sample
262 259 searching: 2 queries
263 query 2; still undecided: 1030, sample size is: 11
260 query 2; still undecided: 1029, sample size is: 11
264 261 sampling from both directions
265 262 searching: 3 queries
266 263 query 3; still undecided: 16, sample size is: 16
General Comments 0
You need to be logged in to leave comments. Login now