google-apis-core 0.9.4 → 0.10.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0c4ade0959657cd3bff8601534b1f50e10335061306f94f19a1a5f0d31243378
4
- data.tar.gz: 97c094fd9c168d9e1bad64607dd4acc9ab3c9e748018b7173246bd76a52505dc
3
+ metadata.gz: 330bf699ecc5c12098da65f7b89e276d3670fb6cca1270960820d5c369be806d
4
+ data.tar.gz: 843c6278d958141541fb12176f3eec28d0a0c6e09fbefd2d27a717ef59859bba
5
5
  SHA512:
6
- metadata.gz: 38718b83507b48984c0808da6c550092a7d4988574595b8eb769f3303352b1b51af520e323179836289f3c5524f780ea393df25c26f15555d636786788255336
7
- data.tar.gz: 967b026074f0a0d016621f78649e41b3d47c04fd7f2da8a14564897d21bfe9cc25aa207fe6612a00a97c044d31a9505018140ca4cf94bd4fc45d1709d0e0d38d
6
+ metadata.gz: 41ec08bdf72e469182007ba51c0175c45705d5bc45d651bafe14635f31f4ccbba4d9ba5ff10774e1170144d3196b88ad493d324b7450c009685ec80770e43f28
7
+ data.tar.gz: a2f3ceec0e14b0d6af9bfcbf47627afb30f39764713f6e8d187413e54dab46446416911257b6f40a2baf1fa91471ef30f7e14dfe0b2b111057bb736bc7e00119
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Release History
2
2
 
3
+ ### 0.10.0 (2023-01-26)
4
+
5
+ #### Features
6
+
7
+ * Allow chunk size zero for storage resumable upload ([#13283](https://github.com/googleapis/google-api-ruby-client/issues/13283))
8
+ * Make chunk size configurable ([#13216](https://github.com/googleapis/google-api-ruby-client/issues/13216))
9
+
10
+ ### 0.9.5 (2023-01-12)
11
+
12
+ #### Bug Fixes
13
+
14
+ * Improve upload performance for Cloud Storage ([#13213](https://github.com/googleapis/google-api-ruby-client/issues/13213))
15
+
3
16
  ### 0.9.4 (2023-01-07)
4
17
 
5
18
  #### Bug Fixes
@@ -15,6 +15,7 @@
15
15
  require 'google/apis/core/http_command'
16
16
  require 'google/apis/core/api_command'
17
17
  require 'google/apis/errors'
18
+ require 'stringio'
18
19
  require 'tempfile'
19
20
  require 'mini_mime'
20
21
 
@@ -31,7 +32,6 @@ module Google
31
32
  CONTENT_RANGE_HEADER = "Content-Range"
32
33
  RESUMABLE = "resumable"
33
34
  OK_STATUS = 200
34
- CHUNK_SIZE = 8 * 1024 * 1024 # 8 MB
35
35
 
36
36
  # File name or IO containing the content to upload
37
37
  # @return [String, File, #read]
@@ -45,6 +45,10 @@ module Google
45
45
  # @return [Google::Apis::Core::UploadIO]
46
46
  attr_accessor :upload_io
47
47
 
48
+ # Upload chunk size
49
+ # @return [Integer]
50
+ attr_accessor :upload_chunk_size
51
+
48
52
  # Ensure the content is readable and wrapped in an IO instance.
49
53
  #
50
54
  # @return [void]
@@ -91,6 +95,7 @@ module Google
91
95
  def execute(client)
92
96
  prepare!
93
97
  opencensus_begin_span
98
+ @upload_chunk_size = options.upload_chunk_size
94
99
 
95
100
  do_retry :initiate_resumable_upload, client
96
101
  while @upload_incomplete
@@ -136,12 +141,12 @@ module Google
136
141
  logger.debug { sprintf('Sending upload command to %s', @upload_url) }
137
142
 
138
143
  remaining_content_size = upload_io.size - @offset
139
- current_chunk_size = remaining_content_size < CHUNK_SIZE ? remaining_content_size : CHUNK_SIZE
144
+ current_chunk_size = get_current_chunk_size remaining_content_size
140
145
 
141
146
  request_header = header.dup
142
147
  request_header[CONTENT_RANGE_HEADER] = get_content_range_header current_chunk_size
143
148
  request_header[CONTENT_LENGTH_HEADER] = current_chunk_size
144
- chunk_body = upload_io.read(current_chunk_size)
149
+ chunk_body = StringIO.new(upload_io.read(current_chunk_size))
145
150
 
146
151
  response = client.put(@upload_url, body: chunk_body, header: request_header, follow_redirect: true)
147
152
 
@@ -176,6 +181,15 @@ module Google
176
181
  upload_source.is_a?(IO) || upload_source.is_a?(StringIO) || upload_source.is_a?(Tempfile)
177
182
  end
178
183
 
184
+ def get_current_chunk_size remaining_content_size
185
+ # Disable chunking if the chunk size is set to zero.
186
+ if @upload_chunk_size == 0
187
+ remaining_content_size
188
+ else
189
+ remaining_content_size < @upload_chunk_size ? remaining_content_size : @upload_chunk_size
190
+ end
191
+ end
192
+
179
193
  def get_content_range_header current_chunk_size
180
194
  if upload_io.size == 0
181
195
  numerator = "*"
@@ -16,7 +16,7 @@ module Google
16
16
  module Apis
17
17
  module Core
18
18
  # Core version
19
- VERSION = "0.9.4".freeze
19
+ VERSION = "0.10.0".freeze
20
20
  end
21
21
  end
22
22
  end
@@ -40,7 +40,8 @@ module Google
40
40
  :use_opencensus,
41
41
  :quota_project,
42
42
  :query,
43
- :add_invocation_id_header)
43
+ :add_invocation_id_header,
44
+ :upload_chunk_size)
44
45
 
45
46
  # General client options
46
47
  class ClientOptions
@@ -98,6 +99,8 @@ module Google
98
99
  # @return [Hash<String,String>] Additional HTTP URL query parameters to include in requests.
99
100
  # @!attribute [rw] add_invocation_id_header
100
101
  # @return [Boolean] True if the header gccl-invocation-id need to be set
102
+ # @!attribute [rw] upload_chunk_size
103
+ # @return [Integer] The chunk size of storage upload. The default value is 100 MB.
101
104
 
102
105
  # Get the default options
103
106
  # @return [Google::Apis::RequestOptions]
@@ -133,5 +136,6 @@ module Google
133
136
  RequestOptions.default.use_opencensus = true
134
137
  RequestOptions.default.quota_project = nil
135
138
  RequestOptions.default.add_invocation_id_header = false
139
+ RequestOptions.default.upload_chunk_size = 100 * 1024 * 1024 # 100 MB
136
140
  end
137
141
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-apis-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.4
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Google LLC
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-09 00:00:00.000000000 Z
11
+ date: 2023-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: representable
@@ -186,7 +186,7 @@ licenses:
186
186
  metadata:
187
187
  bug_tracker_uri: https://github.com/googleapis/google-api-ruby-client/issues
188
188
  changelog_uri: https://github.com/googleapis/google-api-ruby-client/tree/main/google-apis-core/CHANGELOG.md
189
- documentation_uri: https://googleapis.dev/ruby/google-apis-core/v0.9.4
189
+ documentation_uri: https://googleapis.dev/ruby/google-apis-core/v0.10.0
190
190
  source_code_uri: https://github.com/googleapis/google-api-ruby-client/tree/main/google-apis-core
191
191
  post_install_message:
192
192
  rdoc_options: []