16072bce2d
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
67 lines
1.9 KiB
Python
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
|