)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14958748b4e378a8693b6f326421c805c4335342","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Add a new field \u0027topic_alt\u0027 in service: object, DB, notification payload"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For the compute service graceful shutdown, we need a 2nd RPC server for"},{"line_number":10,"context_line":"comoute service which will listen to the new topic (different than the"},{"line_number":11,"context_line":"current \u0027compute\u0027 topic). To add the 2nd RPC server, we need to add the"},{"line_number":12,"context_line":"new topic field \u0027topic_alt\u0027 in service object and service DB table. This"},{"line_number":13,"context_line":"commit does the following:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"5fe32412_1215e4ce","line":10,"range":{"start_line":10,"start_character":0,"end_line":10,"end_character":7},"updated":"2026-01-30 10:34:49.000000000","message":"nit:compute","commit_id":"eba27e9d335558a467bd1bf5f4e38db0f5d30e9b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14958748b4e378a8693b6f326421c805c4335342","unresolved":true,"context_lines":[{"line_number":24,"context_line":"In the next changes in this series, this new topic_alt field will be used"},{"line_number":25,"context_line":"in compute service to create the 2nd RPC server and then use that 2nd RPC"},{"line_number":26,"context_line":"servers to complete the in-progress tasks during graceful shutdown."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Partial implement blueprint nova-services-graceful-shutdown-part1"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I169d3c5e99d21ad1fc76e2c1207975835ae47124"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7af1e5d3_601b3bd0","line":27,"updated":"2026-01-30 10:34:49.000000000","message":"Does the compute service itself depends on the new ovo field? Or is that only needed for the RPC client creation later in the series? \n\nAs far as I see for the RPC server creation the topic name is passed and just a kwargs to the service. https://review.opendev.org/c/openstack/nova/+/975242/2/nova/cmd/compute.py#65\n\n// later\n\nDo we even need the old / new topics fields? The value of those fields are hard coded so it will never be other than compute and compute-alt. So it is strange why we have the old topic field in the DB at all. It is for some future proofing where the future never arrived?","commit_id":"eba27e9d335558a467bd1bf5f4e38db0f5d30e9b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"c315e6323d4454ed963881b3356f4c05ce7b0ccd","unresolved":false,"context_lines":[{"line_number":24,"context_line":"In the next changes in this series, this new topic_alt field will be used"},{"line_number":25,"context_line":"in compute service to create the 2nd RPC server and then use that 2nd RPC"},{"line_number":26,"context_line":"servers to complete the in-progress tasks during graceful shutdown."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Partial implement blueprint nova-services-graceful-shutdown-part1"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"Change-Id: I169d3c5e99d21ad1fc76e2c1207975835ae47124"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"2cf30aec_13853804","line":27,"in_reply_to":"7af1e5d3_601b3bd0","updated":"2026-01-30 19:21:59.000000000","message":"yeah, I was thinking the same initially but then proposed the same line as old \u0027topic\u0027 field. This field is not updatable and not exposed outside.\n\nAfter checking with Dan on IRC, it was used during nova-network time to get the network manager - https://github.com/openstack/nova/blob/icehouse-eol/nova/network/manager.py#L249\n\nThat explain that we do not need to add this new field as that will not be used. I will abandon this change.","commit_id":"eba27e9d335558a467bd1bf5f4e38db0f5d30e9b"}],"nova/db/main/api.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14958748b4e378a8693b6f326421c805c4335342","unresolved":true,"context_lines":[{"line_number":447,"context_line":"    return query.all()"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"@pick_context_manager_reader"},{"line_number":451,"context_line":"def service_get_all_by_topic(context, topic):"},{"line_number":452,"context_line":"    \"\"\"Get all services for a given topic.\"\"\""},{"line_number":453,"context_line":"    return model_query(context, models.Service, read_deleted\u003d\"no\").\\"},{"line_number":454,"context_line":"                filter_by(disabled\u003dFalse).\\"},{"line_number":455,"context_line":"                filter_by(topic\u003dtopic).\\"},{"line_number":456,"context_line":"                all()"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"@pick_context_manager_reader"},{"line_number":460,"context_line":"def service_get_by_host_and_topic(context, host, topic):"},{"line_number":461,"context_line":"    \"\"\"Get a service by hostname and topic it listens to.\"\"\""},{"line_number":462,"context_line":"    return model_query(context, models.Service, read_deleted\u003d\"no\").\\"},{"line_number":463,"context_line":"                filter_by(disabled\u003dFalse).\\"},{"line_number":464,"context_line":"                filter_by(host\u003dhost).\\"},{"line_number":465,"context_line":"                filter_by(topic\u003dtopic).\\"},{"line_number":466,"context_line":"                first()"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"@pick_context_manager_reader"},{"line_number":470,"context_line":"def service_get_all_by_topic_alt(context, topic_alt):"},{"line_number":471,"context_line":"    \"\"\"Get all services for a given topic_alt.\"\"\""},{"line_number":472,"context_line":"    return model_query(context, models.Service, read_deleted\u003d\"no\").\\"},{"line_number":473,"context_line":"                filter_by(disabled\u003dFalse).\\"},{"line_number":474,"context_line":"                filter_by(topic_alt\u003dtopic_alt).\\"},{"line_number":475,"context_line":"                all()"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"@pick_context_manager_reader"},{"line_number":479,"context_line":"def service_get_by_host_and_topic_alt(context, host, topic_alt):"},{"line_number":480,"context_line":"    \"\"\"Get a service by hostname and topic_alt it listens to.\"\"\""},{"line_number":481,"context_line":"    return model_query(context, models.Service, read_deleted\u003d\"no\").\\"},{"line_number":482,"context_line":"                filter_by(disabled\u003dFalse).\\"},{"line_number":483,"context_line":"                filter_by(host\u003dhost).\\"},{"line_number":484,"context_line":"                filter_by(topic_alt\u003dtopic_alt).\\"},{"line_number":485,"context_line":"                first()"},{"line_number":486,"context_line":""},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"@pick_context_manager_reader"},{"line_number":489,"context_line":"def service_get_all_by_binary(context, binary, include_disabled\u003dFalse):"},{"line_number":490,"context_line":"    \"\"\"Get services for a given binary."}],"source_content_type":"text/x-python","patch_set":2,"id":"93c87bb5_7a7222df","line":487,"range":{"start_line":450,"start_character":0,"end_line":487,"end_character":0},"updated":"2026-01-30 10:34:49.000000000","message":"Are these functions ever used for something outside of our tests? I don\u0027t find any usage. If so then I rather removed them than adding more unused code","commit_id":"eba27e9d335558a467bd1bf5f4e38db0f5d30e9b"}],"nova/db/main/migrations/versions/a5c53108f389_add_topic_alt_to_services.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14958748b4e378a8693b6f326421c805c4335342","unresolved":true,"context_lines":[{"line_number":32,"context_line":"    for prefix in (\u0027\u0027, \u0027shadow_\u0027):"},{"line_number":33,"context_line":"        table_name \u003d prefix + \u0027services\u0027"},{"line_number":34,"context_line":"        with op.batch_alter_table(table_name, schema\u003dNone) as batch_op:"},{"line_number":35,"context_line":"            batch_op.add_column(sa.Column(\u0027topic_alt\u0027, sa.String(255)))"}],"source_content_type":"text/x-python","patch_set":2,"id":"06ff8881_16e43d8d","line":35,"updated":"2026-01-30 10:34:49.000000000","message":"OK we add the field. But when / where a pre-existing nova-compute will fill the field with the value? Does the compute at every startup automatically update the service record? Will that be enough? I.e. DB schema and conductor/api is updated with the new code but not all computes is updated yet. Then there will be compute service records in the DB with topic_alt being empty. Will this cause any trouble for the conductor/api when creating an RPC client for those computes?","commit_id":"eba27e9d335558a467bd1bf5f4e38db0f5d30e9b"}],"nova/objects/service.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14958748b4e378a8693b6f326421c805c4335342","unresolved":true,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# NOTE(danms): This is the global service version counter"},{"line_number":40,"context_line":"SERVICE_VERSION \u003d 70"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# NOTE(danms): This is our SERVICE_VERSION history. The idea is that any"}],"source_content_type":"text/x-python","patch_set":2,"id":"97cef9ef_44392c3f","line":40,"updated":"2026-01-30 10:34:49.000000000","message":"Do we need a service version bump to signal that this compute now capable of handling two topics?","commit_id":"eba27e9d335558a467bd1bf5f4e38db0f5d30e9b"}],"nova/test.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14958748b4e378a8693b6f326421c805c4335342","unresolved":true,"context_lines":[{"line_number":461,"context_line":"            # Make sure that CONF.host is relevant to the right hostname"},{"line_number":462,"context_line":"            self.useFixture(nova_fixtures.ConfPatcher(host\u003dhost))"},{"line_number":463,"context_line":"        if name \u003d\u003d \u0027compute\u0027 and \u0027topic_alt\u0027 not in kwargs:"},{"line_number":464,"context_line":"            kwargs[\u0027topic_alt\u0027] \u003d \u0027compute-alt\u0027"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        if name \u003d\u003d \u0027compute\u0027 and self.USES_DB:"},{"line_number":467,"context_line":"            # NOTE(danms): We need to create the HostMapping first, because"}],"source_content_type":"text/x-python","patch_set":2,"id":"421d5c9f_138edc36","line":464,"updated":"2026-01-30 10:34:49.000000000","message":"Hm. Why do we need this? Where does the test sets the old topic param? I think we should set the topic_alt param the same place as well?","commit_id":"eba27e9d335558a467bd1bf5f4e38db0f5d30e9b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14958748b4e378a8693b6f326421c805c4335342","unresolved":true,"context_lines":[{"line_number":470,"context_line":"            ctxt \u003d context.get_context()"},{"line_number":471,"context_line":"            cell_name \u003d cell_name or CELL1_NAME"},{"line_number":472,"context_line":"            cell \u003d self.cell_mappings[cell_name]"},{"line_number":473,"context_line":"            if \u0027topic_alt\u0027 not in kwargs:"},{"line_number":474,"context_line":"                kwargs[\u0027topic_alt\u0027] \u003d \u0027compute-alt\u0027"},{"line_number":475,"context_line":"            svc \u003d self.useFixture("},{"line_number":476,"context_line":"                nova_fixtures.ServiceFixture(name, host, cell\u003dcell, **kwargs))"}],"source_content_type":"text/x-python","patch_set":2,"id":"90fe3d22_8f14be13","line":473,"updated":"2026-01-30 10:34:49.000000000","message":"ditto","commit_id":"eba27e9d335558a467bd1bf5f4e38db0f5d30e9b"}],"nova/tests/functional/notification_sample_tests/test_service.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"14958748b4e378a8693b6f326421c805c4335342","unresolved":true,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def test_service_create(self):"},{"line_number":152,"context_line":"        self.compute2 \u003d self.start_service("},{"line_number":153,"context_line":"            \u0027compute\u0027, host\u003d\u0027host2\u0027, topic_alt\u003d\u0027compute-alt\u0027)"},{"line_number":154,"context_line":"        self._verify_notification("},{"line_number":155,"context_line":"            \u0027service-create\u0027,"},{"line_number":156,"context_line":"            replacements\u003d{"}],"source_content_type":"text/x-python","patch_set":2,"id":"242086b0_4b5dace8","line":153,"updated":"2026-01-30 10:34:49.000000000","message":"it is interesting that we did not need to set the topic param explicitly here originally.","commit_id":"eba27e9d335558a467bd1bf5f4e38db0f5d30e9b"}]}
