@@ -194,6 +194,11 @@ def get_image_layer(image_id, headers):
194
194
@app .route ('/v1/images/<image_id>/layer' , methods = ['PUT' ])
195
195
@toolkit .requires_auth
196
196
def put_image_layer (image_id ):
197
+ client_version = toolkit .docker_client_version ()
198
+ if client_version and client_version < (0 , 10 ):
199
+ return toolkit .api_error (
200
+ 'This endpoint does not support Docker daemons older than 0.10' ,
201
+ 412 )
197
202
try :
198
203
json_data = store .get_content (store .image_json_path (image_id ))
199
204
except exceptions .FileNotFoundError :
@@ -210,39 +215,11 @@ def put_image_layer(image_id):
210
215
# compute checksums
211
216
csums = []
212
217
sr = toolkit .SocketReader (input_stream )
213
- if toolkit .DockerVersion () < '0.10' :
214
- tmp , store_hndlr = storage .temp_store_handler ()
215
- sr .add_handler (store_hndlr )
216
218
h , sum_hndlr = checksums .simple_checksum_handler (json_data )
217
219
sr .add_handler (sum_hndlr )
218
220
store .stream_write (layer_path , sr )
219
221
csums .append ('sha256:{0}' .format (h .hexdigest ()))
220
222
221
- if toolkit .DockerVersion () < '0.10' :
222
- # NOTE(samalba): After docker 0.10, the tarsum is not used to ensure
223
- # the image has been transfered correctly.
224
- logger .debug ('put_image_layer: Tarsum is enabled' )
225
- tar = None
226
- tarsum = checksums .TarSum (json_data )
227
- try :
228
- tmp .seek (0 )
229
- tar = tarfile .open (mode = 'r|*' , fileobj = tmp )
230
- tarfilesinfo = layers .TarFilesInfo ()
231
- for member in tar :
232
- tarsum .append (member , tar )
233
- tarfilesinfo .append (member )
234
- layers .set_image_files_cache (image_id , tarfilesinfo .json ())
235
- except (IOError , tarfile .TarError ) as e :
236
- logger .debug ('put_image_layer: Error when reading Tar stream '
237
- 'tarsum. Disabling TarSum, TarFilesInfo. '
238
- 'Error: {0}' .format (e ))
239
- finally :
240
- if tar :
241
- tar .close ()
242
- # All data have been consumed from the tempfile
243
- csums .append (tarsum .compute ())
244
- tmp .close ()
245
-
246
223
# We store the computed checksums for a later check
247
224
save_checksums (image_id , csums )
248
225
return toolkit .response ()
@@ -251,10 +228,12 @@ def put_image_layer(image_id):
251
228
@app .route ('/v1/images/<image_id>/checksum' , methods = ['PUT' ])
252
229
@toolkit .requires_auth
253
230
def put_image_checksum (image_id ):
254
- if toolkit .DockerVersion () < '0.10' :
255
- checksum = flask .request .headers .get ('X-Docker-Checksum' )
256
- else :
257
- checksum = flask .request .headers .get ('X-Docker-Checksum-Payload' )
231
+ checksum = flask .request .headers .get ('X-Docker-Checksum-Payload' )
232
+ if checksum is None :
233
+ return toolkit .api_error (
234
+ ('X-Docker-Checksum-Payload not set. If you are using the Docker '
235
+ 'daemon, you should upgrade to version 0.10 or later' ),
236
+ 412 )
258
237
if not checksum :
259
238
return toolkit .api_error ('Missing Image\' s checksum' )
260
239
if not store .exists (store .image_json_path (image_id )):
0 commit comments