switched session.metadata to just be a standard dict, fixed shutdown service issue during session.data_collect

This commit is contained in:
Blake Harnden 2019-10-30 13:27:12 -07:00
parent fe95f246d4
commit 79dfbaa3ec
7 changed files with 22 additions and 40 deletions

View file

@ -343,8 +343,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
""" """
logging.debug("get session metadata: %s", request) logging.debug("get session metadata: %s", request)
session = self.get_session(request.session_id, context) session = self.get_session(request.session_id, context)
config = session.metadata.get_configs() return core_pb2.GetSessionMetadataResponse(config=session.metadata)
return core_pb2.GetSessionMetadataResponse(config=config)
def SetSessionMetadata(self, request, context): def SetSessionMetadata(self, request, context):
""" """
@ -357,7 +356,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
""" """
logging.debug("set session metadata: %s", request) logging.debug("set session metadata: %s", request)
session = self.get_session(request.session_id, context) session = self.get_session(request.session_id, context)
session.metadata.set_configs(request.config) session.metadata = dict(request.config)
return core_pb2.SetSessionMetadataResponse(result=True) return core_pb2.SetSessionMetadataResponse(result=True)
def GetSession(self, request, context): def GetSession(self, request, context):

View file

@ -430,9 +430,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
tlv_data += coreapi.CoreRegisterTlv.pack( tlv_data += coreapi.CoreRegisterTlv.pack(
self.session.options.config_type, self.session.options.name self.session.options.config_type, self.session.options.name
) )
tlv_data += coreapi.CoreRegisterTlv.pack( tlv_data += coreapi.CoreRegisterTlv.pack(RegisterTlvs.UTILITY.value, "metadata")
self.session.metadata.config_type, self.session.metadata.name
)
return coreapi.CoreRegMessage.pack(MessageFlags.ADD.value, tlv_data) return coreapi.CoreRegMessage.pack(MessageFlags.ADD.value, tlv_data)
@ -1046,7 +1044,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
replies = self.handle_config_session(message_type, config_data) replies = self.handle_config_session(message_type, config_data)
elif config_data.object == self.session.location.name: elif config_data.object == self.session.location.name:
self.handle_config_location(message_type, config_data) self.handle_config_location(message_type, config_data)
elif config_data.object == self.session.metadata.name: elif config_data.object == "metadata":
replies = self.handle_config_metadata(message_type, config_data) replies = self.handle_config_metadata(message_type, config_data)
elif config_data.object == "broker": elif config_data.object == "broker":
self.handle_config_broker(message_type, config_data) self.handle_config_broker(message_type, config_data)
@ -1132,7 +1130,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
replies = [] replies = []
if message_type == ConfigFlags.REQUEST: if message_type == ConfigFlags.REQUEST:
node_id = config_data.node node_id = config_data.node
metadata_configs = self.session.metadata.get_configs() metadata_configs = self.session.metadata
if metadata_configs is None: if metadata_configs is None:
metadata_configs = {} metadata_configs = {}
data_values = "|".join( data_values = "|".join(
@ -1142,7 +1140,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
config_response = ConfigData( config_response = ConfigData(
message_type=0, message_type=0,
node=node_id, node=node_id,
object=self.session.metadata.name, object="metadata",
type=ConfigFlags.NONE.value, type=ConfigFlags.NONE.value,
data_types=data_types, data_types=data_types,
data_values=data_values, data_values=data_values,
@ -1152,7 +1150,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
values = ConfigShim.str_to_dict(config_data.data_values) values = ConfigShim.str_to_dict(config_data.data_values)
for key in values: for key in values:
value = values[key] value = values[key]
self.session.metadata.set_config(key, value) self.session.metadata[key] = value
return replies return replies
def handle_config_broker(self, message_type, config_data): def handle_config_broker(self, message_type, config_data):
@ -1951,18 +1949,17 @@ class CoreHandler(socketserver.BaseRequestHandler):
self.session.broadcast_config(config_data) self.session.broadcast_config(config_data)
# send session metadata # send session metadata
metadata_configs = self.session.metadata.get_configs() metadata_configs = self.session.metadata
if metadata_configs: if metadata_configs:
data_values = "|".join( data_values = "|".join(
[f"{x}={metadata_configs[x]}" for x in metadata_configs] [f"{x}={metadata_configs[x]}" for x in metadata_configs]
) )
data_types = tuple( data_types = tuple(
ConfigDataTypes.STRING.value ConfigDataTypes.STRING.value for _ in self.session.metadata
for _ in self.session.metadata.get_configs()
) )
config_data = ConfigData( config_data = ConfigData(
message_type=0, message_type=0,
object=self.session.metadata.name, object="metadata",
type=ConfigFlags.NONE.value, type=ConfigFlags.NONE.value,
data_types=data_types, data_types=data_types,
data_values=data_values, data_values=data_values,

View file

@ -26,7 +26,7 @@ from core.emulator.emudata import (
link_config, link_config,
) )
from core.emulator.enumerations import EventTypes, ExceptionLevels, LinkTypes, NodeTypes from core.emulator.enumerations import EventTypes, ExceptionLevels, LinkTypes, NodeTypes
from core.emulator.sessionconfig import SessionConfig, SessionMetaData from core.emulator.sessionconfig import SessionConfig
from core.errors import CoreError from core.errors import CoreError
from core.location.corelocation import CoreLocation from core.location.corelocation import CoreLocation
from core.location.event import EventLoop from core.location.event import EventLoop
@ -129,7 +129,7 @@ class Session:
for key in config: for key in config:
value = config[key] value = config[key]
self.options.set_config(key, value) self.options.set_config(key, value)
self.metadata = SessionMetaData() self.metadata = {}
# distributed support and logic # distributed support and logic
self.distributed = DistributedController(self) self.distributed = DistributedController(self)
@ -1513,7 +1513,6 @@ class Session:
for node_id in self.nodes: for node_id in self.nodes:
node = self.nodes[node_id] node = self.nodes[node_id]
if isinstance(node, CoreNodeBase): if isinstance(node, CoreNodeBase):
self.services.stop_services(node)
args = (node,) args = (node,)
funcs.append((self.services.stop_services, args, {})) funcs.append((self.services.stop_services, args, {}))
utils.threadpool(funcs) utils.threadpool(funcs)

View file

@ -87,14 +87,3 @@ class SessionConfig(ConfigurableManager, ConfigurableOptions):
if value is not None: if value is not None:
value = int(value) value = int(value)
return value return value
class SessionMetaData(ConfigurableManager):
"""
Metadata is simply stored in a configs[] dict. Key=value pairs are
passed in from configure messages destined to the "metadata" object.
The data is not otherwise interpreted or processed.
"""
name = "metadata"
config_type = RegisterTlvs.UTILITY.value

View file

@ -313,13 +313,13 @@ class CoreXmlWriter:
def write_session_metadata(self): def write_session_metadata(self):
# metadata # metadata
metadata_elements = etree.Element("session_metadata") metadata_elements = etree.Element("session_metadata")
config = self.session.metadata.get_configs() config = self.session.metadata
if not config: if not config:
return return
for _id in config: for key in config:
value = config[_id] value = config[key]
add_configuration(metadata_elements, _id, value) add_configuration(metadata_elements, key, value)
if metadata_elements.getchildren(): if metadata_elements.getchildren():
self.scenario.append(metadata_elements) self.scenario.append(metadata_elements)
@ -574,7 +574,7 @@ class CoreXmlReader:
value = data.get("value") value = data.get("value")
configs[name] = value configs[name] = value
logging.info("reading session metadata: %s", configs) logging.info("reading session metadata: %s", configs)
self.session.metadata.set_configs(configs) self.session.metadata = configs
def read_session_options(self): def read_session_options(self):
session_options = self.scenario.find("session_options") session_options = self.scenario.find("session_options")

View file

@ -296,9 +296,7 @@ class TestGrpc:
# then # then
assert response.result is True assert response.result is True
assert session.metadata.get_config(key) == value assert session.metadata[key] == value
config = session.metadata.get_configs()
assert len(config) > 0
def test_get_session_metadata(self, grpc_server): def test_get_session_metadata(self, grpc_server):
# given # given
@ -306,7 +304,7 @@ class TestGrpc:
session = grpc_server.coreemu.create_session() session = grpc_server.coreemu.create_session()
key = "meta1" key = "meta1"
value = "value1" value = "value1"
session.metadata.set_config(key, value) session.metadata[key] = value
# then # then
with client.context_connect(): with client.context_connect():

View file

@ -741,7 +741,7 @@ class TestGui:
coretlv.handle_message(message) coretlv.handle_message(message)
assert coretlv.session.metadata.get_config(test_key) == test_value assert coretlv.session.metadata[test_key] == test_value
def test_config_broker_request(self, coretlv): def test_config_broker_request(self, coretlv):
server = "test" server = "test"