verm-client 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/verm.rb +1 -0
- data/lib/verm/client.rb +1 -3
- data/lib/verm/http_no_delay.rb +20 -0
- data/lib/verm/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7842cddb4253491aa3367dea8adc82f9e1f72af6
|
4
|
+
data.tar.gz: 00e2dd3ae0cc1ec10fc7078e67a3e19523fd3f1b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b55bac23d4ca297dad0cf96bacb229c97f1d34664dee5dc7c905b2735a4d36ddfe1d1e2123cbaaa3ef82b003ee0104af8aeceaf42e566338c25d17325804747f
|
7
|
+
data.tar.gz: 890a5df057851e3f0e747dca3632fd3aa5a0e3d49d745ad013de7f45dc43737fd4c8304a526a05d87ab37569f44f371f2320d3497c02c0fe74754b204e0cd7e3
|
data/lib/verm.rb
CHANGED
data/lib/verm/client.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
|
3
1
|
module Verm
|
4
2
|
class Client
|
5
3
|
def self.incompressible_types
|
@@ -8,7 +6,7 @@ module Verm
|
|
8
6
|
|
9
7
|
attr_reader :http_client
|
10
8
|
|
11
|
-
def initialize(hostname, port: 3404, timeout: 15, http_class: Net::
|
9
|
+
def initialize(hostname, port: 3404, timeout: 15, http_class: Net::HTTPNoDelay)
|
12
10
|
@http_client = http_class.new(hostname, port)
|
13
11
|
@http_client.open_timeout = timeout
|
14
12
|
@http_client.read_timeout = timeout
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
# This class can be used as a workaround for Net::HTTP's lack of TCP_CORK/TCP_NOPUSH in sending
|
4
|
+
# requests. When using a Linux client and a Linux server we observe awful latency POSTing files on
|
5
|
+
# reused HTTP connections because Post class writes one block of data for the header and separate
|
6
|
+
# block(s) for the body. If the body is not sufficiently large to fill another packet itself, the
|
7
|
+
# Nagle algorithm will have Linux (by default) wait for the ACK from the first packet to be received
|
8
|
+
# back; unfortunately, this won't be sent immediately because of the Delayed ACK algorithm. As a
|
9
|
+
# result we typically observe 40ms of extra latency when POSTing small files. This class disables
|
10
|
+
# the Nagle algorithm to work around that. It's not an ideal fix because we would rather combine
|
11
|
+
# the write for the header with the write for the first N bytes of the body, but it should give
|
12
|
+
# performance better than the standard Ruby implementation in all cases because Nagle is of no
|
13
|
+
# benefit when queuing large blocks only to the OS (as both the streaming and non-streaming
|
14
|
+
# variants of the body write calls will do), and the way that Ruby is writing the header separately
|
15
|
+
# to the body means there will always be at least two packets anyway.
|
16
|
+
class Net::HTTPNoDelay < Net::HTTP
|
17
|
+
def on_connect()
|
18
|
+
@socket.io.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
|
19
|
+
end
|
20
|
+
end
|
data/lib/verm/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: verm-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Will Bryant
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-08 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
Adds one-line methods for storing files in Verm and retrieving them again.
|
@@ -23,6 +23,7 @@ files:
|
|
23
23
|
- Rakefile
|
24
24
|
- lib/verm.rb
|
25
25
|
- lib/verm/client.rb
|
26
|
+
- lib/verm/http_no_delay.rb
|
26
27
|
- lib/verm/version.rb
|
27
28
|
- test/fixtures/binary_file
|
28
29
|
- test/fixtures/binary_file.gz
|