Skip to content
This repository has been archived by the owner on Oct 3, 2023. It is now read-only.

Assets download fix for running from profiles #32

Merged
merged 7 commits into from
May 11, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 21 additions & 6 deletions servicemanager/service/smplayservice.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#!/usr/bin/env python
import glob

import os
import re
import shutil
import zipfile
import stat
Expand All @@ -24,12 +26,6 @@ class SmPlayServiceStarter(SmJvmServiceStarter):

PLAY_PROCESS_STARTUP_TIMEOUT_SECONDS = 120

def __init__(self, context, service_name, run_from, port, classifier, service_mapping_ports, version, proxy, append_args):
SmMicroServiceStarter.__init__(self, context, service_name, "play", run_from, port, classifier, service_mapping_ports, version, proxy, append_args)

if not self.port:
self.port = self.service_data["defaultPort"]

def _build_extra_params(self):
extra_params = ["-Dhttp.port=%d" % self.port]
extra_params += self.process_arguments()
Expand Down Expand Up @@ -70,6 +66,12 @@ def _build_extra_params(self):

return extra_params

def __init__(self, context, service_name, run_from, port, classifier, service_mapping_ports, version, proxy, append_args):
SmMicroServiceStarter.__init__(self, context, service_name, "play", run_from, port, classifier, service_mapping_ports, version, proxy, append_args)

if not self.port:
self.port = self.service_data["defaultPort"]

def supports_append_args(self):
return True

Expand All @@ -95,6 +97,10 @@ def start_from_binary(self):
parent, _ = os.path.split(unzip_dir)
force_pushdir(parent)

if "frontend" in self.service_data and self.service_data["frontend"]:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could we rename this to be "is_frontend", you can also do "if self.service_data.get("is_frontend", False):"

assets_versions = self._get_assets_version(unzip_dir)
self.context.assets_versions_to_start(assets_versions)

cmd_with_params = self.get_start_command("BINARY")
if os.path.exists(cmd_with_params[0]):
os.chmod(cmd_with_params[0], stat.S_IRWXU)
Expand Down Expand Up @@ -156,6 +162,15 @@ def start_from_sources(self):
print b.fail + "ERROR: could not start '" + self.service_name + "' " + b.endc
return process.pid # Note: This is the parent pid

def _get_assets_version(self, unzip_dir):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have unit tests that test happy and sad paths for this function?

assets_versions = []
for conf_file in glob.glob(unzip_dir + "/conf/*.conf"):
with file(conf_file) as conf:
conf = conf.read()
conf_string = "".join(conf.split())
pattern = re.compile(ur'Prod.*assets.*version="([0-9.]*)"')
assets_versions = assets_versions + re.findall(pattern, conf_string)
return assets_versions

class SmPlayService(SmJvmService):

Expand Down
10 changes: 8 additions & 2 deletions servicemanager/service/smpythonservice.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,13 @@ def _start_from_binary(self):

if not self.context.offline:
nexus = SmNexus(self.context, self.service_name)
versions = nexus.get_all_versions(self.run_from)

if self.context.assets_versions:
versions = self.context.assets_versions
self.log("Starting assets versions: %s" % (", ".join(versions)))
else:
versions = nexus.get_all_versions(self.run_from)

for version in versions:
nexus.download_jar_if_necessary(self.run_from, version)
self._unzip_assets(versions)
Expand Down Expand Up @@ -177,4 +183,4 @@ def is_started_on_default_port(self):
return len(SmProcess.processes_matching(SmPythonService.get_pattern(self))) > 0

def get_pattern(self):
return self.service_data["pattern"]
return self.service_data["pattern"]
14 changes: 14 additions & 0 deletions servicemanager/serviceresolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ def resolve_services(self, service_name):
def resolve_services_from_array(self, services):
services_to_start = []
services_to_not_start = []

for service_name in services:
if service_name.startswith('-'):
services_to_not_start += self.resolve_services(service_name[1:])
Expand All @@ -28,9 +29,19 @@ def resolve_services_from_array(self, services):
services_to_start.remove(not_start)
return services_to_start

def _find_assets_service_name(self, service_name):
assets_service_name = ''
for service_name in self.application.services:
if self.application.services[service_name]['type'] == 'assets':
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we make these strings constants? and perhaps make generic, for example the function could be "find_assets_of_type(self, service_name, type):" this can then be re-used...

assets_service_name = service_name
return assets_service_name

def _get_all_in_profile(self, profile_name):
services = []
services_to_not_start = []

assets_service_name = self._find_assets_service_name(profile_name)

for service_name in self.application.services_for_profile(profile_name):
if service_name.startswith('-'):
services_to_not_start += self._all_matching(service_name[1:])
Expand All @@ -43,6 +54,9 @@ def _get_all_in_profile(self, profile_name):
for not_start in services_to_not_start:
if not_start in services:
services.remove(not_start)
if assets_service_name in services:
services.remove(assets_service_name)
services.append(assets_service_name)
return services

def _all_matching(self, wildcard):
Expand Down
4 changes: 4 additions & 0 deletions servicemanager/smcontext.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ def __init__(self, application, test_id, offline=False, show_progress=True, requ
self.features = unify_lists(request_specific_features, self.application.features)
self.credentials = CredentialsResolver(self)
self.process_manager = application.process_manager
self.assets_versions = []

def config_value(self, key, default=None):
if key in self.application.config:
Expand Down Expand Up @@ -257,6 +258,9 @@ def get_jar_filename(self, service_name, run_from):
extension = self._create_extension(service_name, run_from)
return artifact + extension

def assets_versions_to_start(self, version):
self.assets_versions = self.assets_versions + version

def kill(self, service_name=None):
if service_name:
self._kill_service(service_name)
Expand Down