<feed xmlns='http://www.w3.org/2005/Atom'>
<title>puppet.git/lib/puppet/network/http/mongrel, branch ticket/master/7841</title>
<subtitle>Puppet repo</subtitle>
<link rel='alternate' type='text/html' href='https://fedorapeople.org/cgit/ricky/public_git/puppet.git/'/>
<entry>
<title>Code smell: Two space indentation</title>
<updated>2010-07-10T01:12:17+00:00</updated>
<author>
<name>Markus Roberts</name>
<email>Markus@reality.com</email>
</author>
<published>2010-07-10T01:12:17+00:00</published>
<link rel='alternate' type='text/html' href='https://fedorapeople.org/cgit/ricky/public_git/puppet.git/commit/?id=3180b9d9b2c844dade1d361326600f7001ec66dd'/>
<id>3180b9d9b2c844dade1d361326600f7001ec66dd</id>
<content type='text'>
Replaced 106806 occurances of ^( +)(.*$) with

The ruby community almost universally (i.e. everyone but Luke, Markus, and the other eleven people
who learned ruby in the 1900s) uses two-space indentation.

3 Examples:

    The code:
        end

        # Tell getopt which arguments are valid
        def test_get_getopt_args
            element = Setting.new :name =&gt; "foo", :desc =&gt; "anything", :settings =&gt; Puppet::Util::Settings.new
            assert_equal([["--foo", GetoptLong::REQUIRED_ARGUMENT]], element.getopt_args, "Did not produce appropriate getopt args")

    becomes:
        end

        # Tell getopt which arguments are valid
        def test_get_getopt_args
          element = Setting.new :name =&gt; "foo", :desc =&gt; "anything", :settings =&gt; Puppet::Util::Settings.new
          assert_equal([["--foo", GetoptLong::REQUIRED_ARGUMENT]], element.getopt_args, "Did not produce appropriate getopt args")

    The code:
            assert_equal(str, val)

            assert_instance_of(Float, result)

        end

        # Now test it with a passed object
    becomes:
          assert_equal(str, val)

          assert_instance_of(Float, result)

        end

        # Now test it with a passed object
    The code:
        end

        assert_nothing_raised do
            klass[:Yay] = "boo"
            klass["Cool"] = :yayness
        end

    becomes:
        end

        assert_nothing_raised do
          klass[:Yay] = "boo"
          klass["Cool"] = :yayness
        end
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Replaced 106806 occurances of ^( +)(.*$) with

The ruby community almost universally (i.e. everyone but Luke, Markus, and the other eleven people
who learned ruby in the 1900s) uses two-space indentation.

3 Examples:

    The code:
        end

        # Tell getopt which arguments are valid
        def test_get_getopt_args
            element = Setting.new :name =&gt; "foo", :desc =&gt; "anything", :settings =&gt; Puppet::Util::Settings.new
            assert_equal([["--foo", GetoptLong::REQUIRED_ARGUMENT]], element.getopt_args, "Did not produce appropriate getopt args")

    becomes:
        end

        # Tell getopt which arguments are valid
        def test_get_getopt_args
          element = Setting.new :name =&gt; "foo", :desc =&gt; "anything", :settings =&gt; Puppet::Util::Settings.new
          assert_equal([["--foo", GetoptLong::REQUIRED_ARGUMENT]], element.getopt_args, "Did not produce appropriate getopt args")

    The code:
            assert_equal(str, val)

            assert_instance_of(Float, result)

        end

        # Now test it with a passed object
    becomes:
          assert_equal(str, val)

          assert_instance_of(Float, result)

        end

        # Now test it with a passed object
    The code:
        end

        assert_nothing_raised do
            klass[:Yay] = "boo"
            klass["Cool"] = :yayness
        end

    becomes:
        end

        assert_nothing_raised do
          klass[:Yay] = "boo"
          klass["Cool"] = :yayness
        end
</pre>
</div>
</content>
</entry>
<entry>
<title>Code smell: Avoid explicit returns</title>
<updated>2010-07-10T01:06:33+00:00</updated>
<author>
<name>Markus Roberts</name>
<email>Markus@reality.com</email>
</author>
<published>2010-07-10T01:06:33+00:00</published>
<link rel='alternate' type='text/html' href='https://fedorapeople.org/cgit/ricky/public_git/puppet.git/commit/?id=8d1fbe4586c91682cdda0cb271649e918fd9778b'/>
<id>8d1fbe4586c91682cdda0cb271649e918fd9778b</id>
<content type='text'>
Replaced 583 occurances of

    (DEF)
        (LINES)
        return (.*)
    end

with

3 Examples:

    The code:
        def consolidate_failures(failed)
            filters = Hash.new { |h,k| h[k] = [] }
            failed.each do |spec, failed_trace|
                if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) }
                    filters[f] &lt;&lt; spec
                    break
                end
            end
            return filters
        end
    becomes:
        def consolidate_failures(failed)
            filters = Hash.new { |h,k| h[k] = [] }
            failed.each do |spec, failed_trace|
                if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) }
                    filters[f] &lt;&lt; spec
                    break
                end
            end
            filters
        end
    The code:
        def retrieve
            return_value = super
            return_value = return_value[0] if return_value &amp;&amp; return_value.is_a?(Array)

            return return_value
        end
    becomes:
        def retrieve
            return_value = super
            return_value = return_value[0] if return_value &amp;&amp; return_value.is_a?(Array)

            return_value
        end
    The code:
        def fake_fstab
            os = Facter['operatingsystem']
            if os == "Solaris"
                name = "solaris.fstab"
            elsif os == "FreeBSD"
                name = "freebsd.fstab"
            else
                # Catchall for other fstabs
                name = "linux.fstab"
            end
            oldpath = @provider_class.default_target
            return fakefile(File::join("data/types/mount", name))
        end
    becomes:
        def fake_fstab
            os = Facter['operatingsystem']
            if os == "Solaris"
                name = "solaris.fstab"
            elsif os == "FreeBSD"
                name = "freebsd.fstab"
            else
                # Catchall for other fstabs
                name = "linux.fstab"
            end
            oldpath = @provider_class.default_target
            fakefile(File::join("data/types/mount", name))
        end
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Replaced 583 occurances of

    (DEF)
        (LINES)
        return (.*)
    end

with

3 Examples:

    The code:
        def consolidate_failures(failed)
            filters = Hash.new { |h,k| h[k] = [] }
            failed.each do |spec, failed_trace|
                if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) }
                    filters[f] &lt;&lt; spec
                    break
                end
            end
            return filters
        end
    becomes:
        def consolidate_failures(failed)
            filters = Hash.new { |h,k| h[k] = [] }
            failed.each do |spec, failed_trace|
                if f = test_files_for(failed).find { |f| failed_trace =~ Regexp.new(f) }
                    filters[f] &lt;&lt; spec
                    break
                end
            end
            filters
        end
    The code:
        def retrieve
            return_value = super
            return_value = return_value[0] if return_value &amp;&amp; return_value.is_a?(Array)

            return return_value
        end
    becomes:
        def retrieve
            return_value = super
            return_value = return_value[0] if return_value &amp;&amp; return_value.is_a?(Array)

            return_value
        end
    The code:
        def fake_fstab
            os = Facter['operatingsystem']
            if os == "Solaris"
                name = "solaris.fstab"
            elsif os == "FreeBSD"
                name = "freebsd.fstab"
            else
                # Catchall for other fstabs
                name = "linux.fstab"
            end
            oldpath = @provider_class.default_target
            return fakefile(File::join("data/types/mount", name))
        end
    becomes:
        def fake_fstab
            os = Facter['operatingsystem']
            if os == "Solaris"
                name = "solaris.fstab"
            elsif os == "FreeBSD"
                name = "freebsd.fstab"
            else
                # Catchall for other fstabs
                name = "linux.fstab"
            end
            oldpath = @provider_class.default_target
            fakefile(File::join("data/types/mount", name))
        end
</pre>
</div>
</content>
</entry>
<entry>
<title>Add master side file content streaming</title>
<updated>2010-02-17T14:50:53+00:00</updated>
<author>
<name>Brice Figureau</name>
<email>brice-puppet@daysofwonder.com</email>
</author>
<published>2010-04-10T14:30:03+00:00</published>
<link rel='alternate' type='text/html' href='https://fedorapeople.org/cgit/ricky/public_git/puppet.git/commit/?id=ee5d7f196fa62046f8fc3d3d723da608b17ce531'/>
<id>ee5d7f196fa62046f8fc3d3d723da608b17ce531</id>
<content type='text'>
This patch allows the puppetmaster to serve file chunks by chunks without
ever reading the file content in RAM.
This allows serving large files directly with the master without impacting
the master memory footprint.

Signed-off-by: Brice Figureau &lt;brice-puppet@daysofwonder.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch allows the puppetmaster to serve file chunks by chunks without
ever reading the file content in RAM.
This allows serving large files directly with the master without impacting
the master memory footprint.

Signed-off-by: Brice Figureau &lt;brice-puppet@daysofwonder.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix for #2600 (wrong number of arguments under older mongrel)</title>
<updated>2009-09-14T20:47:14+00:00</updated>
<author>
<name>Markus Roberts</name>
<email>Markus@reality.com</email>
</author>
<published>2009-09-09T00:28:21+00:00</published>
<link rel='alternate' type='text/html' href='https://fedorapeople.org/cgit/ricky/public_git/puppet.git/commit/?id=a45c4354b9ed8deaeb3173a495f06602472faebe'/>
<id>a45c4354b9ed8deaeb3173a495f06602472faebe</id>
<content type='text'>
This was an API compatibility problem with mongrel's HTTPResponse.start()
method between Mongrel 1.0.x and 1.1.x (the number of parameters changed).
The older version does not provide the option to set the response header
message which was used (redundantly with the response body) to return the
error message when the HTTP response was signaling an error.

In order to suport the older version the call was wrapped with a fallback
and the coresponding code in the other rest implementations was adjusted
to always send the error message in the response body.  Then the rest
terminus was adjusted to pull the message from the response body (if it
is present) rather than from the header (which is only used as a fallback
for dealing with older puppetmasters), and the tests were augmeted to
verify this behaviour.

Signed-off-by: Markus Roberts &lt;Markus@reality.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This was an API compatibility problem with mongrel's HTTPResponse.start()
method between Mongrel 1.0.x and 1.1.x (the number of parameters changed).
The older version does not provide the option to set the response header
message which was used (redundantly with the response body) to return the
error message when the HTTP response was signaling an error.

In order to suport the older version the call was wrapped with a fallback
and the coresponding code in the other rest implementations was adjusted
to always send the error message in the response body.  Then the rest
terminus was adjusted to pull the message from the response body (if it
is present) rather than from the header (which is only used as a fallback
for dealing with older puppetmasters), and the tests were augmeted to
verify this behaviour.

Signed-off-by: Markus Roberts &lt;Markus@reality.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixes #2367 - Mongrel::HTTPRequest returns a StringIO object</title>
<updated>2009-07-07T22:44:19+00:00</updated>
<author>
<name>James Turnbull</name>
<email>james@lovedthanlost.net</email>
</author>
<published>2009-07-07T22:44:19+00:00</published>
<link rel='alternate' type='text/html' href='https://fedorapeople.org/cgit/ricky/public_git/puppet.git/commit/?id=1fd98b15a4f93c77182b080c68960d6d1c0bcd59'/>
<id>1fd98b15a4f93c77182b080c68960d6d1c0bcd59</id>
<content type='text'>
When the PUT body is large enough that Mongrel::HTTPRequest#body returns a StringIO object instead of a String. StringIO#to_s then returns "&lt;StringIO#8236987299&gt;" instead of the string contents.

When that string is passed to YAML it returns false which is then passed to save_object without any real time checking.

This is a combination of patches from Jordan Curzon and Ricky Zhou.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When the PUT body is large enough that Mongrel::HTTPRequest#body returns a StringIO object instead of a String. StringIO#to_s then returns "&lt;StringIO#8236987299&gt;" instead of the string contents.

When that string is passed to YAML it returns false which is then passed to save_object without any real time checking.

This is a combination of patches from Jordan Curzon and Ricky Zhou.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix #2392 - use Content-Type for REST communication</title>
<updated>2009-07-05T20:46:05+00:00</updated>
<author>
<name>Brice Figureau</name>
<email>brice-puppet@daysofwonder.com</email>
</author>
<published>2009-07-05T17:38:01+00:00</published>
<link rel='alternate' type='text/html' href='https://fedorapeople.org/cgit/ricky/public_git/puppet.git/commit/?id=1e83aadc749aea9d52281d4f4041f6144a7229c7'/>
<id>1e83aadc749aea9d52281d4f4041f6144a7229c7</id>
<content type='text'>
There were two problems:
 * server-&gt;client communications is using Content-Type with the
direct format name instead of the format mime-type.
 * client-&gt;server communications is not using Content-Type to
send the format of the serialized object. Instead it is using the
first member of the Accept header. The Accept header is usually
reserved for the other side, ie what the client will accept
when the server will respond.

This patch makes sure s-&gt;c communication contains correct Content-Type
headers.

This patch also adds a Content-Type header containing the mime-type of
the object sent by the client when saving.

Signed-off-by: Brice Figureau &lt;brice-puppet@daysofwonder.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There were two problems:
 * server-&gt;client communications is using Content-Type with the
direct format name instead of the format mime-type.
 * client-&gt;server communications is not using Content-Type to
send the format of the serialized object. Instead it is using the
first member of the Accept header. The Accept header is usually
reserved for the other side, ie what the client will accept
when the server will respond.

This patch makes sure s-&gt;c communication contains correct Content-Type
headers.

This patch also adds a Content-Type header containing the mime-type of
the object sent by the client when saving.

Signed-off-by: Brice Figureau &lt;brice-puppet@daysofwonder.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Removed extra whitespace from end of lines</title>
<updated>2009-06-05T23:12:00+00:00</updated>
<author>
<name>Ian Taylor</name>
<email>ian@lorf.org</email>
</author>
<published>2009-06-05T16:39:04+00:00</published>
<link rel='alternate' type='text/html' href='https://fedorapeople.org/cgit/ricky/public_git/puppet.git/commit/?id=4f2c066a97e59a89df64af4b25beac6f3f0553c2'/>
<id>4f2c066a97e59a89df64af4b25beac6f3f0553c2</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix #2308 - Mongrel should use X-Forwarded-For</title>
<updated>2009-06-04T21:59:56+00:00</updated>
<author>
<name>Brice Figureau</name>
<email>brice-puppet@daysofwonder.com</email>
</author>
<published>2009-05-30T21:25:08+00:00</published>
<link rel='alternate' type='text/html' href='https://fedorapeople.org/cgit/ricky/public_git/puppet.git/commit/?id=f3b40923605420f774dac298fb1708de180c0a81'/>
<id>f3b40923605420f774dac298fb1708de180c0a81</id>
<content type='text'>
Mongrel puppet code uses REMOTE_ADDR to set the ip address which will
be use to authenticate the client access.
Since mongrel is always used in a proxy mode with Puppet, REMOTE_ADDR
is always the address of the proxy (usually 127.0.0.1), which defeats
the purpose.
With this changeset, the mongrel code now uses the X-Forwarded-For
HTTP header value if it is passed over the REMOTE_ADDR.

Signed-off-by: Brice Figureau &lt;brice-puppet@daysofwonder.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Mongrel puppet code uses REMOTE_ADDR to set the ip address which will
be use to authenticate the client access.
Since mongrel is always used in a proxy mode with Puppet, REMOTE_ADDR
is always the address of the proxy (usually 127.0.0.1), which defeats
the purpose.
With this changeset, the mongrel code now uses the X-Forwarded-For
HTTP header value if it is passed over the REMOTE_ADDR.

Signed-off-by: Brice Figureau &lt;brice-puppet@daysofwonder.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fill REST request node with reverse lookup of IP address</title>
<updated>2009-04-23T18:52:03+00:00</updated>
<author>
<name>Brice Figureau</name>
<email>brice-puppet@daysofwonder.com</email>
</author>
<published>2009-04-19T14:37:46+00:00</published>
<link rel='alternate' type='text/html' href='https://fedorapeople.org/cgit/ricky/public_git/puppet.git/commit/?id=3ad79609183c5a4448595f85411179ac448d2ef9'/>
<id>3ad79609183c5a4448595f85411179ac448d2ef9</id>
<content type='text'>
Signed-off-by: Brice Figureau &lt;brice-puppet@daysofwonder.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Brice Figureau &lt;brice-puppet@daysofwonder.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fixing #1557 - Environments are now in REST URIs</title>
<updated>2009-03-20T07:27:08+00:00</updated>
<author>
<name>Luke Kanies</name>
<email>luke@madstop.com</email>
</author>
<published>2009-03-20T04:58:19+00:00</published>
<link rel='alternate' type='text/html' href='https://fedorapeople.org/cgit/ricky/public_git/puppet.git/commit/?id=0179e945a7d402c90a333c8207243882af362e06'/>
<id>0179e945a7d402c90a333c8207243882af362e06</id>
<content type='text'>
This commit includes multiple, related changes, all
in one commit because the whole thing was necessary to
reach a functional tree again:

* The URI starts with the environment, so:
  /production/certificate/foo
  /development/file_content/path/to/your/file
* All REST handling is done by a single instance mounted
  at / for webrick and Mongrel, rather than having individual
  instances mounted at, say, /certificate.
* All REST URI translation is done by an API module.  Currently
  only the 'v1' module exists with no support for additional modules,
  but it's well-separated and will be easy to expand as we need it.

Signed-off-by: Luke Kanies &lt;luke@madstop.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This commit includes multiple, related changes, all
in one commit because the whole thing was necessary to
reach a functional tree again:

* The URI starts with the environment, so:
  /production/certificate/foo
  /development/file_content/path/to/your/file
* All REST handling is done by a single instance mounted
  at / for webrick and Mongrel, rather than having individual
  instances mounted at, say, /certificate.
* All REST URI translation is done by an API module.  Currently
  only the 'v1' module exists with no support for additional modules,
  but it's well-separated and will be easy to expand as we need it.

Signed-off-by: Luke Kanies &lt;luke@madstop.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
