Hi,
[merged the comments]
> > - yield url[:-len("/repodata/repomd.xml")]
> > + yield url[:-len("/repodata/repomd.xml")],
> > mirror.max_connections
>
> We can't change the API of metalink.urls like this. This is one of the
> reasons we still aren't using the private mirror attribute. Probably
> need some new API to return "url objects" which will have
> private/max_connections/etc. attributes.
I've changed metalink.urls() so it returns URLs, but also stores
max_connections in metalink.host2con hash. Have to use hostnames
because yumRepo does some further URL rewriting.
> ...so if we are going to add random attributes to the dict we should
> document that ... or just use the kwargs indirection, and document
> that.
Documented kwargs['max_connections'].
> however "failfunc" seems pretty bad as a name.
Can't think of better one ATM. It's ment to be 'dual' to the check-func,
with similar semantics (being called only once).
> Also having two code paths seems non-optimal, can't we have the
> default "failfunc" just do the raise?
Did that. Also changed the MirrorGroup => Grabber argument passing
quite a bit, so that blocking grabber does not receive 'failfunc',
and hence does not have to check for the MG layer.
> Finally the _callback() method could use a better name ... I guess
> it's "_run_callback" or "_call_callable" ... which still aren't good, but
> give some idea.
I think _run_callback is fine, renamed that.
> Why can't we reuse _curl_cache ... what problems does that cause?
> IIRC keepalive doesn't work if you do that.
Uh, thanks for spotting this. It should be possible to reuse them,
will implement that.
[wrt CurlMulti]
> Again, _if_ we want to use this then it should be an optimisation.
> I've had _so many problems_ with using non-multi curl talking to multiple
> hosts that I have no expectation that using multi. curl will make
> anything better/easier/whatever.
Multi curl means just less forking and simpler polling, but I
think of implementing a pipe-for-each-request version too-
to have 'plan B' if we hit a wall with multi.
> > +class _ProxyProgress:
> > + def start(*d1, **d2): pass
> > + def update(self, _amount_read):
> > + os.write(1, '%d %d\n' % (self._id, _amount_read))
>
> Don't you need "end" here too?
CurlFileObject calls start + update during the download.
"end" (or "failure") method is called by the upper layer.
_do_fo_close() does not call "end" either.
CurlFileObject's close() DOES call "end", but it's avoided,
because (contrary to _do_grab), _do_fo_close does not reopen it.
> > +import simplejson
>
> Is this really necessary ... how big is the cost?
Don't like it either.. I have used a simple value formatting
code for int/float/str options only, but 'range' option needs
a tuple, so instead of 'if option_name == ...', I gave up.
$ python -c 'print open("/proc/self/status").read()'|grep RSS
VmRSS: 3092 kB
$ python -c 'import simplejson;simplejson.dumps(None);print
open("/proc/self/status").read()'|grep RSS
VmRSS: 4340 kB
1.2M, expected it to be much less.
> > + fdset = dl.multi.fdset()
> > + fdset[0].append(0)
> > + if 0 in select.select(*(fdset + (tout,)))[0]:
>
> Again, select.poll() code is going to be 666 times easier to read.
I'd have to use some fdset() => poll.register() adapter..
Not sure if that's easier to read than these 3 lines.
> ... basically a blocking readline() call, which we can probably
> live with (although it can suck). But at least put it behind some
> method.
Ok.
> > + # Do some polling to work this around.
> > + tout = 10e-3
> Shocker, workarounds for CurlMulti weirdness.
Yes, it sucks. I guess it's because of the way curl does dns- that socket is
probably burried somewhere too deep to get into curl multi's fdset().
But it's just few iterations, does not hurt much, IMO.
> Is it a big benefit to use __file__ instead of creating something in
> libexec/whatever?
Not sure. What are the options? Hard-coded paths? Config options?
I don't even like that '/usr/bin/python' above..
> Have you tried on RHEL-6 with ssl cert. repos?
No, just the very basic use cases.
Zdenek
_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel