scenario.py revision 1448
1516N/A#!/usr/bin/python
565N/A#
565N/A# CDDL HEADER START
565N/A#
565N/A# The contents of this file are subject to the terms of the
565N/A# Common Development and Distribution License (the "License").
565N/A# You may not use this file except in compliance with the License.
565N/A#
565N/A# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
565N/A# or http://www.opensolaris.org/os/licensing.
565N/A# See the License for the specific language governing permissions
565N/A# and limitations under the License.
565N/A#
565N/A# When distributing Covered Code, include this CDDL HEADER in each
565N/A# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
565N/A# If applicable, add the following below this CDDL HEADER, with the
565N/A# fields enclosed by brackets "[]" replaced with your own identifying
565N/A# information: Portions Copyright [yyyy] [name of copyright owner]
565N/A#
565N/A# CDDL HEADER END
565N/A#
926N/A
926N/A#
3158N/A# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
926N/A# Use is subject to license terms.
565N/A#
2026N/A
3094N/Aimport gettext
1050N/Aimport locale
3234N/Aimport sys
2524N/A
3245N/Aimport depot
3234N/Aimport stats
926N/Aimport pkg.misc as misc
2339N/A
2339N/Aclass Scenario(object):
2339N/A """A Scenario has a list of depot.RepositoryURIs."""
926N/A
926N/A def __init__(self, title):
926N/A self.title = title
838N/A self.repo_uris = []
565N/A self.origin_uris = []
2034N/A
2034N/A def get_repo_uris(self):
2034N/A return self.repo_uris
1540N/A
2034N/A def add_repo_uri(self, label, speed, cspeed,
2034N/A error_rate=depot.ERROR_FREE, error_type=depot.ERROR_T_NET,
2200N/A speed_distribution=depot.MODAL_SINGLE):
2034N/A
2034N/A r = depot.RepositoryURI(label, speed, cspeed,
2034N/A error_rate=error_rate, error_type=error_type,
565N/A modality=speed_distribution)
2339N/A
2339N/A self.repo_uris.append(r)
2339N/A
2339N/A def add_origin_uri(self, label, speed, cspeed,
2339N/A error_rate=depot.ERROR_FREE, error_type=depot.ERROR_T_NET,
2339N/A speed_distribution=depot.MODAL_SINGLE):
2524N/A
2524N/A r = depot.RepositoryURI(label, speed, cspeed,
2524N/A error_rate=error_rate, error_type=error_type,
2524N/A modality=speed_distribution)
2524N/A
2524N/A self.origin_uris.append(r)
2524N/A
2524N/A def get_megabytes(self):
2524N/A return self.__total_mb
2524N/A
2524N/A def set_megabytes(self, mb):
2524N/A self.__total_mb = mb
2524N/A
2524N/A def run(self):
2524N/A print "SCENARIO: %s" % self.title
2524N/A
2524N/A total = self.__total_mb * 1024 * 1024
2524N/A
2524N/A rc = stats.RepoChooser()
2524N/A urilist = self.repo_uris[:]
2524N/A urilist.extend(self.origin_uris)
2524N/A
2524N/A while total > 0:
2524N/A s = rc.get_repostats(urilist, self.origin_uris)
2524N/A
2524N/A n = len(s)
2524N/A m = rc.get_num_visited(urilist)
2524N/A
2524N/A if m < n:
2524N/A c = 10
2524N/A else:
2524N/A c = 100
2524N/A
2524N/A print "bytes left %d; retrieving %d files" % (total, c)
2524N/A rc.dump()
2524N/A
2524N/A # get 100 files
2524N/A r = s[0]
2524N/A for n in range(c):
2524N/A req = r[1].request(rc)
2524N/A total -= req[1]
2524N/A
2524N/A rc.dump()
2524N/A
2524N/Amisc.setlocale(locale.LC_ALL)
2524N/Agettext.install("pkg", "/usr/share/locale")
2524N/A
2524N/Atotal_mb = 1000
2524N/A
1710N/A# Scenario 1. A single origin.
1710N/A
1710N/Asingle = Scenario("single origin")
1710N/A
1710N/Asingle.add_origin_uri("origin", depot.SPEED_FAST, depot.CSPEED_LAN)
1710N/A
1710N/Asingle.set_megabytes(total_mb)
1710N/A
1710N/Asingle.run()
1710N/A
1710N/A# Scenario 2a. An origin and mirror, mirror faster.
1710N/A
1710N/Aone_mirror = Scenario("origin and a faster mirror")
1710N/A
1710N/Aone_mirror.add_origin_uri("origin", depot.SPEED_FAST, depot.CSPEED_NEARBY)
3158N/Aone_mirror.add_repo_uri("mirror", depot.SPEED_VERY_FAST, depot.CSPEED_LAN)
3158N/A
3158N/Aone_mirror.set_megabytes(total_mb)
1710N/A
1710N/Aone_mirror.run()
1710N/A
3158N/A# Scenario 2b. An origin and mirror, origin faster.
3158N/A
1710N/Aone_mirror = Scenario("origin and a slower mirror")
1710N/A
1710N/Aone_mirror.add_origin_uri("origin", depot.SPEED_VERY_FAST, depot.CSPEED_LAN)
3158N/Aone_mirror.add_repo_uri("mirror", depot.SPEED_FAST, depot.CSPEED_NEARBY)
3158N/A
1710N/Aone_mirror.set_megabytes(total_mb)
1710N/A
1710N/Aone_mirror.run()
565N/A
565N/A# Scenario 2c. An origin and mirror, mirror faster, but decaying.
565N/A
565N/Aone_mirror = Scenario("origin and a faster, but decaying, mirror")
565N/A
565N/Aone_mirror.add_origin_uri("origin", depot.SPEED_FAST, depot.CSPEED_NEARBY)
565N/Aone_mirror.add_repo_uri("mirror", depot.SPEED_VERY_FAST, depot.CSPEED_LAN,
565N/A speed_distribution=depot.MODAL_DECAY)
2976N/A
3158N/Aone_mirror.set_megabytes(total_mb)
2976N/A
2144N/Aone_mirror.run()
2144N/A
2144N/A# Scenario 2d. An origin and mirror, mirror slower, but increasing.
2144N/A
2144N/Aone_mirror = Scenario("origin and a slower, but increasing, mirror")
2144N/A
2144N/Aone_mirror.add_origin_uri("origin", depot.SPEED_MEDIUM, depot.CSPEED_MEDIUM)
2144N/Aone_mirror.add_repo_uri("mirror", depot.SPEED_FAST, depot.CSPEED_LAN,
2144N/A speed_distribution=depot.MODAL_INCREASING)
2144N/A
3158N/Aone_mirror.set_megabytes(total_mb)
2144N/A
3158N/Aone_mirror.run()
2144N/A
2407N/A# Scenario 2e. An origin and mirror, mirror encountering decyable transport
2407N/A# errors.
2407N/A
2407N/Aone_mirror = Scenario("origin and a faster mirror. Mirror gets decayable errors")
2407N/A
2407N/Aone_mirror.add_origin_uri("origin", depot.SPEED_FAST, depot.CSPEED_LAN)
2407N/Aone_mirror.add_repo_uri("mirror", depot.SPEED_SLIGHTLY_FASTER, depot.CSPEED_LAN,
2407N/A error_rate=depot.ERROR_LOW, error_type=depot.ERROR_T_DECAYABLE)
2407N/A
3158N/A
3158N/Aone_mirror.set_megabytes(total_mb)
3158N/A
3158N/Aone_mirror.run()
3158N/A
3158N/A# Scenario 3a. An origin and two mirrors, one decaying.
2875N/A
2144N/Aone_mirror = Scenario("origin and two mirrors")
565N/A
565N/Aone_mirror.add_origin_uri("origin", depot.SPEED_FAST, depot.CSPEED_NEARBY)
565N/Aone_mirror.add_repo_uri("mirror", depot.SPEED_SLIGHTLY_FASTER,
565N/A depot.CSPEED_LAN)
565N/Aone_mirror.add_repo_uri("mirror2", depot.SPEED_VERY_FAST, depot.CSPEED_NEARBY,
565N/A speed_distribution=depot.MODAL_DECAY)
2144N/A
565N/Aone_mirror.set_megabytes(total_mb)
565N/A
565N/Aone_mirror.run()
565N/A
565N/A# Scenario 3b. An origin and five mirrors.
1618N/A
1618N/Aone_mirror = Scenario("origin and five mirrors")
1618N/A
1618N/Aone_mirror.add_origin_uri("origin", depot.SPEED_MODERATE, depot.CSPEED_MEDIUM)
1618N/Aone_mirror.add_repo_uri("mirror", depot.SPEED_SLIGHTLY_FASTER, depot.CSPEED_LAN)
1618N/Aone_mirror.add_repo_uri("mirror2", depot.SPEED_MEDIUM, depot.CSPEED_SLOW)
1755N/Aone_mirror.add_repo_uri("mirror3", depot.SPEED_SLOW, depot.CSPEED_SLOW)
1755N/Aone_mirror.add_repo_uri("mirror4", depot.SPEED_VERY_SLOW,
1755N/A depot.CSPEED_VERY_SLOW)
1755N/Aone_mirror.add_repo_uri("mirror5", depot.SPEED_SLOW, depot.CSPEED_FARAWAY)
1755N/A
1755N/Aone_mirror.set_megabytes(total_mb)
1755N/A
1755N/Aone_mirror.run()
1755N/A