From 1f281e3c89d8145d713191888c1d922e6ba49b2d Mon Sep 17 00:00:00 2001 From: David Sutherland Date: Fri, 29 Nov 2019 13:16:35 +1300 Subject: [PATCH] API version, module names, record changes --- CHANGES.md | 12 +- bin/cylc-scan | 10 +- bin/cylc-subscribe | 2 +- ...{ws_messages.proto => data_messages.proto} | 2 +- ...s_messages_pb2.py => data_messages_pb2.py} | 294 +++++++++--------- .../{ws_data_mgr.py => data_store_mgr.py} | 39 +-- cylc/flow/job_pool.py | 4 +- cylc/flow/network/__init__.py | 13 +- cylc/flow/network/resolvers.py | 2 +- cylc/flow/network/scan.py | 26 +- cylc/flow/network/schema.py | 2 +- cylc/flow/network/server.py | 6 +- cylc/flow/network/subscriber.py | 2 +- cylc/flow/prerequisite.py | 2 +- cylc/flow/scheduler.py | 7 +- cylc/flow/tests/network/test_client.py | 4 +- cylc/flow/tests/network/test_publisher.py | 4 +- cylc/flow/tests/network/test_resolvers.py | 6 +- cylc/flow/tests/network/test_scan.py | 8 +- cylc/flow/tests/network/test_server.py | 4 +- cylc/flow/tests/network/test_subscriber.py | 4 +- ..._ws_data_mgr.py => test_data_store_mgr.py} | 14 +- cylc/flow/tests/test_job_pool.py | 2 +- cylc/flow/tests/util.py | 1 - pytest.ini | 2 +- setup.py | 2 +- tests/authentication/05-full-control.t | 8 + tox.ini | 2 +- 28 files changed, 249 insertions(+), 235 deletions(-) rename cylc/flow/{ws_messages.proto => data_messages.proto} (99%) rename cylc/flow/{ws_messages_pb2.py => data_messages_pb2.py} (83%) rename cylc/flow/{ws_data_mgr.py => data_store_mgr.py} (98%) rename cylc/flow/tests/{test_ws_data_mgr.py => test_data_store_mgr.py} (96%) diff --git a/CHANGES.md b/CHANGES.md index 8860b8950d8..d4c00e532e7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -42,9 +42,15 @@ Third alpha release of Cylc 8. ### Enhancements -[#3402](https://github.com/cylc/cylc-flow/pull/3402) - removed automatic task job -status message retries (problems that prevent message transmission are almost -never transient, and in practice job polling is the only way to recover). +[#3389](https://github.com/cylc/cylc-flow/pull/3389) - Publisher/Subscriber +network components added (0MQ PUB/SUB pattern). Used to publish fine-grained +data-store updates for the purposes of UI Server data sync, this change also +includes CLI utility: `cylc subscribe`. + +[#3402](https://github.com/cylc/cylc-flow/pull/3402) - removed automatic task +job status message retries (problems that prevent message transmission are +almost never transient, and in practice job polling is the only way to +recover). ### Fixes diff --git a/bin/cylc-scan b/bin/cylc-scan index 95fc906cf38..846b5c0434e 100755 --- a/bin/cylc-scan +++ b/bin/cylc-scan @@ -193,7 +193,7 @@ def main(parser, options): print(state_legend.rstrip() + "\n") # work through scan results one by one - for reg, host, port, pub_port, info in suites: + for reg, host, port, pub_port, api, info in suites: if isinstance(info, str): print(ERROR_STYLE + ' '.join([reg, host, port, info])) elif info is None: @@ -203,7 +203,7 @@ def main(parser, options): print(ERROR_STYLE + 'Warning: suite has changed name %s => %s' % ( reg, info[KEY_NAME])) else: - formatter(reg, host, port, pub_port, info, options) + formatter(reg, host, port, pub_port, api, info, options) def sort_meta(item): @@ -214,7 +214,7 @@ def sort_meta(item): return key -def format_plain(name, host, port, pub_port, info, options): +def format_plain(name, host, port, pub_port, api, info, options): """Print a scan result, implements --format=plain""" owner = info[KEY_OWNER] @@ -228,6 +228,7 @@ def format_plain(name, host, port, pub_port, info, options): if options.describe: meta_items = info.get(KEY_META) + meta_items['API'] = api if meta_items is None: print(INDENT + MISSING_STYLE + "(description withheld)") return @@ -254,7 +255,7 @@ def format_plain(name, host, port, pub_port, info, options): print(INDENT * 2 + "%s%s" % (point_prefix, state_line)) -def format_raw(name, host, port, pub_port, info, options): +def format_raw(name, host, port, pub_port, api, info, options): """Print a scan result, implements --format=raw""" owner = info[KEY_OWNER] @@ -266,6 +267,7 @@ def format_raw(name, host, port, pub_port, info, options): if options.describe: # Extracting required data for these options before processing meta_items = info.get(KEY_META) + meta_items['API'] = api # clean_meta_items = {} # for key, value in meta_items.items(): diff --git a/bin/cylc-subscribe b/bin/cylc-subscribe index c3933c6b820..09c728be28c 100755 --- a/bin/cylc-subscribe +++ b/bin/cylc-subscribe @@ -33,7 +33,7 @@ from cylc.flow.option_parsers import CylcOptionParser as COP from cylc.flow.network import get_location from cylc.flow.network.subscriber import WorkflowSubscriber, process_delta_msg from cylc.flow.terminal import cli_function -from cylc.flow.ws_data_mgr import DELTAS_MAP +from cylc.flow.data_store_mgr import DELTAS_MAP if '--use-ssh' in sys.argv[1:]: sys.argv.remove('--use-ssh') diff --git a/cylc/flow/ws_messages.proto b/cylc/flow/data_messages.proto similarity index 99% rename from cylc/flow/ws_messages.proto rename to cylc/flow/data_messages.proto index 30c74549903..b6cc4f6e509 100644 --- a/cylc/flow/ws_messages.proto +++ b/cylc/flow/data_messages.proto @@ -25,7 +25,7 @@ syntax = "proto3"; * message modules. * * Command: - * $ protoc -I=./ --python_out=./ ws_messages.proto + * $ protoc -I=./ --python_out=./ data_messages.proto * * Pre-compiled protoc binary may be download from: * https://github.com/protocolbuffers/protobuf/releases diff --git a/cylc/flow/ws_messages_pb2.py b/cylc/flow/data_messages_pb2.py similarity index 83% rename from cylc/flow/ws_messages_pb2.py rename to cylc/flow/data_messages_pb2.py index aa2e8b324dc..28d5fcacea1 100644 --- a/cylc/flow/ws_messages_pb2.py +++ b/cylc/flow/data_messages_pb2.py @@ -1,9 +1,7 @@ # -*- coding: utf-8 -*- # Generated by the protocol buffer compiler. DO NOT EDIT! -# source: ws_messages.proto +# source: data_messages.proto -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection @@ -16,11 +14,11 @@ DESCRIPTOR = _descriptor.FileDescriptor( - name='ws_messages.proto', + name='data_messages.proto', package='', syntax='proto3', serialized_options=None, - serialized_pb=_b('\n\x11ws_messages.proto\"O\n\x06PbMeta\x12\r\n\x05title\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0b\n\x03URL\x18\x03 \x01(\t\x12\x14\n\x0cuser_defined\x18\x04 \x03(\t\"[\n\nPbTimeZone\x12\r\n\x05hours\x18\x01 \x01(\x05\x12\x0f\n\x07minutes\x18\x02 \x01(\x05\x12\x14\n\x0cstring_basic\x18\x03 \x01(\t\x12\x17\n\x0fstring_extended\x18\x04 \x01(\t\"\xeb\x05\n\nPbWorkflow\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06status\x18\x04 \x01(\t\x12\x0c\n\x04host\x18\x05 \x01(\t\x12\x0c\n\x04port\x18\x06 \x01(\x05\x12\r\n\x05owner\x18\x07 \x01(\t\x12\r\n\x05tasks\x18\x08 \x03(\t\x12\x10\n\x08\x66\x61milies\x18\t \x03(\t\x12\x17\n\x05\x65\x64ges\x18\n \x01(\x0b\x32\x08.PbEdges\x12\x13\n\x0b\x61pi_version\x18\x0b \x01(\x05\x12\x14\n\x0c\x63ylc_version\x18\x0c \x01(\t\x12\x14\n\x0clast_updated\x18\r \x01(\x01\x12\x15\n\x04meta\x18\x0e \x01(\x0b\x32\x07.PbMeta\x12#\n\x1bnewest_runahead_cycle_point\x18\x0f \x01(\t\x12\x1a\n\x12newest_cycle_point\x18\x10 \x01(\t\x12\x1a\n\x12oldest_cycle_point\x18\x11 \x01(\t\x12\x10\n\x08reloaded\x18\x12 \x01(\x08\x12\x10\n\x08run_mode\x18\x13 \x01(\t\x12\x14\n\x0c\x63ycling_mode\x18\x14 \x01(\t\x12\x32\n\x0cstate_totals\x18\x15 \x03(\x0b\x32\x1c.PbWorkflow.StateTotalsEntry\x12\x18\n\x10workflow_log_dir\x18\x16 \x01(\t\x12#\n\x0etime_zone_info\x18\x17 \x01(\x0b\x32\x0b.PbTimeZone\x12\x12\n\ntree_depth\x18\x18 \x01(\x05\x12\x15\n\rjob_log_names\x18\x19 \x03(\t\x12\x15\n\rns_defn_order\x18\x1a \x03(\t\x12\x0e\n\x06states\x18\x1b \x03(\t\x12\x14\n\x0ctask_proxies\x18\x1c \x03(\t\x12\x16\n\x0e\x66\x61mily_proxies\x18\x1d \x03(\t\x12\x12\n\nstatus_msg\x18\x1e \x01(\t\x12\x15\n\ris_held_total\x18\x1f \x01(\x05\x1a\x32\n\x10StateTotalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\"\x85\x05\n\x05PbJob\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x12\n\nsubmit_num\x18\x03 \x01(\x05\x12\r\n\x05state\x18\x04 \x01(\t\x12\x12\n\ntask_proxy\x18\x05 \x01(\t\x12\x16\n\x0esubmitted_time\x18\x06 \x01(\t\x12\x14\n\x0cstarted_time\x18\x07 \x01(\t\x12\x15\n\rfinished_time\x18\x08 \x01(\t\x12\x18\n\x10\x62\x61tch_sys_job_id\x18\t \x01(\t\x12\x16\n\x0e\x62\x61tch_sys_name\x18\n \x01(\t\x12\x12\n\nenv_script\x18\x0b \x01(\t\x12\x12\n\nerr_script\x18\x0c \x01(\t\x12\x13\n\x0b\x65xit_script\x18\r \x01(\t\x12\x1c\n\x14\x65xecution_time_limit\x18\x0e \x01(\x02\x12\x0c\n\x04host\x18\x0f \x01(\t\x12\x13\n\x0binit_script\x18\x10 \x01(\t\x12\x13\n\x0bjob_log_dir\x18\x11 \x01(\t\x12\r\n\x05owner\x18\x12 \x01(\t\x12\x13\n\x0bpost_script\x18\x13 \x01(\t\x12\x12\n\npre_script\x18\x14 \x01(\t\x12\x0e\n\x06script\x18\x15 \x01(\t\x12\r\n\x05shell\x18\x16 \x01(\t\x12\x14\n\x0cwork_sub_dir\x18\x17 \x01(\t\x12\x16\n\x0e\x62\x61tch_sys_conf\x18\x18 \x03(\t\x12\x13\n\x0b\x65nvironment\x18\x19 \x03(\t\x12\x12\n\ndirectives\x18\x1a \x03(\t\x12\x16\n\x0eparam_env_tmpl\x18\x1b \x03(\t\x12\x11\n\tparam_var\x18\x1c \x03(\t\x12\x12\n\nextra_logs\x18\x1d \x03(\t\x12\x0c\n\x04name\x18\x1e \x01(\t\x12\x13\n\x0b\x63ycle_point\x18\x1f \x01(\t\x12\x10\n\x08messages\x18 \x03(\t\"\x96\x01\n\x06PbTask\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x15\n\x04meta\x18\x04 \x01(\x0b\x32\x07.PbMeta\x12\x19\n\x11mean_elapsed_time\x18\x05 \x01(\x02\x12\r\n\x05\x64\x65pth\x18\x06 \x01(\x05\x12\x0f\n\x07proxies\x18\x07 \x03(\t\x12\x11\n\tnamespace\x18\x08 \x03(\t\"r\n\nPbPollTask\x12\x13\n\x0blocal_proxy\x18\x01 \x01(\t\x12\x10\n\x08workflow\x18\x02 \x01(\t\x12\x14\n\x0cremote_proxy\x18\x03 \x01(\t\x12\x11\n\treq_state\x18\x04 \x01(\t\x12\x14\n\x0cgraph_string\x18\x05 \x01(\t\"l\n\x0bPbCondition\x12\x12\n\ntask_proxy\x18\x01 \x01(\t\x12\x12\n\nexpr_alias\x18\x02 \x01(\t\x12\x11\n\treq_state\x18\x03 \x01(\t\x12\x11\n\tsatisfied\x18\x04 \x01(\x08\x12\x0f\n\x07message\x18\x05 \x01(\t\"o\n\x0ePbPrerequisite\x12\x12\n\nexpression\x18\x01 \x01(\t\x12 \n\nconditions\x18\x02 \x03(\x0b\x32\x0c.PbCondition\x12\x14\n\x0c\x63ycle_points\x18\x03 \x03(\t\x12\x11\n\tsatisfied\x18\x04 \x01(\x08\"\xfd\x02\n\x0bPbTaskProxy\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0c\n\x04task\x18\x03 \x01(\t\x12\r\n\x05state\x18\x04 \x01(\t\x12\x13\n\x0b\x63ycle_point\x18\x05 \x01(\t\x12\x0f\n\x07spawned\x18\x06 \x01(\x08\x12\r\n\x05\x64\x65pth\x18\x07 \x01(\x05\x12\x13\n\x0bjob_submits\x18\x08 \x01(\x05\x12\x16\n\x0elatest_message\x18\t \x01(\t\x12\x0f\n\x07outputs\x18\n \x03(\t\x12\x12\n\nbroadcasts\x18\x0b \x03(\t\x12\x11\n\tnamespace\x18\x0c \x03(\t\x12&\n\rprerequisites\x18\r \x03(\x0b\x32\x0f.PbPrerequisite\x12\x0c\n\x04jobs\x18\x0e \x03(\t\x12\x0f\n\x07parents\x18\x0f \x03(\t\x12\x14\n\x0c\x66irst_parent\x18\x10 \x01(\t\x12\x0c\n\x04name\x18\x11 \x01(\t\x12\x0f\n\x07is_held\x18\x12 \x01(\x08\x12\r\n\x05\x65\x64ges\x18\x13 \x03(\t\x12\x11\n\tancestors\x18\x14 \x03(\t\"\xa8\x01\n\x08PbFamily\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x15\n\x04meta\x18\x04 \x01(\x0b\x32\x07.PbMeta\x12\r\n\x05\x64\x65pth\x18\x05 \x01(\x05\x12\x0f\n\x07proxies\x18\x06 \x03(\t\x12\x0f\n\x07parents\x18\x07 \x03(\t\x12\x13\n\x0b\x63hild_tasks\x18\x08 \x03(\t\x12\x16\n\x0e\x63hild_families\x18\t \x03(\t\"\xf3\x01\n\rPbFamilyProxy\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x13\n\x0b\x63ycle_point\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x0e\n\x06\x66\x61mily\x18\x05 \x01(\t\x12\r\n\x05state\x18\x06 \x01(\t\x12\r\n\x05\x64\x65pth\x18\x07 \x01(\x05\x12\x14\n\x0c\x66irst_parent\x18\x08 \x01(\t\x12\x0f\n\x07parents\x18\t \x03(\t\x12\x13\n\x0b\x63hild_tasks\x18\n \x03(\t\x12\x16\n\x0e\x63hild_families\x18\x0b \x03(\t\x12\x0f\n\x07is_held\x18\x0c \x01(\x08\x12\x11\n\tancestors\x18\r \x03(\t\"b\n\x06PbEdge\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x0f\n\x07suicide\x18\x05 \x01(\x08\x12\x0c\n\x04\x63ond\x18\x06 \x01(\x08\"o\n\x07PbEdges\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05\x65\x64ges\x18\x02 \x03(\t\x12+\n\x16workflow_polling_tasks\x18\x03 \x03(\x0b\x32\x0b.PbPollTask\x12\x0e\n\x06leaves\x18\x04 \x03(\t\x12\x0c\n\x04\x66\x65\x65t\x18\x05 \x03(\t\"\xe0\x01\n\x10PbEntireWorkflow\x12\x1d\n\x08workflow\x18\x01 \x01(\x0b\x32\x0b.PbWorkflow\x12\x16\n\x05tasks\x18\x02 \x03(\x0b\x32\x07.PbTask\x12\"\n\x0ctask_proxies\x18\x03 \x03(\x0b\x32\x0c.PbTaskProxy\x12\x14\n\x04jobs\x18\x04 \x03(\x0b\x32\x06.PbJob\x12\x1b\n\x08\x66\x61milies\x18\x05 \x03(\x0b\x32\t.PbFamily\x12&\n\x0e\x66\x61mily_proxies\x18\x06 \x03(\x0b\x32\x0e.PbFamilyProxy\x12\x16\n\x05\x65\x64ges\x18\x07 \x03(\x0b\x32\x07.PbEdge\"d\n\x07\x45\x44\x65ltas\x12\x0c\n\x04time\x18\x01 \x01(\x01\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\x03\x12\x0e\n\x06pruned\x18\x03 \x03(\t\x12\x17\n\x06\x64\x65ltas\x18\x04 \x03(\x0b\x32\x07.PbEdge\x12\x10\n\x08reloaded\x18\x05 \x01(\x08\"f\n\x07\x46\x44\x65ltas\x12\x0c\n\x04time\x18\x01 \x01(\x01\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\x03\x12\x0e\n\x06pruned\x18\x03 \x03(\t\x12\x19\n\x06\x64\x65ltas\x18\x04 \x03(\x0b\x32\t.PbFamily\x12\x10\n\x08reloaded\x18\x05 \x01(\x08\"l\n\x08\x46PDeltas\x12\x0c\n\x04time\x18\x01 \x01(\x01\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\x03\x12\x0e\n\x06pruned\x18\x03 \x03(\t\x12\x1e\n\x06\x64\x65ltas\x18\x04 \x03(\x0b\x32\x0e.PbFamilyProxy\x12\x10\n\x08reloaded\x18\x05 \x01(\x08\"c\n\x07JDeltas\x12\x0c\n\x04time\x18\x01 \x01(\x01\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\x03\x12\x0e\n\x06pruned\x18\x03 \x03(\t\x12\x16\n\x06\x64\x65ltas\x18\x04 \x03(\x0b\x32\x06.PbJob\x12\x10\n\x08reloaded\x18\x05 \x01(\x08\"d\n\x07TDeltas\x12\x0c\n\x04time\x18\x01 \x01(\x01\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\x03\x12\x0e\n\x06pruned\x18\x03 \x03(\t\x12\x17\n\x06\x64\x65ltas\x18\x04 \x03(\x0b\x32\x07.PbTask\x12\x10\n\x08reloaded\x18\x05 \x01(\x08\"j\n\x08TPDeltas\x12\x0c\n\x04time\x18\x01 \x01(\x01\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\x03\x12\x0e\n\x06pruned\x18\x03 \x03(\t\x12\x1c\n\x06\x64\x65ltas\x18\x04 \x03(\x0b\x32\x0c.PbTaskProxy\x12\x10\n\x08reloaded\x18\x05 \x01(\x08\x62\x06proto3') + serialized_pb=b'\n\x13\x64\x61ta_messages.proto\"O\n\x06PbMeta\x12\r\n\x05title\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0b\n\x03URL\x18\x03 \x01(\t\x12\x14\n\x0cuser_defined\x18\x04 \x03(\t\"[\n\nPbTimeZone\x12\r\n\x05hours\x18\x01 \x01(\x05\x12\x0f\n\x07minutes\x18\x02 \x01(\x05\x12\x14\n\x0cstring_basic\x18\x03 \x01(\t\x12\x17\n\x0fstring_extended\x18\x04 \x01(\t\"\xeb\x05\n\nPbWorkflow\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06status\x18\x04 \x01(\t\x12\x0c\n\x04host\x18\x05 \x01(\t\x12\x0c\n\x04port\x18\x06 \x01(\x05\x12\r\n\x05owner\x18\x07 \x01(\t\x12\r\n\x05tasks\x18\x08 \x03(\t\x12\x10\n\x08\x66\x61milies\x18\t \x03(\t\x12\x17\n\x05\x65\x64ges\x18\n \x01(\x0b\x32\x08.PbEdges\x12\x13\n\x0b\x61pi_version\x18\x0b \x01(\x05\x12\x14\n\x0c\x63ylc_version\x18\x0c \x01(\t\x12\x14\n\x0clast_updated\x18\r \x01(\x01\x12\x15\n\x04meta\x18\x0e \x01(\x0b\x32\x07.PbMeta\x12#\n\x1bnewest_runahead_cycle_point\x18\x0f \x01(\t\x12\x1a\n\x12newest_cycle_point\x18\x10 \x01(\t\x12\x1a\n\x12oldest_cycle_point\x18\x11 \x01(\t\x12\x10\n\x08reloaded\x18\x12 \x01(\x08\x12\x10\n\x08run_mode\x18\x13 \x01(\t\x12\x14\n\x0c\x63ycling_mode\x18\x14 \x01(\t\x12\x32\n\x0cstate_totals\x18\x15 \x03(\x0b\x32\x1c.PbWorkflow.StateTotalsEntry\x12\x18\n\x10workflow_log_dir\x18\x16 \x01(\t\x12#\n\x0etime_zone_info\x18\x17 \x01(\x0b\x32\x0b.PbTimeZone\x12\x12\n\ntree_depth\x18\x18 \x01(\x05\x12\x15\n\rjob_log_names\x18\x19 \x03(\t\x12\x15\n\rns_defn_order\x18\x1a \x03(\t\x12\x0e\n\x06states\x18\x1b \x03(\t\x12\x14\n\x0ctask_proxies\x18\x1c \x03(\t\x12\x16\n\x0e\x66\x61mily_proxies\x18\x1d \x03(\t\x12\x12\n\nstatus_msg\x18\x1e \x01(\t\x12\x15\n\ris_held_total\x18\x1f \x01(\x05\x1a\x32\n\x10StateTotalsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x05:\x02\x38\x01\"\x85\x05\n\x05PbJob\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x12\n\nsubmit_num\x18\x03 \x01(\x05\x12\r\n\x05state\x18\x04 \x01(\t\x12\x12\n\ntask_proxy\x18\x05 \x01(\t\x12\x16\n\x0esubmitted_time\x18\x06 \x01(\t\x12\x14\n\x0cstarted_time\x18\x07 \x01(\t\x12\x15\n\rfinished_time\x18\x08 \x01(\t\x12\x18\n\x10\x62\x61tch_sys_job_id\x18\t \x01(\t\x12\x16\n\x0e\x62\x61tch_sys_name\x18\n \x01(\t\x12\x12\n\nenv_script\x18\x0b \x01(\t\x12\x12\n\nerr_script\x18\x0c \x01(\t\x12\x13\n\x0b\x65xit_script\x18\r \x01(\t\x12\x1c\n\x14\x65xecution_time_limit\x18\x0e \x01(\x02\x12\x0c\n\x04host\x18\x0f \x01(\t\x12\x13\n\x0binit_script\x18\x10 \x01(\t\x12\x13\n\x0bjob_log_dir\x18\x11 \x01(\t\x12\r\n\x05owner\x18\x12 \x01(\t\x12\x13\n\x0bpost_script\x18\x13 \x01(\t\x12\x12\n\npre_script\x18\x14 \x01(\t\x12\x0e\n\x06script\x18\x15 \x01(\t\x12\r\n\x05shell\x18\x16 \x01(\t\x12\x14\n\x0cwork_sub_dir\x18\x17 \x01(\t\x12\x16\n\x0e\x62\x61tch_sys_conf\x18\x18 \x03(\t\x12\x13\n\x0b\x65nvironment\x18\x19 \x03(\t\x12\x12\n\ndirectives\x18\x1a \x03(\t\x12\x16\n\x0eparam_env_tmpl\x18\x1b \x03(\t\x12\x11\n\tparam_var\x18\x1c \x03(\t\x12\x12\n\nextra_logs\x18\x1d \x03(\t\x12\x0c\n\x04name\x18\x1e \x01(\t\x12\x13\n\x0b\x63ycle_point\x18\x1f \x01(\t\x12\x10\n\x08messages\x18 \x03(\t\"\x96\x01\n\x06PbTask\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x15\n\x04meta\x18\x04 \x01(\x0b\x32\x07.PbMeta\x12\x19\n\x11mean_elapsed_time\x18\x05 \x01(\x02\x12\r\n\x05\x64\x65pth\x18\x06 \x01(\x05\x12\x0f\n\x07proxies\x18\x07 \x03(\t\x12\x11\n\tnamespace\x18\x08 \x03(\t\"r\n\nPbPollTask\x12\x13\n\x0blocal_proxy\x18\x01 \x01(\t\x12\x10\n\x08workflow\x18\x02 \x01(\t\x12\x14\n\x0cremote_proxy\x18\x03 \x01(\t\x12\x11\n\treq_state\x18\x04 \x01(\t\x12\x14\n\x0cgraph_string\x18\x05 \x01(\t\"l\n\x0bPbCondition\x12\x12\n\ntask_proxy\x18\x01 \x01(\t\x12\x12\n\nexpr_alias\x18\x02 \x01(\t\x12\x11\n\treq_state\x18\x03 \x01(\t\x12\x11\n\tsatisfied\x18\x04 \x01(\x08\x12\x0f\n\x07message\x18\x05 \x01(\t\"o\n\x0ePbPrerequisite\x12\x12\n\nexpression\x18\x01 \x01(\t\x12 \n\nconditions\x18\x02 \x03(\x0b\x32\x0c.PbCondition\x12\x14\n\x0c\x63ycle_points\x18\x03 \x03(\t\x12\x11\n\tsatisfied\x18\x04 \x01(\x08\"\xfd\x02\n\x0bPbTaskProxy\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0c\n\x04task\x18\x03 \x01(\t\x12\r\n\x05state\x18\x04 \x01(\t\x12\x13\n\x0b\x63ycle_point\x18\x05 \x01(\t\x12\x0f\n\x07spawned\x18\x06 \x01(\x08\x12\r\n\x05\x64\x65pth\x18\x07 \x01(\x05\x12\x13\n\x0bjob_submits\x18\x08 \x01(\x05\x12\x16\n\x0elatest_message\x18\t \x01(\t\x12\x0f\n\x07outputs\x18\n \x03(\t\x12\x12\n\nbroadcasts\x18\x0b \x03(\t\x12\x11\n\tnamespace\x18\x0c \x03(\t\x12&\n\rprerequisites\x18\r \x03(\x0b\x32\x0f.PbPrerequisite\x12\x0c\n\x04jobs\x18\x0e \x03(\t\x12\x0f\n\x07parents\x18\x0f \x03(\t\x12\x14\n\x0c\x66irst_parent\x18\x10 \x01(\t\x12\x0c\n\x04name\x18\x11 \x01(\t\x12\x0f\n\x07is_held\x18\x12 \x01(\x08\x12\r\n\x05\x65\x64ges\x18\x13 \x03(\t\x12\x11\n\tancestors\x18\x14 \x03(\t\"\xa8\x01\n\x08PbFamily\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x15\n\x04meta\x18\x04 \x01(\x0b\x32\x07.PbMeta\x12\r\n\x05\x64\x65pth\x18\x05 \x01(\x05\x12\x0f\n\x07proxies\x18\x06 \x03(\t\x12\x0f\n\x07parents\x18\x07 \x03(\t\x12\x13\n\x0b\x63hild_tasks\x18\x08 \x03(\t\x12\x16\n\x0e\x63hild_families\x18\t \x03(\t\"\xf3\x01\n\rPbFamilyProxy\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x13\n\x0b\x63ycle_point\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x0e\n\x06\x66\x61mily\x18\x05 \x01(\t\x12\r\n\x05state\x18\x06 \x01(\t\x12\r\n\x05\x64\x65pth\x18\x07 \x01(\x05\x12\x14\n\x0c\x66irst_parent\x18\x08 \x01(\t\x12\x0f\n\x07parents\x18\t \x03(\t\x12\x13\n\x0b\x63hild_tasks\x18\n \x03(\t\x12\x16\n\x0e\x63hild_families\x18\x0b \x03(\t\x12\x0f\n\x07is_held\x18\x0c \x01(\x08\x12\x11\n\tancestors\x18\r \x03(\t\"b\n\x06PbEdge\x12\r\n\x05stamp\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\x0e\n\x06source\x18\x03 \x01(\t\x12\x0e\n\x06target\x18\x04 \x01(\t\x12\x0f\n\x07suicide\x18\x05 \x01(\x08\x12\x0c\n\x04\x63ond\x18\x06 \x01(\x08\"o\n\x07PbEdges\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05\x65\x64ges\x18\x02 \x03(\t\x12+\n\x16workflow_polling_tasks\x18\x03 \x03(\x0b\x32\x0b.PbPollTask\x12\x0e\n\x06leaves\x18\x04 \x03(\t\x12\x0c\n\x04\x66\x65\x65t\x18\x05 \x03(\t\"\xe0\x01\n\x10PbEntireWorkflow\x12\x1d\n\x08workflow\x18\x01 \x01(\x0b\x32\x0b.PbWorkflow\x12\x16\n\x05tasks\x18\x02 \x03(\x0b\x32\x07.PbTask\x12\"\n\x0ctask_proxies\x18\x03 \x03(\x0b\x32\x0c.PbTaskProxy\x12\x14\n\x04jobs\x18\x04 \x03(\x0b\x32\x06.PbJob\x12\x1b\n\x08\x66\x61milies\x18\x05 \x03(\x0b\x32\t.PbFamily\x12&\n\x0e\x66\x61mily_proxies\x18\x06 \x03(\x0b\x32\x0e.PbFamilyProxy\x12\x16\n\x05\x65\x64ges\x18\x07 \x03(\x0b\x32\x07.PbEdge\"d\n\x07\x45\x44\x65ltas\x12\x0c\n\x04time\x18\x01 \x01(\x01\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\x03\x12\x0e\n\x06pruned\x18\x03 \x03(\t\x12\x17\n\x06\x64\x65ltas\x18\x04 \x03(\x0b\x32\x07.PbEdge\x12\x10\n\x08reloaded\x18\x05 \x01(\x08\"f\n\x07\x46\x44\x65ltas\x12\x0c\n\x04time\x18\x01 \x01(\x01\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\x03\x12\x0e\n\x06pruned\x18\x03 \x03(\t\x12\x19\n\x06\x64\x65ltas\x18\x04 \x03(\x0b\x32\t.PbFamily\x12\x10\n\x08reloaded\x18\x05 \x01(\x08\"l\n\x08\x46PDeltas\x12\x0c\n\x04time\x18\x01 \x01(\x01\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\x03\x12\x0e\n\x06pruned\x18\x03 \x03(\t\x12\x1e\n\x06\x64\x65ltas\x18\x04 \x03(\x0b\x32\x0e.PbFamilyProxy\x12\x10\n\x08reloaded\x18\x05 \x01(\x08\"c\n\x07JDeltas\x12\x0c\n\x04time\x18\x01 \x01(\x01\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\x03\x12\x0e\n\x06pruned\x18\x03 \x03(\t\x12\x16\n\x06\x64\x65ltas\x18\x04 \x03(\x0b\x32\x06.PbJob\x12\x10\n\x08reloaded\x18\x05 \x01(\x08\"d\n\x07TDeltas\x12\x0c\n\x04time\x18\x01 \x01(\x01\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\x03\x12\x0e\n\x06pruned\x18\x03 \x03(\t\x12\x17\n\x06\x64\x65ltas\x18\x04 \x03(\x0b\x32\x07.PbTask\x12\x10\n\x08reloaded\x18\x05 \x01(\x08\"j\n\x08TPDeltas\x12\x0c\n\x04time\x18\x01 \x01(\x01\x12\x10\n\x08\x63hecksum\x18\x02 \x01(\x03\x12\x0e\n\x06pruned\x18\x03 \x03(\t\x12\x1c\n\x06\x64\x65ltas\x18\x04 \x03(\x0b\x32\x0c.PbTaskProxy\x12\x10\n\x08reloaded\x18\x05 \x01(\x08\x62\x06proto3' ) @@ -36,21 +34,21 @@ _descriptor.FieldDescriptor( name='title', full_name='PbMeta.title', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='description', full_name='PbMeta.description', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='URL', full_name='PbMeta.URL', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -73,8 +71,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=21, - serialized_end=100, + serialized_start=23, + serialized_end=102, ) @@ -102,14 +100,14 @@ _descriptor.FieldDescriptor( name='string_basic', full_name='PbTimeZone.string_basic', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='string_extended', full_name='PbTimeZone.string_extended', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -125,8 +123,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=102, - serialized_end=193, + serialized_start=104, + serialized_end=195, ) @@ -140,7 +138,7 @@ _descriptor.FieldDescriptor( name='key', full_name='PbWorkflow.StateTotalsEntry.key', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -157,14 +155,14 @@ nested_types=[], enum_types=[ ], - serialized_options=_b('8\001'), + serialized_options=b'8\001', is_extendable=False, syntax='proto3', extension_ranges=[], oneofs=[ ], - serialized_start=893, - serialized_end=943, + serialized_start=895, + serialized_end=945, ) _PBWORKFLOW = _descriptor.Descriptor( @@ -177,35 +175,35 @@ _descriptor.FieldDescriptor( name='stamp', full_name='PbWorkflow.stamp', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='id', full_name='PbWorkflow.id', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='name', full_name='PbWorkflow.name', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='status', full_name='PbWorkflow.status', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='host', full_name='PbWorkflow.host', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -219,7 +217,7 @@ _descriptor.FieldDescriptor( name='owner', full_name='PbWorkflow.owner', index=6, number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -254,7 +252,7 @@ _descriptor.FieldDescriptor( name='cylc_version', full_name='PbWorkflow.cylc_version', index=11, number=12, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -275,21 +273,21 @@ _descriptor.FieldDescriptor( name='newest_runahead_cycle_point', full_name='PbWorkflow.newest_runahead_cycle_point', index=14, number=15, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='newest_cycle_point', full_name='PbWorkflow.newest_cycle_point', index=15, number=16, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='oldest_cycle_point', full_name='PbWorkflow.oldest_cycle_point', index=16, number=17, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -303,14 +301,14 @@ _descriptor.FieldDescriptor( name='run_mode', full_name='PbWorkflow.run_mode', index=18, number=19, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='cycling_mode', full_name='PbWorkflow.cycling_mode', index=19, number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -324,7 +322,7 @@ _descriptor.FieldDescriptor( name='workflow_log_dir', full_name='PbWorkflow.workflow_log_dir', index=21, number=22, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -380,7 +378,7 @@ _descriptor.FieldDescriptor( name='status_msg', full_name='PbWorkflow.status_msg', index=29, number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -403,8 +401,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=196, - serialized_end=943, + serialized_start=198, + serialized_end=945, ) @@ -418,14 +416,14 @@ _descriptor.FieldDescriptor( name='stamp', full_name='PbJob.stamp', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='id', full_name='PbJob.id', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -439,70 +437,70 @@ _descriptor.FieldDescriptor( name='state', full_name='PbJob.state', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='task_proxy', full_name='PbJob.task_proxy', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='submitted_time', full_name='PbJob.submitted_time', index=5, number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='started_time', full_name='PbJob.started_time', index=6, number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='finished_time', full_name='PbJob.finished_time', index=7, number=8, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='batch_sys_job_id', full_name='PbJob.batch_sys_job_id', index=8, number=9, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='batch_sys_name', full_name='PbJob.batch_sys_name', index=9, number=10, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='env_script', full_name='PbJob.env_script', index=10, number=11, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='err_script', full_name='PbJob.err_script', index=11, number=12, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='exit_script', full_name='PbJob.exit_script', index=12, number=13, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -516,63 +514,63 @@ _descriptor.FieldDescriptor( name='host', full_name='PbJob.host', index=14, number=15, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='init_script', full_name='PbJob.init_script', index=15, number=16, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='job_log_dir', full_name='PbJob.job_log_dir', index=16, number=17, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='owner', full_name='PbJob.owner', index=17, number=18, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='post_script', full_name='PbJob.post_script', index=18, number=19, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='pre_script', full_name='PbJob.pre_script', index=19, number=20, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='script', full_name='PbJob.script', index=20, number=21, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='shell', full_name='PbJob.shell', index=21, number=22, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='work_sub_dir', full_name='PbJob.work_sub_dir', index=22, number=23, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -621,14 +619,14 @@ _descriptor.FieldDescriptor( name='name', full_name='PbJob.name', index=29, number=30, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='cycle_point', full_name='PbJob.cycle_point', index=30, number=31, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -651,8 +649,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=946, - serialized_end=1591, + serialized_start=948, + serialized_end=1593, ) @@ -666,21 +664,21 @@ _descriptor.FieldDescriptor( name='stamp', full_name='PbTask.stamp', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='id', full_name='PbTask.id', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='name', full_name='PbTask.name', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -731,8 +729,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1594, - serialized_end=1744, + serialized_start=1596, + serialized_end=1746, ) @@ -746,35 +744,35 @@ _descriptor.FieldDescriptor( name='local_proxy', full_name='PbPollTask.local_proxy', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='workflow', full_name='PbPollTask.workflow', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='remote_proxy', full_name='PbPollTask.remote_proxy', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='req_state', full_name='PbPollTask.req_state', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='graph_string', full_name='PbPollTask.graph_string', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -790,8 +788,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1746, - serialized_end=1860, + serialized_start=1748, + serialized_end=1862, ) @@ -805,21 +803,21 @@ _descriptor.FieldDescriptor( name='task_proxy', full_name='PbCondition.task_proxy', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='expr_alias', full_name='PbCondition.expr_alias', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='req_state', full_name='PbCondition.req_state', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -833,7 +831,7 @@ _descriptor.FieldDescriptor( name='message', full_name='PbCondition.message', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -849,8 +847,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1862, - serialized_end=1970, + serialized_start=1864, + serialized_end=1972, ) @@ -864,7 +862,7 @@ _descriptor.FieldDescriptor( name='expression', full_name='PbPrerequisite.expression', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -901,8 +899,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=1972, - serialized_end=2083, + serialized_start=1974, + serialized_end=2085, ) @@ -916,35 +914,35 @@ _descriptor.FieldDescriptor( name='stamp', full_name='PbTaskProxy.stamp', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='id', full_name='PbTaskProxy.id', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='task', full_name='PbTaskProxy.task', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='state', full_name='PbTaskProxy.state', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='cycle_point', full_name='PbTaskProxy.cycle_point', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -972,7 +970,7 @@ _descriptor.FieldDescriptor( name='latest_message', full_name='PbTaskProxy.latest_message', index=8, number=9, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -1021,14 +1019,14 @@ _descriptor.FieldDescriptor( name='first_parent', full_name='PbTaskProxy.first_parent', index=15, number=16, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='name', full_name='PbTaskProxy.name', index=16, number=17, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -1065,8 +1063,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2086, - serialized_end=2467, + serialized_start=2088, + serialized_end=2469, ) @@ -1080,21 +1078,21 @@ _descriptor.FieldDescriptor( name='stamp', full_name='PbFamily.stamp', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='id', full_name='PbFamily.id', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='name', full_name='PbFamily.name', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -1152,8 +1150,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2470, - serialized_end=2638, + serialized_start=2472, + serialized_end=2640, ) @@ -1167,42 +1165,42 @@ _descriptor.FieldDescriptor( name='stamp', full_name='PbFamilyProxy.stamp', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='id', full_name='PbFamilyProxy.id', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='cycle_point', full_name='PbFamilyProxy.cycle_point', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='name', full_name='PbFamilyProxy.name', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='family', full_name='PbFamilyProxy.family', index=4, number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='state', full_name='PbFamilyProxy.state', index=5, number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -1216,7 +1214,7 @@ _descriptor.FieldDescriptor( name='first_parent', full_name='PbFamilyProxy.first_parent', index=7, number=8, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -1267,8 +1265,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2641, - serialized_end=2884, + serialized_start=2643, + serialized_end=2886, ) @@ -1282,28 +1280,28 @@ _descriptor.FieldDescriptor( name='stamp', full_name='PbEdge.stamp', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='id', full_name='PbEdge.id', index=1, number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='source', full_name='PbEdge.source', index=2, number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), _descriptor.FieldDescriptor( name='target', full_name='PbEdge.target', index=3, number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -1333,8 +1331,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2886, - serialized_end=2984, + serialized_start=2888, + serialized_end=2986, ) @@ -1348,7 +1346,7 @@ _descriptor.FieldDescriptor( name='id', full_name='PbEdges.id', index=0, number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), + has_default_value=False, default_value=b"".decode('utf-8'), message_type=None, enum_type=None, containing_type=None, is_extension=False, extension_scope=None, serialized_options=None, file=DESCRIPTOR), @@ -1392,8 +1390,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=2986, - serialized_end=3097, + serialized_start=2988, + serialized_end=3099, ) @@ -1465,8 +1463,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3100, - serialized_end=3324, + serialized_start=3102, + serialized_end=3326, ) @@ -1524,8 +1522,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3326, - serialized_end=3426, + serialized_start=3328, + serialized_end=3428, ) @@ -1583,8 +1581,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3428, - serialized_end=3530, + serialized_start=3430, + serialized_end=3532, ) @@ -1642,8 +1640,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3532, - serialized_end=3640, + serialized_start=3534, + serialized_end=3642, ) @@ -1701,8 +1699,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3642, - serialized_end=3741, + serialized_start=3644, + serialized_end=3743, ) @@ -1760,8 +1758,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3743, - serialized_end=3843, + serialized_start=3745, + serialized_end=3845, ) @@ -1819,8 +1817,8 @@ extension_ranges=[], oneofs=[ ], - serialized_start=3845, - serialized_end=3951, + serialized_start=3847, + serialized_end=3953, ) _PBWORKFLOW_STATETOTALSENTRY.containing_type = _PBWORKFLOW @@ -1870,14 +1868,14 @@ PbMeta = _reflection.GeneratedProtocolMessageType('PbMeta', (_message.Message,), { 'DESCRIPTOR' : _PBMETA, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbMeta) }) _sym_db.RegisterMessage(PbMeta) PbTimeZone = _reflection.GeneratedProtocolMessageType('PbTimeZone', (_message.Message,), { 'DESCRIPTOR' : _PBTIMEZONE, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbTimeZone) }) _sym_db.RegisterMessage(PbTimeZone) @@ -1886,12 +1884,12 @@ 'StateTotalsEntry' : _reflection.GeneratedProtocolMessageType('StateTotalsEntry', (_message.Message,), { 'DESCRIPTOR' : _PBWORKFLOW_STATETOTALSENTRY, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbWorkflow.StateTotalsEntry) }) , 'DESCRIPTOR' : _PBWORKFLOW, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbWorkflow) }) _sym_db.RegisterMessage(PbWorkflow) @@ -1899,119 +1897,119 @@ PbJob = _reflection.GeneratedProtocolMessageType('PbJob', (_message.Message,), { 'DESCRIPTOR' : _PBJOB, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbJob) }) _sym_db.RegisterMessage(PbJob) PbTask = _reflection.GeneratedProtocolMessageType('PbTask', (_message.Message,), { 'DESCRIPTOR' : _PBTASK, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbTask) }) _sym_db.RegisterMessage(PbTask) PbPollTask = _reflection.GeneratedProtocolMessageType('PbPollTask', (_message.Message,), { 'DESCRIPTOR' : _PBPOLLTASK, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbPollTask) }) _sym_db.RegisterMessage(PbPollTask) PbCondition = _reflection.GeneratedProtocolMessageType('PbCondition', (_message.Message,), { 'DESCRIPTOR' : _PBCONDITION, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbCondition) }) _sym_db.RegisterMessage(PbCondition) PbPrerequisite = _reflection.GeneratedProtocolMessageType('PbPrerequisite', (_message.Message,), { 'DESCRIPTOR' : _PBPREREQUISITE, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbPrerequisite) }) _sym_db.RegisterMessage(PbPrerequisite) PbTaskProxy = _reflection.GeneratedProtocolMessageType('PbTaskProxy', (_message.Message,), { 'DESCRIPTOR' : _PBTASKPROXY, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbTaskProxy) }) _sym_db.RegisterMessage(PbTaskProxy) PbFamily = _reflection.GeneratedProtocolMessageType('PbFamily', (_message.Message,), { 'DESCRIPTOR' : _PBFAMILY, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbFamily) }) _sym_db.RegisterMessage(PbFamily) PbFamilyProxy = _reflection.GeneratedProtocolMessageType('PbFamilyProxy', (_message.Message,), { 'DESCRIPTOR' : _PBFAMILYPROXY, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbFamilyProxy) }) _sym_db.RegisterMessage(PbFamilyProxy) PbEdge = _reflection.GeneratedProtocolMessageType('PbEdge', (_message.Message,), { 'DESCRIPTOR' : _PBEDGE, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbEdge) }) _sym_db.RegisterMessage(PbEdge) PbEdges = _reflection.GeneratedProtocolMessageType('PbEdges', (_message.Message,), { 'DESCRIPTOR' : _PBEDGES, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbEdges) }) _sym_db.RegisterMessage(PbEdges) PbEntireWorkflow = _reflection.GeneratedProtocolMessageType('PbEntireWorkflow', (_message.Message,), { 'DESCRIPTOR' : _PBENTIREWORKFLOW, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:PbEntireWorkflow) }) _sym_db.RegisterMessage(PbEntireWorkflow) EDeltas = _reflection.GeneratedProtocolMessageType('EDeltas', (_message.Message,), { 'DESCRIPTOR' : _EDELTAS, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:EDeltas) }) _sym_db.RegisterMessage(EDeltas) FDeltas = _reflection.GeneratedProtocolMessageType('FDeltas', (_message.Message,), { 'DESCRIPTOR' : _FDELTAS, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:FDeltas) }) _sym_db.RegisterMessage(FDeltas) FPDeltas = _reflection.GeneratedProtocolMessageType('FPDeltas', (_message.Message,), { 'DESCRIPTOR' : _FPDELTAS, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:FPDeltas) }) _sym_db.RegisterMessage(FPDeltas) JDeltas = _reflection.GeneratedProtocolMessageType('JDeltas', (_message.Message,), { 'DESCRIPTOR' : _JDELTAS, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:JDeltas) }) _sym_db.RegisterMessage(JDeltas) TDeltas = _reflection.GeneratedProtocolMessageType('TDeltas', (_message.Message,), { 'DESCRIPTOR' : _TDELTAS, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:TDeltas) }) _sym_db.RegisterMessage(TDeltas) TPDeltas = _reflection.GeneratedProtocolMessageType('TPDeltas', (_message.Message,), { 'DESCRIPTOR' : _TPDELTAS, - '__module__' : 'ws_messages_pb2' + '__module__' : 'data_messages_pb2' # @@protoc_insertion_point(class_scope:TPDeltas) }) _sym_db.RegisterMessage(TPDeltas) diff --git a/cylc/flow/ws_data_mgr.py b/cylc/flow/data_store_mgr.py similarity index 98% rename from cylc/flow/ws_data_mgr.py rename to cylc/flow/data_store_mgr.py index 5e90f676306..ec51de4942d 100644 --- a/cylc/flow/ws_data_mgr.py +++ b/cylc/flow/data_store_mgr.py @@ -55,18 +55,19 @@ from time import time import zlib +from cylc.flow import __version__ as CYLC_VERSION from cylc.flow.cycling.loader import get_point -from cylc.flow.task_id import TaskID +from cylc.flow.data_messages_pb2 import ( + PbEdge, PbEntireWorkflow, PbFamily, PbFamilyProxy, + PbJob, PbTask, PbTaskProxy, PbWorkflow, + EDeltas, FDeltas, FPDeltas, JDeltas, TDeltas, TPDeltas) +from cylc.flow.network import API from cylc.flow.suite_status import get_suite_status +from cylc.flow.task_id import TaskID +from cylc.flow.task_job_logs import JOB_LOG_OPTS from cylc.flow.task_state_prop import extract_group_state from cylc.flow.wallclock import ( TIME_ZONE_LOCAL_INFO, TIME_ZONE_UTC_INFO, get_utc_mode) -from cylc.flow.task_job_logs import JOB_LOG_OPTS -from cylc.flow import __version__ as CYLC_VERSION -from cylc.flow.ws_messages_pb2 import ( - PbEdge, PbEntireWorkflow, PbFamily, PbFamilyProxy, - PbJob, PbTask, PbTaskProxy, PbWorkflow, - EDeltas, FDeltas, FPDeltas, JDeltas, TDeltas, TPDeltas) ID_DELIM = '|' @@ -151,7 +152,7 @@ def apply_delta(key, delta, data): del data[key][del_id] -class WsDataMgr: +class DataStoreMgr: """Manage the workflow data store. Attributes: @@ -162,19 +163,19 @@ class WsDataMgr: for each cycle point key. .data (dict): .edges (dict): - cylc.flow.ws_messages_pb2.PbEdge by internal ID. + cylc.flow.data_messages_pb2.PbEdge by internal ID. .families (dict): - cylc.flow.ws_messages_pb2.PbFamily by name (internal ID). + cylc.flow.data_messages_pb2.PbFamily by name (internal ID). .family_proxies (dict): - cylc.flow.ws_messages_pb2.PbFamilyProxy by internal ID. + cylc.flow.data_messages_pb2.PbFamilyProxy by internal ID. .jobs (dict): - cylc.flow.ws_messages_pb2.PbJob by internal ID, managed by + cylc.flow.data_messages_pb2.PbJob by internal ID, managed by cylc.flow.job_pool.JobPool .tasks (dict): - cylc.flow.ws_messages_pb2.PbTask by name (internal ID). + cylc.flow.data_messages_pb2.PbTask by name (internal ID). .task_proxies (dict): - cylc.flow.ws_messages_pb2.PbTaskProxy by internal ID. - .workflow (cylc.flow.ws_messages_pb2.PbWorkflow) + cylc.flow.data_messages_pb2.PbTaskProxy by internal ID. + .workflow (cylc.flow.data_messages_pb2.PbWorkflow) Message containing the global information of the workflow. .descendants (dict): Local store of config.get_first_parent_descendants() @@ -385,7 +386,7 @@ def generate_definition_elements(self): families[f_id].child_families.append(ch_id) # Populate static fields of workflow - workflow.api_version = self.schd.server.API + workflow.api_version = API workflow.cylc_version = CYLC_VERSION workflow.name = self.schd.suite workflow.owner = self.schd.owner @@ -428,7 +429,7 @@ def generate_ghost_task(self, task_id): Returns: - object: cylc.flow.ws_messages_pb2.PbTaskProxy + object: cylc.flow.data_messages_pb2.PbTaskProxy Populated task proxy data element. """ @@ -470,7 +471,7 @@ def generate_ghost_families(self, cycle_points=None): a set of cycle points. Returns: - list: [cylc.flow.ws_messages_pb2.PbFamilyProxy] + list: [cylc.flow.data_messages_pb2.PbFamilyProxy] list of populated family proxy data elements. """ @@ -1016,7 +1017,7 @@ def get_entire_workflow(self): """Gather data elements into single Protobuf message. Returns: - cylc.flow.ws_messages_pb2.PbEntireWorkflow + cylc.flow.data_messages_pb2.PbEntireWorkflow """ diff --git a/cylc/flow/job_pool.py b/cylc/flow/job_pool.py index 99e320788dd..6112b7f6306 100644 --- a/cylc/flow/job_pool.py +++ b/cylc/flow/job_pool.py @@ -28,8 +28,8 @@ TASK_STATUS_READY, TASK_STATUS_SUBMITTED, TASK_STATUS_SUBMIT_FAILED, TASK_STATUS_RUNNING, TASK_STATUS_SUCCEEDED, TASK_STATUS_FAILED) -from cylc.flow.ws_messages_pb2 import PbJob, JDeltas -from cylc.flow.ws_data_mgr import ID_DELIM +from cylc.flow.data_messages_pb2 import PbJob, JDeltas +from cylc.flow.data_store_mgr import ID_DELIM JOB_STATUSES_ALL = [ TASK_STATUS_READY, diff --git a/cylc/flow/network/__init__.py b/cylc/flow/network/__init__.py index c21bc62e024..b55016dd48a 100644 --- a/cylc/flow/network/__init__.py +++ b/cylc/flow/network/__init__.py @@ -36,6 +36,8 @@ UserFiles ) +API = 5 # cylc API version + def encode_(message): """Convert the structure holding a message field from JSON to a string.""" @@ -259,16 +261,7 @@ def stop(self, stop_loop=True): """ self._bespoke_stop() - if stop_loop and self.loop: - if self.loop.is_running(): - future = asyncio.run_coroutine_threadsafe( - self.loop.shutdown_asyncgens(), - self.loop - ) - try: - future.result(2.0) - except asyncio.TimeoutError: - pass + if stop_loop and self.loop and self.loop.is_running(): self.loop.stop() if self.thread and self.thread.is_alive(): self.thread.join() # Wait for processes to return diff --git a/cylc/flow/network/resolvers.py b/cylc/flow/network/resolvers.py index 46933932408..83e72603b0c 100644 --- a/cylc/flow/network/resolvers.py +++ b/cylc/flow/network/resolvers.py @@ -20,7 +20,7 @@ from fnmatch import fnmatchcase from graphene.utils.str_converters import to_snake_case -from cylc.flow.ws_data_mgr import ( +from cylc.flow.data_store_mgr import ( ID_DELIM, EDGES, FAMILY_PROXIES, TASK_PROXIES, WORKFLOW) from cylc.flow.network.schema import NodesEdges, PROXY_NODES diff --git a/cylc/flow/network/scan.py b/cylc/flow/network/scan.py index 7ad0582a536..043dd132a2a 100644 --- a/cylc/flow/network/scan.py +++ b/cylc/flow/network/scan.py @@ -127,7 +127,9 @@ def scan_many(items, methods=None, timeout=None, ordered=False): """Call "identify" method of suites on many host:port. Args: - items (list): list of 'host' string or ('host', port) tuple to scan. + items (list): + list of 'host' string or ('host', port, pub_port, api) + tuple to scan. methods (list): list of 'method' string to be executed when scanning. timeout (float): connection timeout, default is CONNECT_TIMEOUT. ordered (bool): whether to scan items in order or not (default). @@ -136,8 +138,8 @@ def scan_many(items, methods=None, timeout=None, ordered=False): list: [(host, port, identify_result), ...] """ - args = ((reg, host, port, pub_port, timeout, methods) - for reg, host, port, pub_port in items) + args = ((reg, host, port, pub_port, api, timeout, methods) + for reg, host, port, pub_port, api in items) if ordered: yield from async_map(scan_one, args) @@ -146,7 +148,7 @@ def scan_many(items, methods=None, timeout=None, ordered=False): result for _, result in async_unordered_map(scan_one, args)) -async def scan_one(reg, host, port, pub_port, timeout=None, methods=None): +async def scan_one(reg, host, port, pub_port, api, timeout=None, methods=None): """Connect to and identify workflow server if possible. Args: @@ -154,11 +156,12 @@ async def scan_one(reg, host, port, pub_port, timeout=None, methods=None): host (str): Workflow host. port (int): Workflow server port. pub_port (int): Workflow publisher port. + api (str): Workflow API version. timeout (float, optional): Client socket receiver timeout. methods (list): List of methods/endpoints to request. Returns: - tuple: (reg, host, port, result) + tuple: (reg, host, port, pub_port, result) """ if not methods: @@ -171,7 +174,7 @@ async def scan_one(reg, host, port, pub_port, timeout=None, methods=None): if cylc.flow.flags.debug: raise sys.stderr.write("ERROR: %s: %s\n" % (exc, host)) - return (reg, host, port, pub_port, None) + return (reg, host, port, pub_port, api, None) # NOTE: Connect to the suite by host:port, this was the # SuiteRuntimeClient will not attempt to check the contact file @@ -188,13 +191,13 @@ async def scan_one(reg, host, port, pub_port, timeout=None, methods=None): except ClientTimeout as exc: LOG.exception( "Timeout: name:%s, host:%s, port:%s", reg, host, port) - return (reg, host, port, pub_port, MSG_TIMEOUT) + return (reg, host, port, pub_port, api, MSG_TIMEOUT) except ClientError as exc: LOG.exception("ClientError") - return (reg, host, port, pub_port, result or None) + return (reg, host, port, pub_port, api, result or None) else: result.update(msg) - return (reg, host, port, pub_port, result) + return (reg, host, port, pub_port, api, result) def re_compile_filters(patterns_owner=None, patterns_name=None): @@ -227,7 +230,7 @@ def get_scan_items_from_fs( active, or all (active plus registered but dormant), suites. Yields: - tuple - (reg, host, port, pub_port) + tuple - (reg, host, port, pub_port, api) """ if owner_pattern is None: @@ -277,7 +280,8 @@ def get_scan_items_from_fs( reg, contact_data[ContactFileFields.HOST], contact_data[ContactFileFields.PORT], - contact_data[ContactFileFields.PUBLISH_PORT] + contact_data[ContactFileFields.PUBLISH_PORT], + contact_data[ContactFileFields.API] ) else: try: diff --git a/cylc/flow/network/schema.py b/cylc/flow/network/schema.py index 203e66b22f3..6eebbf02847 100644 --- a/cylc/flow/network/schema.py +++ b/cylc/flow/network/schema.py @@ -20,7 +20,7 @@ from typing import Callable, AsyncGenerator, Any from cylc.flow.task_state import TASK_STATUSES_ORDERED -from cylc.flow.ws_data_mgr import ( +from cylc.flow.data_store_mgr import ( ID_DELIM, FAMILIES, FAMILY_PROXIES, JOBS, TASKS, TASK_PROXIES ) diff --git a/cylc/flow/network/server.py b/cylc/flow/network/server.py index e2c332e7ee0..49e952eb3f0 100644 --- a/cylc/flow/network/server.py +++ b/cylc/flow/network/server.py @@ -33,8 +33,8 @@ KEY_META, KEY_NAME, KEY_OWNER, KEY_STATES, KEY_TASKS_BY_STATE, KEY_UPDATE_TIME, KEY_VERSION ) -from cylc.flow.ws_data_mgr import DELTAS_MAP -from cylc.flow.ws_messages_pb2 import PbEntireWorkflow +from cylc.flow.data_store_mgr import DELTAS_MAP +from cylc.flow.data_messages_pb2 import PbEntireWorkflow from cylc.flow import __version__ as CYLC_VERSION # maps server methods to the protobuf message (for client/UIS import) @@ -99,8 +99,6 @@ class SuiteRuntimeServer(ZMQSocketBase): """ - API = 4 # cylc API version - RECV_TIMEOUT = 1 """Max time the SuiteRuntimeServer will wait for an incoming message in seconds. diff --git a/cylc/flow/network/subscriber.py b/cylc/flow/network/subscriber.py index 39fb351ba97..fa1b492901c 100644 --- a/cylc/flow/network/subscriber.py +++ b/cylc/flow/network/subscriber.py @@ -23,7 +23,7 @@ import zmq from cylc.flow.network import ZMQSocketBase, get_location -from cylc.flow.ws_data_mgr import DELTAS_MAP +from cylc.flow.data_store_mgr import DELTAS_MAP def process_delta_msg(btopic, delta_msg, func, *args, **kwargs): diff --git a/cylc/flow/prerequisite.py b/cylc/flow/prerequisite.py index 26de0acb224..75286aaedfc 100644 --- a/cylc/flow/prerequisite.py +++ b/cylc/flow/prerequisite.py @@ -21,7 +21,7 @@ from cylc.flow.conditional_simplifier import ConditionalSimplifier from cylc.flow.cycling.loader import get_point from cylc.flow.exceptions import TriggerExpressionError -from cylc.flow.ws_messages_pb2 import PbPrerequisite, PbCondition +from cylc.flow.data_messages_pb2 import PbPrerequisite, PbCondition class Prerequisite(object): diff --git a/cylc/flow/scheduler.py b/cylc/flow/scheduler.py index a508c949afc..cfd40e50162 100644 --- a/cylc/flow/scheduler.py +++ b/cylc/flow/scheduler.py @@ -54,6 +54,7 @@ TimestampRotatingFileHandler, ReferenceLogFileHandler ) +from cylc.flow.network import API from cylc.flow.network.server import SuiteRuntimeServer from cylc.flow.network.publisher import WorkflowPublisher from cylc.flow.parsec.util import printcfg @@ -89,7 +90,7 @@ TASK_STATUS_FAILED) from cylc.flow.templatevars import load_template_vars from cylc.flow import __version__ as CYLC_VERSION -from cylc.flow.ws_data_mgr import WsDataMgr +from cylc.flow.data_store_mgr import DataStoreMgr from cylc.flow.wallclock import ( get_current_time_string, get_seconds_as_interval_string, @@ -256,7 +257,7 @@ def start(self): if not self.options.no_detach: daemonize(self) self._setup_suite_logger() - self.ws_data_mgr = WsDataMgr(self) + self.ws_data_mgr = DataStoreMgr(self) # *** Network Related *** # TODO: this in zmq asyncio context? @@ -1004,7 +1005,7 @@ def configure_contact(self): fields = suite_files.ContactFileFields contact_data = { fields.API: - str(self.server.API), + str(API), fields.HOST: self.host, fields.NAME: diff --git a/cylc/flow/tests/network/test_client.py b/cylc/flow/tests/network/test_client.py index 818e44b7295..4e7a076b0a0 100644 --- a/cylc/flow/tests/network/test_client.py +++ b/cylc/flow/tests/network/test_client.py @@ -26,7 +26,7 @@ from cylc.flow.network.client import SuiteRuntimeClient from cylc.flow.suite_files import create_auth_files from cylc.flow.tests.util import CylcWorkflowTestCase, create_task_proxy -from cylc.flow.ws_data_mgr import WsDataMgr +from cylc.flow.data_store_mgr import DataStoreMgr SERVER_CONTEXT = zmq.Context() @@ -64,7 +64,7 @@ class TestSuiteRuntimeClient(CylcWorkflowTestCase): def setUp(self) -> None: super(TestSuiteRuntimeClient, self).setUp() - self.scheduler.ws_data_mgr = WsDataMgr(self.scheduler) + self.scheduler.ws_data_mgr = DataStoreMgr(self.scheduler) for name in self.scheduler.config.taskdefs: task_proxy = create_task_proxy( task_name=name, diff --git a/cylc/flow/tests/network/test_publisher.py b/cylc/flow/tests/network/test_publisher.py index 0bef76a3ecb..796d78a63e3 100644 --- a/cylc/flow/tests/network/test_publisher.py +++ b/cylc/flow/tests/network/test_publisher.py @@ -20,7 +20,7 @@ from cylc.flow import LOG from cylc.flow.cfgspec.glbl_cfg import glbl_cfg from cylc.flow.tests.util import CylcWorkflowTestCase, create_task_proxy -from cylc.flow.ws_data_mgr import WsDataMgr, DELTAS_MAP +from cylc.flow.data_store_mgr import DataStoreMgr, DELTAS_MAP from cylc.flow.network.publisher import WorkflowPublisher, serialize_data from cylc.flow.network.subscriber import WorkflowSubscriber @@ -66,7 +66,7 @@ class TestWorkflowPublisher(CylcWorkflowTestCase): def setUp(self) -> None: super(TestWorkflowPublisher, self).setUp() - self.scheduler.ws_data_mgr = WsDataMgr(self.scheduler) + self.scheduler.ws_data_mgr = DataStoreMgr(self.scheduler) for name in self.scheduler.config.taskdefs: task_proxy = create_task_proxy( task_name=name, diff --git a/cylc/flow/tests/network/test_resolvers.py b/cylc/flow/tests/network/test_resolvers.py index d422448f9bf..d28b19ba9ad 100644 --- a/cylc/flow/tests/network/test_resolvers.py +++ b/cylc/flow/tests/network/test_resolvers.py @@ -19,8 +19,8 @@ import asyncio from cylc.flow.tests.util import CylcWorkflowTestCase, create_task_proxy -from cylc.flow.ws_data_mgr import ( - WsDataMgr, ID_DELIM, EDGES, TASK_PROXIES, WORKFLOW +from cylc.flow.data_store_mgr import ( + DataStoreMgr, ID_DELIM, EDGES, TASK_PROXIES, WORKFLOW ) from cylc.flow.network.schema import parse_node_id from cylc.flow.network.resolvers import workflow_filter, node_filter, Resolvers @@ -109,7 +109,7 @@ class TestResolvers(CylcWorkflowTestCase): def setUp(self) -> None: super(TestResolvers, self).setUp() - self.scheduler.ws_data_mgr = WsDataMgr(self.scheduler) + self.scheduler.ws_data_mgr = DataStoreMgr(self.scheduler) for name in self.scheduler.config.taskdefs: task_proxy = create_task_proxy( task_name=name, diff --git a/cylc/flow/tests/network/test_scan.py b/cylc/flow/tests/network/test_scan.py index cb61aecf68c..09b5cfbd96f 100644 --- a/cylc/flow/tests/network/test_scan.py +++ b/cylc/flow/tests/network/test_scan.py @@ -23,6 +23,7 @@ from cylc.flow import flags from cylc.flow.exceptions import SuiteServiceFileError +from cylc.flow.network import API from cylc.flow.network.scan import get_scan_items_from_fs, re_compile_filters @@ -156,6 +157,7 @@ def test_get_scan_items_from_fs_with_owner_active_only( mocked_getpwall.return_value = [ self.pwentry('/bin/bash', 'root', homedir), ] + mocked_contact_file_fields.API = 'api' mocked_contact_file_fields.HOST = 'host' mocked_contact_file_fields.PORT = 'port' mocked_contact_file_fields.PUBLISH_PORT = 'pub_port' @@ -166,7 +168,8 @@ def my_load_contact_file(reg, _): return { 'host': 'localhost', 'port': 9999, - 'pub_port': 1234 + 'pub_port': 1234, + 'api': str(API), } else: raise SuiteServiceFileError(reg) @@ -180,7 +183,8 @@ def my_load_contact_file(reg, _): suites = list(get_scan_items_from_fs( owner_pattern=owner_pattern, active_only=True)) # will match blog/five but will stop once it finds log - self.assertEqual([('good', 'localhost', 9999, 1234)], suites) + self.assertEqual( + [('good', 'localhost', 9999, 1234, str(API))], suites) # --- tests for re_compile_filters() diff --git a/cylc/flow/tests/network/test_server.py b/cylc/flow/tests/network/test_server.py index eee74541c9e..95b53c14c93 100644 --- a/cylc/flow/tests/network/test_server.py +++ b/cylc/flow/tests/network/test_server.py @@ -26,7 +26,7 @@ from cylc.flow.network.server import SuiteRuntimeServer, PB_METHOD_MAP from cylc.flow.suite_files import create_auth_files from cylc.flow.tests.util import CylcWorkflowTestCase, create_task_proxy -from cylc.flow.ws_data_mgr import WsDataMgr +from cylc.flow.data_store_mgr import DataStoreMgr def get_port_range(): @@ -65,7 +65,7 @@ class TestSuiteRuntimeServer(CylcWorkflowTestCase): def setUp(self) -> None: super(TestSuiteRuntimeServer, self).setUp() - self.scheduler.ws_data_mgr = WsDataMgr(self.scheduler) + self.scheduler.ws_data_mgr = DataStoreMgr(self.scheduler) for name in self.scheduler.config.taskdefs: task_proxy = create_task_proxy( task_name=name, diff --git a/cylc/flow/tests/network/test_subscriber.py b/cylc/flow/tests/network/test_subscriber.py index f9538e011a2..91786e866f0 100644 --- a/cylc/flow/tests/network/test_subscriber.py +++ b/cylc/flow/tests/network/test_subscriber.py @@ -22,7 +22,7 @@ from cylc.flow.cfgspec.glbl_cfg import glbl_cfg from cylc.flow.tests.util import CylcWorkflowTestCase, create_task_proxy -from cylc.flow.ws_data_mgr import WsDataMgr +from cylc.flow.data_store_mgr import DataStoreMgr from cylc.flow.network.publisher import WorkflowPublisher from cylc.flow.network.subscriber import WorkflowSubscriber, process_delta_msg @@ -71,7 +71,7 @@ class TestWorkflowSubscriber(CylcWorkflowTestCase): def setUp(self) -> None: super(TestWorkflowSubscriber, self).setUp() - self.scheduler.ws_data_mgr = WsDataMgr(self.scheduler) + self.scheduler.ws_data_mgr = DataStoreMgr(self.scheduler) for name in self.scheduler.config.taskdefs: task_proxy = create_task_proxy( task_name=name, diff --git a/cylc/flow/tests/test_ws_data_mgr.py b/cylc/flow/tests/test_data_store_mgr.py similarity index 96% rename from cylc/flow/tests/test_ws_data_mgr.py rename to cylc/flow/tests/test_data_store_mgr.py index 663eadbe7e1..022b3892cf0 100644 --- a/cylc/flow/tests/test_ws_data_mgr.py +++ b/cylc/flow/tests/test_data_store_mgr.py @@ -17,8 +17,8 @@ from unittest import main from cylc.flow.tests.util import CylcWorkflowTestCase, create_task_proxy -from cylc.flow.ws_data_mgr import ( - WsDataMgr, task_mean_elapsed_time, ID_DELIM, +from cylc.flow.data_store_mgr import ( + DataStoreMgr, task_mean_elapsed_time, ID_DELIM, FAMILY_PROXIES, TASKS, TASK_PROXIES, WORKFLOW ) @@ -33,7 +33,7 @@ def test_task_mean_elapsed_time(): assert result == 5.0 -class TestWsDataMgr(CylcWorkflowTestCase): +class TestDataStoreMgr(CylcWorkflowTestCase): suite_name = "five" suiterc = """ @@ -58,8 +58,8 @@ class TestWsDataMgr(CylcWorkflowTestCase): """ def setUp(self) -> None: - super(TestWsDataMgr, self).setUp() - self.ws_data_mgr = WsDataMgr(self.scheduler) + super(TestDataStoreMgr, self).setUp() + self.ws_data_mgr = DataStoreMgr(self.scheduler) for name in self.scheduler.config.taskdefs: task_proxy = create_task_proxy( task_name=name, @@ -170,7 +170,7 @@ def test_update_data_structure(self): def test_update_family_proxies(self): """Test update_family_proxies. This method will update all - WsDataMgr task_proxies of given cycle point strings.""" + DataStoreMgr task_proxies of given cycle point strings.""" self.ws_data_mgr.initiate_data_model() self.assertEqual(0, len(self._collect_states(FAMILY_PROXIES))) update_tasks = self.task_pool.get_all_tasks() @@ -191,7 +191,7 @@ def test_update_family_proxies(self): def test_update_task_proxies(self): """Test update_task_proxies. This method will iterate over given task instances (TaskProxy), and update any corresponding - WsDataMgr task_proxies.""" + DataStoreMgr task_proxies.""" self.ws_data_mgr.initiate_data_model() self.assertEqual(0, len(self._collect_states(TASK_PROXIES))) update_tasks = self.task_pool.get_all_tasks() diff --git a/cylc/flow/tests/test_job_pool.py b/cylc/flow/tests/test_job_pool.py index b9c9cab9e0d..0b1ca62637c 100644 --- a/cylc/flow/tests/test_job_pool.py +++ b/cylc/flow/tests/test_job_pool.py @@ -19,7 +19,7 @@ from cylc.flow import LOG from cylc.flow.job_pool import JobPool, JOB_STATUSES_ALL -from cylc.flow.ws_data_mgr import ID_DELIM +from cylc.flow.data_store_mgr import ID_DELIM from cylc.flow.wallclock import get_current_time_string diff --git a/cylc/flow/tests/util.py b/cylc/flow/tests/util.py index d00ff9dab04..7120ef19ef8 100644 --- a/cylc/flow/tests/util.py +++ b/cylc/flow/tests/util.py @@ -100,7 +100,6 @@ def init(self, mocked_scheduler: Scheduler) -> None: # Scheduler self.scheduler = mocked_scheduler self.scheduler.server = MagicMock() - self.scheduler.server.API = 1 self.scheduler.suite = self.suite_name self.scheduler.owner = self.owner self.scheduler.config = self.suite_config diff --git a/pytest.ini b/pytest.ini index 65349586284..e7b95751454 100644 --- a/pytest.ini +++ b/pytest.ini @@ -23,7 +23,7 @@ addopts = --verbose --ignore=cylc/flow/tests/parsec/getcfg/bin/one-line.py --ignore=cylc/flow/tests/parsec/synonyms/bin/synonyms.py --ignore=cylc/flow/tests/parsec/nullcfg/bin/empty.py - --ignore=cylc/flow/ws_messages_pb2.py + --ignore=cylc/flow/data_messages_pb2.py testpaths = cylc/flow/ tests/lib/python/ diff --git a/setup.py b/setup.py index 625faf7b315..76fd1c38162 100644 --- a/setup.py +++ b/setup.py @@ -48,7 +48,7 @@ def find_version(*file_paths): 'metomi-isodatetime==1!2.0.*', 'jinja2>=2.10.1, <2.11.0', 'markupsafe==1.1.*', - 'protobuf==3.9.*', + 'protobuf==3.11.*', 'pyzmq==18.0.*' ] tests_require = [ diff --git a/tests/authentication/05-full-control.t b/tests/authentication/05-full-control.t index db2f10b009e..41d76f818f6 100644 --- a/tests/authentication/05-full-control.t +++ b/tests/authentication/05-full-control.t @@ -20,6 +20,8 @@ . "$(dirname "$0")/test_header" set_test_number 12 +API_VERSION="$(python -c 'from cylc.flow.network import API; print(API)')" + install_suite "${TEST_NAME_BASE}" 'basic' TEST_NAME="${TEST_NAME_BASE}-validate" @@ -53,6 +55,8 @@ ${SUITE_NAME} ${USER}@${HOST}:${PORT} ${USER}@${HOST}:${PUBLISH_PORT} Here we test out a multi-line description! Group: (no Group) + API: + ${API_VERSION} URL: (no URL) another_metadata: @@ -76,6 +80,8 @@ ${SUITE_NAME} ${USER}@${HOST}:${PORT} Here we test out a multi-line description! Group: (no Group) + API: + ${API_VERSION} URL: (no URL) another_metadata: @@ -92,6 +98,7 @@ ${SUITE_NAME}|${USER}|${HOST}|port|${PORT}|publish-port|${PUBLISH_PORT} ${SUITE_NAME}|${USER}|${HOST}|title|Authentication test suite. ${SUITE_NAME}|${USER}|${HOST}|description|Stalls when the first task fails. Here we test out a multi-line description! ${SUITE_NAME}|${USER}|${HOST}|group| +${SUITE_NAME}|${USER}|${HOST}|API|${API_VERSION} ${SUITE_NAME}|${USER}|${HOST}|URL| ${SUITE_NAME}|${USER}|${HOST}|another_metadata|1 ${SUITE_NAME}|${USER}|${HOST}|custom_metadata|something_custom @@ -111,6 +118,7 @@ cmp_json 'scan-j.out' 'scan-j.out' <<__END__ "${HOST}", "${PORT}", "${PUBLISH_PORT}", + "${API_VERSION}", { "version":"$(cylc version)", "states":[ diff --git a/tox.ini b/tox.ini index 393521ca82c..355bee4152d 100644 --- a/tox.ini +++ b/tox.ini @@ -10,4 +10,4 @@ exclude= .git, __pycache__, .tox, - ./cylc/flow/ws_messages_pb2.py + ./cylc/flow/data_messages_pb2.py