<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ruby.git/lib/bundler/compact_index_client, branch v3_4_1</title>
<subtitle>The Ruby Programming Language</subtitle>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/'/>
<entry>
<title>[rubygems/rubygems] Revert to splitting parser due to performance regression</title>
<updated>2024-06-20T06:18:56+00:00</updated>
<author>
<name>Martin Emde</name>
<email>me@martinemde.com</email>
</author>
<published>2024-06-11T19:34:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=af304ad9529b26d95507071ac1711440b7e4191f'/>
<id>af304ad9529b26d95507071ac1711440b7e4191f</id>
<content type='text'>
* The string search parser was more memory efficient but
  in some cases, much slower. Reverting until a better
  solution is found.
* Handle the situation where the line might be blank (Artifactory bug)

https://github.com/rubygems/rubygems/commit/222d38737d
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* The string search parser was more memory efficient but
  in some cases, much slower. Reverting until a better
  solution is found.
* Handle the situation where the line might be blank (Artifactory bug)

https://github.com/rubygems/rubygems/commit/222d38737d
</pre>
</div>
</content>
</entry>
<entry>
<title>[rubygems/rubygems] String search based parsing of compact index versions</title>
<updated>2024-05-31T20:20:03+00:00</updated>
<author>
<name>Martin Emde</name>
<email>me@martinemde.com</email>
</author>
<published>2024-05-31T04:37:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=bc40d0609177cd60ba1bc4fd915e03e917c0b79c'/>
<id>bc40d0609177cd60ba1bc4fd915e03e917c0b79c</id>
<content type='text'>
This significantly reduces memory usage.

https://github.com/rubygems/rubygems/commit/8a76506c90
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This significantly reduces memory usage.

https://github.com/rubygems/rubygems/commit/8a76506c90
</pre>
</div>
</content>
</entry>
<entry>
<title>[rubygems/rubygems] Reorganize and refactor CompactIndexClient</title>
<updated>2024-05-25T17:47:07+00:00</updated>
<author>
<name>Martin Emde</name>
<email>me@martinemde.com</email>
</author>
<published>2024-05-22T04:51:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=6b0afbb111716e7b1fdc711d8afd26c723a9bb0c'/>
<id>6b0afbb111716e7b1fdc711d8afd26c723a9bb0c</id>
<content type='text'>
https://github.com/rubygems/rubygems/commit/71bcf354f5
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
https://github.com/rubygems/rubygems/commit/71bcf354f5
</pre>
</div>
</content>
</entry>
<entry>
<title>[rubygems/rubygems] update cache checksums to decrease string allocations</title>
<updated>2024-05-24T21:04:21+00:00</updated>
<author>
<name>Jacklyn Ma</name>
<email>29336370+jacklynhma@users.noreply.github.com</email>
</author>
<published>2024-05-08T16:45:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=4d0c5486a2773f0474a51033d4f685e5c766ec30'/>
<id>4d0c5486a2773f0474a51033d4f685e5c766ec30</id>
<content type='text'>
https://github.com/rubygems/rubygems/commit/85371a961a
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
https://github.com/rubygems/rubygems/commit/85371a961a
</pre>
</div>
</content>
</entry>
<entry>
<title>[rubygems/rubygems] Remove MD5 ETag generation from compact index</title>
<updated>2024-05-23T22:57:26+00:00</updated>
<author>
<name>Martin Emde</name>
<email>me@martinemde.com</email>
</author>
<published>2024-05-21T23:19:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=76e31d9aa93ce624a8f74db57af488c74017b7f3'/>
<id>76e31d9aa93ce624a8f74db57af488c74017b7f3</id>
<content type='text'>
This was an offramp for generated etags to allow existing caches
to be served until people could upgrade. It has been about 6 months
since the transitional version was released, so we can remove this
transitional code now.

https://github.com/rubygems/rubygems/commit/4ec8cfe611
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This was an offramp for generated etags to allow existing caches
to be served until people could upgrade. It has been about 6 months
since the transitional version was released, so we can remove this
transitional code now.

https://github.com/rubygems/rubygems/commit/4ec8cfe611
</pre>
</div>
</content>
</entry>
<entry>
<title>[rubygems/rubygems] Quote Etag in `If-None-Match` header of compact index request</title>
<updated>2024-01-05T02:06:58+00:00</updated>
<author>
<name>Martin Emde</name>
<email>martin.emde@gmail.com</email>
</author>
<published>2024-01-04T00:00:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=098d97e96d1519154c2a845db558b104abe3ab7e'/>
<id>098d97e96d1519154c2a845db558b104abe3ab7e</id>
<content type='text'>
https://github.com/rubygems/rubygems/commit/d26bcd7551
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
https://github.com/rubygems/rubygems/commit/d26bcd7551
</pre>
</div>
</content>
</entry>
<entry>
<title>[rubygems/rubygems] Use vendored net-http in Bundler</title>
<updated>2023-12-13T03:16:55+00:00</updated>
<author>
<name>David Rodríguez</name>
<email>deivid.rodriguez@riseup.net</email>
</author>
<published>2023-01-29T20:28:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=90317472e87692fff1c864d129d60130dc3bab2c'/>
<id>90317472e87692fff1c864d129d60130dc3bab2c</id>
<content type='text'>
https://github.com/rubygems/rubygems/commit/0d758e8926
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
https://github.com/rubygems/rubygems/commit/0d758e8926
</pre>
</div>
</content>
</entry>
<entry>
<title>[rubygems/rubygems] Prefer String#split with block in Bundler::CompactIndexClient::Cache#versions</title>
<updated>2023-12-05T05:28:39+00:00</updated>
<author>
<name>Mau Magnaguagno</name>
<email>maumagnaguagno@gmail.com</email>
</author>
<published>2023-11-30T03:24:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=5f789350dceef80494e4e3e3e1ce95f886657845'/>
<id>5f789350dceef80494e4e3e3e1ce95f886657845</id>
<content type='text'>
String#split supports a block since Ruby 2.6, avoiding intermediate array.

https://github.com/rubygems/rubygems/commit/4e864a8f2e
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
String#split supports a block since Ruby 2.6, avoiding intermediate array.

https://github.com/rubygems/rubygems/commit/4e864a8f2e
</pre>
</div>
</content>
</entry>
<entry>
<title>Opaque Etags for compact index requests</title>
<updated>2023-11-27T06:04:40+00:00</updated>
<author>
<name>Josef Šimánek</name>
<email>josef.simanek@gmail.com</email>
</author>
<published>2023-06-27T00:36:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=71a8daecd9ad10ba8aa0d66131e326722f1d78ad'/>
<id>71a8daecd9ad10ba8aa0d66131e326722f1d78ad</id>
<content type='text'>
This changes the CompactIndexClient to store etags received from the
compact index in separate files rather than relying on the MD5 checksum
of the file as the etag.

Smoothes the upgrade from md5 etags to opaque by generating them when no
etag file exists. This should reduce the initial impact of changing the
caching behavior by reducing cache misses when the MD5 etag is the same.

Eventually, the MD5 behavior should be retired and the etag should be
considered completely opaque with no assumption that MD5 would match.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This changes the CompactIndexClient to store etags received from the
compact index in separate files rather than relying on the MD5 checksum
of the file as the etag.

Smoothes the upgrade from md5 etags to opaque by generating them when no
etag file exists. This should reduce the initial impact of changing the
caching behavior by reducing cache misses when the MD5 etag is the same.

Eventually, the MD5 behavior should be retired and the etag should be
considered completely opaque with no assumption that MD5 would match.
</pre>
</div>
</content>
</entry>
<entry>
<title>[rubygems/rubygems] Reduce allocations when parsing compact index</title>
<updated>2023-10-08T04:17:15+00:00</updated>
<author>
<name>Samuel Giddins</name>
<email>segiddins@segiddins.me</email>
</author>
<published>2023-09-18T20:56:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=2b6228be48dc656c3e7a95919622e4b8561324cf'/>
<id>2b6228be48dc656c3e7a95919622e4b8561324cf</id>
<content type='text'>
This still allocates a ton (a string for each line, plus a bunch of
splits into arrays), but it helps a bit when Bundler has to go through
dependency resolution.

```
==&gt; memprof.after.txt &lt;==
Total allocated: 194.14 MB (2317172 objects)
Total retained:  60.81 MB (593164 objects)

==&gt; memprof.before.txt &lt;==
Total allocated: 211.97 MB (2404890 objects)
Total retained:  62.85 MB (640342 objects)
```

https://github.com/rubygems/rubygems/commit/c68b41b0e5
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This still allocates a ton (a string for each line, plus a bunch of
splits into arrays), but it helps a bit when Bundler has to go through
dependency resolution.

```
==&gt; memprof.after.txt &lt;==
Total allocated: 194.14 MB (2317172 objects)
Total retained:  60.81 MB (593164 objects)

==&gt; memprof.before.txt &lt;==
Total allocated: 211.97 MB (2404890 objects)
Total retained:  62.85 MB (640342 objects)
```

https://github.com/rubygems/rubygems/commit/c68b41b0e5
</pre>
</div>
</content>
</entry>
</feed>
