@@ -194,6 +194,11 @@ def get_image_layer(image_id, headers):
194194@app .route ('/v1/images/<image_id>/layer' , methods = ['PUT' ])
195195@toolkit .requires_auth
196196def 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 )
197202 try :
198203 json_data = store .get_content (store .image_json_path (image_id ))
199204 except exceptions .FileNotFoundError :
@@ -210,39 +215,11 @@ def put_image_layer(image_id):
210215 # compute checksums
211216 csums = []
212217 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 )
216218 h , sum_hndlr = checksums .simple_checksum_handler (json_data )
217219 sr .add_handler (sum_hndlr )
218220 store .stream_write (layer_path , sr )
219221 csums .append ('sha256:{0}' .format (h .hexdigest ()))
220222
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-
246223 # We store the computed checksums for a later check
247224 save_checksums (image_id , csums )
248225 return toolkit .response ()
@@ -251,10 +228,12 @@ def put_image_layer(image_id):
251228@app .route ('/v1/images/<image_id>/checksum' , methods = ['PUT' ])
252229@toolkit .requires_auth
253230def 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 )
258237 if not checksum :
259238 return toolkit .api_error ('Missing Image\' s checksum' )
260239 if not store .exists (store .image_json_path (image_id )):
0 commit comments