Skip to content

Commit 3fcfcae

Browse files
committed
restructure perform method
1 parent 0e44b9d commit 3fcfcae

File tree

1 file changed

+95
-61
lines changed

1 file changed

+95
-61
lines changed

lib/cloud_controller/benchmark/blobstore.rb

Lines changed: 95 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)