@@ -14,60 +14,12 @@ def perform
1414 zip_output_dir = Dir . mktmpdir
1515 zip_file = zip_resources ( resource_dir , zip_output_dir )
1616
17- package_guid , resource_timing = upload_package ( zip_file , package_blobstore_client )
18- puts ( "package upload timing fog: #{ resource_timing * 1000 } ms" )
19- package_guid_cli , resource_timing_cli = upload_package ( zip_file , package_blobstore_client_storage_cli )
20- puts ( "package upload timing storage-cli: #{ resource_timing_cli * 1000 } ms" )
21-
22- resource_timing = download_package ( package_guid , resource_dir , package_blobstore_client )
23- puts ( "package download timing fog: #{ resource_timing * 1000 } ms" )
24- resource_timing_cli = download_package ( package_guid_cli , resource_dir , package_blobstore_client_storage_cli )
25- puts ( "package download timing storage-cli: #{ resource_timing_cli * 1000 } ms" )
26-
27- bytes_read , resource_timing = download_buildpacks ( resource_dir , buildpack_blobstore_client )
28- bytes_read_cli , resource_timing_cli = download_buildpacks ( resource_dir , buildpack_blobstore_client_storage_cli )
29- puts ( "downloaded #{ Buildpack . count } buildpacks, total fog #{ bytes_read } bytes read" )
30- puts ( "downloaded #{ Buildpack . count } buildpacks, total storage-cli #{ bytes_read_cli } bytes read" )
31- puts ( "buildpack download timing fog: #{ resource_timing * 1000 } ms" )
32- puts ( "buildpack download timing storage-cli: #{ resource_timing_cli * 1000 } ms" )
33-
34- droplet_guid , resource_timing = upload_droplet ( zip_file , droplet_blobstore_client )
35- puts ( "droplet upload timing fog: #{ resource_timing * 1000 } ms" )
36- droplet_guid_cli , resource_timing_cli = upload_droplet ( zip_file , droplet_blobstore_client_storage_cli )
37- puts ( "droplet upload timing storage-cli: #{ resource_timing_cli * 1000 } ms" )
38-
39- resource_timing = download_droplet ( droplet_guid , resource_dir , droplet_blobstore_client )
40- puts ( "droplet download timing fog: #{ resource_timing * 1000 } ms" )
41- resource_timing_cli = download_droplet ( droplet_guid_cli , resource_dir , droplet_blobstore_client_storage_cli )
42- puts ( "droplet download timing storage-cli: #{ resource_timing_cli * 1000 } ms" )
43-
44- big_droplet_file = Tempfile . new ( 'big-droplet' , resource_dir )
45- big_droplet_file . write ( 'abc' * 1024 * 1024 * 100 )
46- big_droplet_file . flush
47- big_droplet_file . rewind
48- big_droplet_guid , resource_timing = upload_droplet ( big_droplet_file . path , droplet_blobstore_client )
49- big_droplet_file_cli = Tempfile . new ( 'big-droplet' , resource_dir )
50- big_droplet_file_cli . write ( 'abc' * 1024 * 1024 * 100 )
51- big_droplet_file_cli . flush
52- big_droplet_file_cli . rewind
53- big_droplet_guid_cli , resource_timing_cli = upload_droplet ( big_droplet_file_cli . path , droplet_blobstore_client_storage_cli )
54- puts ( "big droplet upload timing fog: #{ resource_timing * 1000 } ms" )
55- puts ( "big droplet upload timing storage-cli: #{ resource_timing_cli * 1000 } ms" )
56- resource_timing = download_droplet ( big_droplet_guid , resource_dir , droplet_blobstore_client )
57- puts ( "big droplet download timing fog: #{ resource_timing * 1000 } ms" )
58- resource_timing_cli = download_droplet ( big_droplet_guid_cli , resource_dir , droplet_blobstore_client_storage_cli )
59- puts ( "big droplet download timing storage-cli: #{ resource_timing_cli * 1000 } ms" )
17+ benchmark_packages ( zip_file , resource_dir )
18+ benchmark_buildpacks ( resource_dir )
19+ benchmark_droplets ( zip_file , resource_dir )
20+ benchmark_big_droplets ( resource_dir )
6021 ensure
61- FileUtils . remove_dir ( resource_dir , true )
62- FileUtils . remove_dir ( zip_output_dir , true )
63- big_droplet_file . close
64- big_droplet_file_cli . close
65- package_blobstore_client . delete ( package_guid ) if package_guid
66- droplet_blobstore_client . delete ( droplet_guid ) if droplet_guid
67- droplet_blobstore_client . delete ( big_droplet_guid ) if big_droplet_guid
68- package_blobstore_client_storage_cli . delete ( package_guid_cli ) if package_guid_cli
69- droplet_blobstore_client_storage_cli . delete ( droplet_guid_cli ) if droplet_guid_cli
70- droplet_blobstore_client_storage_cli . delete ( big_droplet_guid_cli ) if big_droplet_guid_cli
22+ cleanup ( resource_dir , zip_output_dir )
7123 end
7224
7325 def resource_match ( dir_path )
@@ -80,18 +32,18 @@ def resource_match(dir_path)
8032 end
8133 end
8234
83- def upload_package ( package_path , client = package_blobstore_client )
35+ def upload_package ( package_path , client = package_blobstore_client )
8436 copy_to_blobstore ( package_path , client )
8537 end
8638
87- def download_package ( package_guid , tmp_dir , client = package_blobstore_client )
39+ def download_package ( package_guid , tmp_dir , client = package_blobstore_client )
8840 tempfile = Tempfile . new ( 'package-download-benchmark' , tmp_dir )
8941 ::Benchmark . realtime do
9042 client . download_from_blobstore ( package_guid , tempfile . path )
9143 end
9244 end
9345
94- def download_buildpacks ( tmp_dir , client = buildpack_blobstore_client )
46+ def download_buildpacks ( tmp_dir , client = buildpack_blobstore_client )
9547 tempfile = Tempfile . new ( 'buildpack-download-benchmark' , tmp_dir )
9648 bytes_read = 0
9749
@@ -105,18 +57,100 @@ def download_buildpacks(tmp_dir, client = buildpack_blobstore_client)
10557 [ bytes_read , timing ]
10658 end
10759
108- def upload_droplet ( droplet_path , client = droplet_blobstore_client )
60+ def upload_droplet ( droplet_path , client = droplet_blobstore_client )
10961 copy_to_blobstore ( droplet_path , client )
11062 end
11163
112- def download_droplet ( droplet_guid , tmp_dir , client = droplet_blobstore_client )
64+ def download_droplet ( droplet_guid , tmp_dir , client = droplet_blobstore_client )
11365 tempfile = Tempfile . new ( 'droplet-download-benchmark' , tmp_dir )
11466
11567 ::Benchmark . realtime do
11668 client . download_from_blobstore ( droplet_guid , tempfile . path )
11769 end
11870 end
11971
72+ def benchmark_packages ( zip_file , resource_dir )
73+ fog_guid , fog_time = upload_package ( zip_file , package_blobstore_client )
74+ cli_guid , cli_time = upload_package ( zip_file , package_blobstore_client_storage_cli )
75+
76+ puts ( "package upload timing fog: #{ fog_time * 1000 } ms" )
77+ puts ( "package upload timing storage-cli: #{ cli_time * 1000 } ms" )
78+
79+ fog_dl = download_package ( fog_guid , resource_dir , package_blobstore_client )
80+ cli_dl = download_package ( cli_guid , resource_dir , package_blobstore_client_storage_cli )
81+
82+ puts ( "package download timing fog: #{ fog_dl * 1000 } ms" )
83+ puts ( "package download timing storage-cli: #{ cli_dl * 1000 } ms" )
84+
85+ remember_cleanup ( :package , fog_guid , cli_guid )
86+ end
87+
88+ def benchmark_buildpacks ( resource_dir )
89+ fog_bytes , fog_time = download_buildpacks ( resource_dir , buildpack_blobstore_client )
90+ cli_bytes , cli_time = download_buildpacks ( resource_dir , buildpack_blobstore_client_storage_cli )
91+
92+ puts ( "downloaded #{ Buildpack . count } buildpacks, total fog #{ fog_bytes } bytes read" )
93+ puts ( "downloaded #{ Buildpack . count } buildpacks, total storage-cli #{ cli_bytes } bytes read" )
94+ puts ( "buildpack download timing fog: #{ fog_time * 1000 } ms" )
95+ puts ( "buildpack download timing storage-cli: #{ cli_time * 1000 } ms" )
96+ end
97+
98+ def benchmark_droplets ( zip_file , resource_dir )
99+ fog_guid , fog_time = upload_droplet ( zip_file , droplet_blobstore_client )
100+ cli_guid , cli_time = upload_droplet ( zip_file , droplet_blobstore_client_storage_cli )
101+
102+ puts ( "droplet upload timing fog: #{ fog_time * 1000 } ms" )
103+ puts ( "droplet upload timing storage-cli: #{ cli_time * 1000 } ms" )
104+
105+ fog_dl = download_droplet ( fog_guid , resource_dir , droplet_blobstore_client )
106+ cli_dl = download_droplet ( cli_guid , resource_dir , droplet_blobstore_client_storage_cli )
107+
108+ puts ( "droplet download timing fog: #{ fog_dl * 1000 } ms" )
109+ puts ( "droplet download timing storage-cli: #{ cli_dl * 1000 } ms" )
110+
111+ remember_cleanup ( :droplet , fog_guid , cli_guid )
112+ end
113+
114+ def benchmark_big_droplets ( resource_dir )
115+ fog_guid , fog_time = upload_big_droplet ( resource_dir , droplet_blobstore_client )
116+ cli_guid , cli_time = upload_big_droplet ( resource_dir , droplet_blobstore_client_storage_cli )
117+
118+ puts ( "big droplet upload timing fog: #{ fog_time * 1000 } ms" )
119+ puts ( "big droplet upload timing storage-cli: #{ cli_time * 1000 } ms" )
120+
121+ fog_dl = download_droplet ( fog_guid , resource_dir , droplet_blobstore_client )
122+ cli_dl = download_droplet ( cli_guid , resource_dir , droplet_blobstore_client_storage_cli )
123+
124+ puts ( "big droplet download timing fog: #{ fog_dl * 1000 } ms" )
125+ puts ( "big droplet download timing storage-cli: #{ cli_dl * 1000 } ms" )
126+
127+ remember_cleanup ( :droplet , fog_guid , cli_guid )
128+ end
129+
130+ def remember_cleanup ( type , fog_guid , cli_guid )
131+ cleanup_items << [ type , fog_guid , cli_guid ]
132+ end
133+
134+ def cleanup ( resource_dir , zip_output_dir )
135+ FileUtils . remove_dir ( resource_dir , true )
136+ FileUtils . remove_dir ( zip_output_dir , true )
137+
138+ cleanup_items . each do |type , fog_guid , cli_guid |
139+ client_fog , client_cli =
140+ case type
141+ when :package then [ package_blobstore_client , package_blobstore_client_storage_cli ]
142+ when :droplet then [ droplet_blobstore_client , droplet_blobstore_client_storage_cli ]
143+ end
144+
145+ client_fog . delete ( fog_guid ) if fog_guid
146+ client_cli . delete ( cli_guid ) if cli_guid
147+ end
148+ end
149+
150+ def cleanup_items
151+ @cleanup_items ||= [ ]
152+ end
153+
120154 private
121155
122156 def generate_resources
@@ -153,23 +187,23 @@ def copy_to_blobstore(path, client)
153187 end
154188
155189 def buildpack_blobstore_client
156- @buildpack_blobstore_client_fog ||= CloudController ::DependencyLocator . instance . buildpack_blobstore ( blobstore_type : 'fog' )
190+ @buildpack_blobstore_client ||= CloudController ::DependencyLocator . instance . buildpack_blobstore ( blobstore_type : 'fog' )
157191 end
158192
159193 def buildpack_blobstore_client_storage_cli
160194 @buildpack_blobstore_client_storage_cli ||= CloudController ::DependencyLocator . instance . buildpack_blobstore ( blobstore_type : 'storage-cli' )
161195 end
162196
163197 def droplet_blobstore_client
164- @droplet_blobstore_client_fog ||= CloudController ::DependencyLocator . instance . droplet_blobstore ( blobstore_type : 'fog' )
198+ @droplet_blobstore_client ||= CloudController ::DependencyLocator . instance . droplet_blobstore ( blobstore_type : 'fog' )
165199 end
166200
167201 def droplet_blobstore_client_storage_cli
168202 @droplet_blobstore_client_storage_cli ||= CloudController ::DependencyLocator . instance . droplet_blobstore ( blobstore_type : 'storage-cli' )
169203 end
170204
171205 def package_blobstore_client
172- @package_blobstore_client_fog ||= CloudController ::DependencyLocator . instance . package_blobstore ( blobstore_type : 'fog' )
206+ @package_blobstore_client ||= CloudController ::DependencyLocator . instance . package_blobstore ( blobstore_type : 'fog' )
173207 end
174208
175209 def package_blobstore_client_storage_cli
0 commit comments