83 lines
2.2 KiB
Python
83 lines
2.2 KiB
Python
# Copyright 2017 Catalyst IT Limited
|
|
#
|
|
# 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.
|
|
|
|
from datetime import datetime
|
|
from datetime import timedelta
|
|
|
|
from oslo_config import cfg
|
|
from oslo_log import log as logging
|
|
from oslo_service import threadgroup
|
|
|
|
from qinling import context
|
|
from qinling.db import api as db_api
|
|
from qinling import rpc
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
CONF = cfg.CONF
|
|
_THREAD_GROUP = None
|
|
|
|
|
|
def handle_function_service_expiration(ctx, engine_client, orchestrator):
|
|
context.set_ctx(ctx)
|
|
|
|
delta = timedelta(seconds=CONF.engine.function_service_expiration)
|
|
expiry_time = datetime.utcnow() - delta
|
|
|
|
results = db_api.get_functions(
|
|
fields=['id'],
|
|
sort_keys=['updated_at'],
|
|
insecure=True,
|
|
updated_at={'lte': expiry_time}
|
|
)
|
|
|
|
expiry_ids = [ret.id for ret in results]
|
|
|
|
if not expiry_ids:
|
|
return
|
|
|
|
mappings = db_api.get_function_service_mappings(
|
|
function_id={'in': expiry_ids}
|
|
)
|
|
|
|
LOG.info('Found %s total expiry function mappings', len(mappings))
|
|
|
|
with db_api.transaction():
|
|
for m in mappings:
|
|
LOG.info('Deleting service mapping for function %s', m.function_id)
|
|
|
|
engine_client.delete_function(m.function_id)
|
|
db_api.delete_function_service_mapping(m.function_id)
|
|
|
|
|
|
def start(orchestrator):
|
|
global _THREAD_GROUP
|
|
_THREAD_GROUP = threadgroup.ThreadGroup()
|
|
|
|
engine_client = rpc.get_engine_client()
|
|
|
|
_THREAD_GROUP.add_timer(
|
|
300,
|
|
handle_function_service_expiration,
|
|
ctx=context.Context(),
|
|
engine_client=engine_client,
|
|
orchestrator=orchestrator
|
|
)
|
|
|
|
|
|
def stop():
|
|
global _THREAD_GROUP
|
|
|
|
if _THREAD_GROUP:
|
|
_THREAD_GROUP.stop()
|