Issue #4788 has been reported by Makoto Kishimoto. ---------------------------------------- Feature #4788: resolv.rb refactoring http://redmine.ruby-lang.org/issues/4788 Author: Makoto Kishimoto Status: Open Priority: Normal Assignee: Category: lib Target version: 1.9.3 このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/li... #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain
on 2011-05-27 10:02
on 2011-05-29 23:51
Issue #4788 has been updated by Makoto Kishimoto. とりあえず思いつかなかったのでパッチでは each_resource_ という名前にしてしまいましたが、fetch_resource という名前でどうでしょうか。 ---------------------------------------- Feature #4788: resolv.rb refactoring http://redmine.ruby-lang.org/issues/4788 Author: Makoto Kishimoto Status: Open Priority: Normal Assignee: Category: lib Target version: 1.9.3 このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/li... #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain
on 2011-06-27 23:24
Issue #4788 has been updated by Hiroshi Nakamura. Assignee set to Akira Tanaka ---------------------------------------- Feature #4788: resolv.rb refactoring http://redmine.ruby-lang.org/issues/4788 Author: Makoto Kishimoto Status: Open Priority: Normal Assignee: Akira Tanaka Category: lib Target version: 1.9.3 このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/li... #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain
on 2011-07-09 17:21
Issue #4788 has been updated by Samuel Williams. I have a vested interest in this patch since I am the developer of RubyDNS. This update will allow RubyDNS to hook into resolve.rb more efficiently. Right now, I have to duplicate code in resolve.rb to get the right behaviour. Also, I originally suggested then name fetch_resource and thus I support Makoto Kishimoto's proposal about this change. Lets work to get this updated so that I can add good support for RubyDNS and Ruby 1.9. Thanks. ---------------------------------------- Feature #4788: resolv.rb refactoring http://redmine.ruby-lang.org/issues/4788 Author: Makoto Kishimoto Status: Open Priority: Normal Assignee: Akira Tanaka Category: lib Target version: 1.9.3 このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/li... #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain
on 2011-07-14 08:46
Issue #4788 has been updated by Makoto Kishimoto. File resolv_rb_patch.txt added ---------------------------------------- Feature #4788: resolv.rb refactoring http://redmine.ruby-lang.org/issues/4788 Author: Makoto Kishimoto Status: Open Priority: Normal Assignee: Akira Tanaka Category: lib Target version: 1.9.x このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/li... #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain
on 2011-08-02 15:40
2011/5/27 Makoto Kishimoto <redmine@ruby-lang.org>: > > $B$3$N$h$&$J%b%s%-!<%Q%C%A$,!J;d$N%3!<%I$G$O$"$j$^$;$s$,!K(B > https://github.com/ioquatix/rubydns/blob/master/li... > #3835 $B!J(B [ruby-core:32407] $B!K$N7k2L!"F0$+$J$/$J$C$F$$$?$N$G%Q%C%A$r8!F$$7$F$$$?$o$1$G$9$,!"(B > $B7kO@$H$7$F(Bresolv.rb$B$K0J2<$N$h$&$J%j%U%!%/%?%j%s%0$r;\$9$N$,$$$$$N$G$O$J$$$+$H9M$($^$7$?!#(B $B$J$<$=$&$9$k$N$,$$$$$N$+=q$$$F$$$J$$$N$G$J$s$H$b8@$$Fq$$$b$N$,$"$j$^$9!#(B $B%b%s%-!<%Q%C%A$,$&$^$/$$$+$J$$$+$i!"$H$$$&M}M3$O<u$1F~$lFq$$$G$9!#(B $B8e$GD4$Y$k$O$a$K$J$C$?$H$-$N$?$a$K!"(B $BJQ99$9$k$H$-$K$O0U?^$r$I$3$+$K;D$7$F$*$-$?$$$H;W$&$N$G$9$,!"(B $B>e5-$O$=$N5-=R$H$7$F==J,$J$b$N$H$O;W$($^$;$s!#(B
on 2011-08-03 03:54
Issue #4788 has been updated by Makoto Kishimoto.
元の問題は、lib/resolv.rb が、TCP へのフォールバックに対応して、その際に
make_requester --> make_udp_requester という名前の変更があったために、
(公開インターフェースではない)それに依存していたコードが動かなくなった、
というものです。
しかし、make_requester のような内部の非常に低いレイヤにあるメソッドに
rubydns ライブラリのコードが依存していた理由は、DNS#each_resource
メソッド中に、個々のリソースを取得するコードが一体不可分に含まれてしまって
いるため、DNS プロキシのようなものを作る場合、each_resource メソッド中の
リソース取得部分のコードの duplicate が、このようなライブラリの実装において
不可避であったためです。
パッチで示したように、リソース取得部分を切り離し、また、一種のコールバックで
ある extract_resources を、現状のハードコーディング状態から抽象化する
リファクタリングによって、ライブラリ側でのコード duplicate が必要なくなります。
パッチで追加される fetch_resource メソッドのユースケースとして、
ライブラリ側のコードがどうなるかというパッチを示します。
--- resolv.rb.orig 2011-05-27 18:15:59.000000000 +0900
+++ resolv.rb 2011-08-03 10:38:43.000000000 +0900
@@ -24,6 +24,13 @@
# This allows such responses to be passed upstream with little or
no
# modification/reinterpretation.
def query(name, typeclass)
+ if respond_to?(:fetch_resource) then
+ fetch_resource(name, typeclass) do |reply, reply_name|
+ return reply, reply_name
+ end
+ return
+ end
+
lazy_initialize
requester = make_requester
senders = {}
----------------------------------------
Feature #4788: resolv.rb refactoring
http://redmine.ruby-lang.org/issues/4788
Author: Makoto Kishimoto
Status: Open
Priority: Normal
Assignee: Akira Tanaka
Category: lib
Target version: 1.9.x
このようなモンキーパッチが(私のコードではありませんが)
https://github.com/ioquatix/rubydns/blob/master/li...
#3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、
結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。
パッチを添付します。
----
diff --git a/lib/resolv.rb b/lib/resolv.rb
index 1e18893..e9c2432 100644
--- a/lib/resolv.rb
+++ b/lib/resolv.rb
@@ -491,6 +491,12 @@ class Resolv
# #getresource for argument details.
def each_resource(name, typeclass, &proc)
+ each_resource_(name, typeclass) {|reply, reply_name|
+ extract_resources(reply, reply_name, typeclass, &proc)
+ }
+ end
+
+ def each_resource_(name, typeclass)
lazy_initialize
requester = make_udp_requester
senders = {}
@@ -517,7 +523,7 @@ class Resolv
# response will not fit in an untruncated UDP packet.
redo
else
- extract_resources(reply, reply_name, typeclass, &proc)
+ yield(reply, reply_name)
end
return
when RCode::NXDomain
on 2011-10-21 04:05
Issue #4788 has been updated by Samuel Williams. It would be nice to get some movement on this - I'm getting bug reports from people trying to use 1.9.x and RubyDNS. Kind regards, Samuel ---------------------------------------- Feature #4788: resolv.rb refactoring http://redmine.ruby-lang.org/issues/4788 Author: Makoto Kishimoto Status: Open Priority: Normal Assignee: Akira Tanaka Category: lib Target version: 1.9.x このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/li... #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain
on 2012-03-28 12:39
Issue #4788 has been updated by ioquatix (Samuel Williams). Hi, still having users with problems and no consistent way to solve it. Merging this patch would be a great addition. Let me know if you require any further support or have any questions. ---------------------------------------- Feature #4788: resolv.rb refactoring https://bugs.ruby-lang.org/issues/4788#change-25301 Author: metanest (Makoto Kishimoto) Status: Assigned Priority: Normal Assignee: akr (Akira Tanaka) Category: lib Target version: 2.0.0 このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/li... #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain
on 2012-03-29 03:51
Issue #4788 has been updated by ioquatix (Samuel Williams). Here is a translation into English for the most recent message from Makoto: The original problem is that 'lib/resolv.rb' had a fallback to TCP which was broken. There was a patch (#3835) which renamed ‘make_requester' to 'make_udp_requester’. This is not a public interface so the code which depended on it stopped working. However, the reason why RubyDNS depended on such a method is because the high level interface performs breaks the response up into individual records but we are actually interested in the response in its entirety. This is specifically a problem when creating a DNS proxy where you want to forward requests with minimal changes. Duplicating the code for each_resource was unavoidable in the implementation of RubyDNS. As in the patch provided by Makoto, code duplication can be reduced by removing the direct connection between each_resource and fetch_resource, and providing a block to be executed per successful response. A second patch shows how RubyDNS can be simplified once the proposed change is applied. ---------------------------------------- Feature #4788: resolv.rb refactoring https://bugs.ruby-lang.org/issues/4788#change-25344 Author: metanest (Makoto Kishimoto) Status: Assigned Priority: Normal Assignee: akr (Akira Tanaka) Category: lib Target version: 2.0.0 このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/li... #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain
on 2012-06-11 13:56
Issue #4788 has been updated by ioquatix (Samuel Williams). Hi, still waiting for some progress on this issue. Lots of people are bugging me about it. ---------------------------------------- Feature #4788: resolv.rb refactoring https://bugs.ruby-lang.org/issues/4788#change-27163 Author: metanest (Makoto Kishimoto) Status: Assigned Priority: Normal Assignee: akr (Akira Tanaka) Category: lib Target version: 2.0.0 このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/li... #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain
on 2012-07-16 15:42
Issue #4788 has been updated by ioquatix (Samuel Williams). *Bump* ---------------------------------------- Feature #4788: resolv.rb refactoring https://bugs.ruby-lang.org/issues/4788#change-28147 Author: metanest (Makoto Kishimoto) Status: Assigned Priority: Normal Assignee: akr (Akira Tanaka) Category: lib Target version: 2.0.0 このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/li... #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain
on 2012-07-17 01:57
Issue #4788 has been updated by shyouhei (Shyouhei Urabe). @ioquatix isn't the only one who's interested in it (read: me too). ---------------------------------------- Feature #4788: resolv.rb refactoring https://bugs.ruby-lang.org/issues/4788#change-28163 Author: metanest (Makoto Kishimoto) Status: Assigned Priority: Normal Assignee: akr (Akira Tanaka) Category: lib Target version: 2.0.0 このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/li... #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain
on 2012-10-28 15:13
Issue #4788 has been updated by akr (Akira Tanaka). Target version changed from 2.0.0 to next minor ---------------------------------------- Feature #4788: resolv.rb refactoring https://bugs.ruby-lang.org/issues/4788#change-31888 Author: metanest (Makoto Kishimoto) Status: Assigned Priority: Normal Assignee: akr (Akira Tanaka) Category: lib Target version: next minor このようなモンキーパッチが(私のコードではありませんが) https://github.com/ioquatix/rubydns/blob/master/li... #3835 ( [ruby-core:32407] )の結果、動かなくなっていたのでパッチを検討していたわけですが、 結論としてresolv.rbに以下のようなリファクタリングを施すのがいいのではないかと考えました。 パッチを添付します。 ---- diff --git a/lib/resolv.rb b/lib/resolv.rb index 1e18893..e9c2432 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -491,6 +491,12 @@ class Resolv # #getresource for argument details. def each_resource(name, typeclass, &proc) + each_resource_(name, typeclass) {|reply, reply_name| + extract_resources(reply, reply_name, typeclass, &proc) + } + end + + def each_resource_(name, typeclass) lazy_initialize requester = make_udp_requester senders = {} @@ -517,7 +523,7 @@ class Resolv # response will not fit in an untruncated UDP packet. redo else - extract_resources(reply, reply_name, typeclass, &proc) + yield(reply, reply_name) end return when RCode::NXDomain
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.