[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [PATCH rhel6-branch] Reset the resolver cache after bringing up the network (#587032).



Hi,

I wonder if there is not some higher level function used in
bringing up the network, where we can stick the
urlgrabber.grabber.reset_curl_obj()

But I guess you already looked at that, so ack.

Regards,

Hans




On 05/12/2010 08:49 PM, Chris Lumens wrote:
Throughout stage2 if we bring up the network after doing various actions,
we need to make sure the DNS resolver is reset to pick up the new information.
However, pycurl/libcurl uses the c-ares resolver which does not have a
method similar to res_init.  Instead we need to tear down the pycurl.Curl
object instance cached in urlgrabber and create a new one.  This does the
same thing as re-reading /etc/resolv.conf, but in more steps.
---
  anaconda.spec.in |    4 ++--
  iw/task_gui.py   |    5 +++++
  yuminstall.py    |   12 +++++++++++-
  3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/anaconda.spec.in b/anaconda.spec.in
index 0085724..6c6cb92 100644
--- a/anaconda.spec.in
+++ b/anaconda.spec.in
@@ -71,7 +71,7 @@ BuildRequires: newt-devel
  BuildRequires: pango-devel
  BuildRequires: pykickstart>= %{pykickstartver}
  BuildRequires: python-devel
-BuildRequires: python-urlgrabber
+BuildRequires: python-urlgrabber>= 3.9.1-5
  BuildRequires: rpm-devel
  BuildRequires: rpm-python>= %{rpmpythonver}
  BuildRequires: slang-devel>= %{slangver}
@@ -98,7 +98,7 @@ Requires: parted>= %{partedver}
  Requires: pyparted>= %{pypartedver}
  Requires: yum>= %{yumver}
  Requires: libxml2-python
-Requires: python-urlgrabber
+Requires: python-urlgrabber>= 3.9.1-5
  Requires: system-logos
  Requires: pykickstart>= %{pykickstartver}
  Requires: system-config-date>= %{syscfgdatever}
diff --git a/iw/task_gui.py b/iw/task_gui.py
index ae2889d..ded1008 100644
--- a/iw/task_gui.py
+++ b/iw/task_gui.py
@@ -35,6 +35,7 @@ import network
  import iutil

  from yuminstall import AnacondaYumRepo
+import urlgrabber.grabber
  import yum.Errors

  import logging
@@ -530,6 +531,8 @@ class TaskWindow(InstallWindow):
              if not self.anaconda.intf.enableNetwork():
                  return gtk.RESPONSE_CANCEL

+            urlgrabber.grabber.reset_curl_obj()
+
          dialog = RepoEditor(self.anaconda, repo)
          dialog.createDialog()
          dialog.run()
@@ -579,6 +582,8 @@ class TaskWindow(InstallWindow):
                  if not self.anaconda.intf.enableNetwork():
                      return

+                urlgrabber.grabber.reset_curl_obj()
+
              repo.enable()
              if not setupRepo(self.anaconda, repo):
                  return
diff --git a/yuminstall.py b/yuminstall.py
index 1d54f24..307c6fb 100644
--- a/yuminstall.py
+++ b/yuminstall.py
@@ -455,6 +455,8 @@ class AnacondaYum(YumSorter):
                          self._baseRepoURL = None
                          return

+                    urlgrabber.grabber.reset_curl_obj()
+
                  self._switchImage(1)
                  self.mediagrabber = self.mediaHandler
              elif m.startswith("http") or m.startswith("ftp:"):
@@ -464,6 +466,8 @@ class AnacondaYum(YumSorter):
                      if not self.anaconda.intf.enableNetwork():
                          self._baseRepoURL = None

+                    urlgrabber.grabber.reset_curl_obj()
+
                  (opts, server, path) = iutil.parseNfsUrl(m)
                  isys.mount(server+":"+path, self.tree, "nfs", options=opts)

@@ -833,6 +837,8 @@ class AnacondaYum(YumSorter):
              if not self.anaconda.intf.enableNetwork():
                  return

+            urlgrabber.grabber.reset_curl_obj()
+
          rc = self.anaconda.intf.messageWindow(_("Error"),
                     _("The file %s cannot be opened.  This is due to a missing "
                       "file, a corrupt package or corrupt media.  Please "
@@ -1203,6 +1209,8 @@ debuglevel=10
                         custom_buttons=[_("_Exit installer")])
                     sys.exit(1)

+               urlgrabber.grabber.reset_curl_obj()
+
          self.doRepoSetup(anaconda)
          self.doSackSetup(anaconda)
          self.doGroupSetup(anaconda)
@@ -1281,7 +1289,9 @@ debuglevel=10
                      if repo.needsNetwork() and not network.hasActiveNetDev():
                          if anaconda.intf.enableNetwork():
                              repo.mirrorlistparsed = False
-                            continue
+                            continue
+
+                        urlgrabber.grabber.reset_curl_obj()

                      buttons = [_("_Exit installer"), _("Edit"), _("_Retry")]
                  else:


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]