solar/solar/test/base.py
Dmitry Shulyak 16072bce2d Refactoring of graph.py and usage of it in scheduler
Current patch addresses several problems -
1. A lot of forced updates on every tick of scheduler are leading
to increased cpu consumption of solar-worker
2. In order to represent solar dbmodel Task using networkx interface
a lot of Task properties are duplicated and are copied each time
when graph object is created

Solving 2nd problem allows us to move update logic to scheduler,
and this will guarantee that we will update no more than reported task
+ childs of that task on each scheduler tick.

Closes-Bug: 1560059
Change-Id: I3ee368ff03b7e24e783e4a367d51e9a84b28a4d9
2016-03-23 13:08:14 +02:00

67 lines
1.9 KiB
Python

# Copyright 2015 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import os
import shutil
import tempfile
import time
import unittest
import networkx as nx
import yaml
from solar.core.resource import composer as cr
from solar.dblayer.model import Model
def patched_get_bucket_name(cls):
return cls.__name__ + str(int(time.time() * 10000))
Model.get_bucket_name = classmethod(patched_get_bucket_name)
class BaseResourceTest(unittest.TestCase):
def setUp(self):
self.storage_dir = tempfile.mkdtemp()
def tearDown(self):
shutil.rmtree(self.storage_dir)
def make_resource_meta(self, meta_yaml):
meta = yaml.load(meta_yaml)
inps = meta['input']
# automaticaly add location_id
inps.setdefault('location_id', {'value': '$uuid',
'reverse': True,
'schema': 'str!'})
meta_yaml = yaml.dump(meta)
path = os.path.join(self.storage_dir, meta['id'])
os.makedirs(path)
with open(os.path.join(path, 'meta.yaml'), 'w') as f:
f.write(meta_yaml)
return path
def create_resource(self, name, src, args=None):
args = args or {}
return cr.create(name, src, inputs=args)[0]
def compare_task_to_names(tasks, names):
if isinstance(tasks, nx.DiGraph):
tasks = tasks.nodes()
assert {t.name for t in tasks} == names