3x-ui/internal/web/service
PathGao ad5f2a28cb
fix(xray): synchronize lifecycle state (#6138)
* fix(xray): synchronize lifecycle snapshots

Protect process replacement and result caching with a lifecycle state object, so read paths keep one process snapshot while restarts swap state safely. Bound version probing to prevent a stalled binary from holding the restart lock.

* test(xray): cover concurrent lifecycle reads

Exercise status, result, and traffic reads while the managed process is replaced, so the race detector guards the lifecycle snapshot boundary.

* fix(xray): guard process config snapshots

Synchronize hot-applied config snapshots, keep Telegram reads on one lifecycle snapshot, and strengthen lifecycle timeout and concurrency regression coverage.

---------

Co-authored-by: PathGao <gaoyanbo@gaoyanbodeMacBook-Air.local>
2026-07-29 21:00:29 +02:00
..
email Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
integration Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
outbound feat: Add outbound egress metadata (IP + country) (#5886) 2026-07-12 15:09:52 +02:00
panel fix: make all self-managed file downloads/installs atomic, with real completion status (#5711) 2026-07-02 18:19:33 +02:00
tgbot fix(xray): synchronize lifecycle state (#6138) 2026-07-29 21:00:29 +02:00
access_log_parse_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
api_scale_postgres_test.go perf(scale): speed up traffic, auto-renew, and node bulk ops at 50k-100k clients 2026-06-20 10:35:46 +02:00
backup_filename_test.go feat(backup): prefix backup filenames with date and time (#5606) 2026-06-27 12:08:20 +02:00
bulk_clients_test.go fix(node): stop client edits from tearing down node inbounds and harden reconcile fingerprints 2026-07-05 02:06:58 +02:00
bulk_traffic_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client.go
client_add_dedupe_test.go fix(client): stop duplicate client entries accumulating in inbound settings 2026-07-05 21:17:25 +02:00
client_apply_field_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client_bulk.go fix(node): stop a departed master's frozen traffic from disabling clients (#6113) 2026-07-27 14:21:56 +02:00
client_bulk_flow_test.go style: adopt golangci-lint v2 and resolve all findings 2026-06-27 15:42:22 +02:00
client_bulk_reenable_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client_bulk_reset_reenable_test.go fix(clients): surface bulk-reset auto-enable failures (#5763) 2026-07-08 20:53:42 +02:00
client_create_fanout_test.go perf(clients): take one email snapshot per client fan-out, not one per inbound (#6091) 2026-07-25 00:51:48 +02:00
client_create_reuse_test.go fix(clients): reuse stored credentials when re-adding an existing identity 2026-07-11 22:48:51 +02:00
client_crud.go perf(clients): take one email snapshot per client fan-out, not one per inbound (#6091) 2026-07-25 00:51:48 +02:00
client_delete_continue_test.go fix(clients): finish deleting from every inbound when one fails 2026-07-11 22:48:57 +02:00
client_delete_node_baseline_test.go fix(client): clean node_client_traffics rows when deleting a client 2026-07-07 15:05:22 +02:00
client_delete_node_full_test.go fix(node): fully delete clients on nodes instead of only detaching them 2026-07-05 20:28:26 +02:00
client_effective_flow_test.go fix(flow): restore XTLS Vision when an inbound becomes flow-eligible (#5520) 2026-06-24 13:02:42 +02:00
client_email_validation_test.go
client_external_link.go
client_flow_isolation_test.go
client_group_node_sync_test.go
client_group_reset_test.go fix(groups): keep group traffic totals stable across client resets and deletes 2026-07-02 09:17:47 +02:00
client_groups.go refactor: use the built-in max/min to simplify the code (#5751) 2026-07-05 01:58:18 +03:00
client_inbound_apply.go fix(xray): stop the runtime user API from crashing xray-core 2026-07-28 13:52:10 +02:00
client_link.go fix(clients): persist all editable fields for clients with no inbound (#6053) 2026-07-21 15:49:43 +02:00
client_locks.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client_locks_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client_lookup.go feat(api): add GET endpoint to look up clients by Telegram ID (#5945) 2026-07-28 22:38:44 +02:00
client_lookup_test.go feat(api): add GET endpoint to look up clients by Telegram ID (#5945) 2026-07-28 22:38:44 +02:00
client_paging.go fix(clients): include Telegram ID in client list search (#5888) 2026-07-10 12:20:35 +02:00
client_portable.go fix(groups): keep group traffic totals stable across client resets and deletes 2026-07-02 09:17:47 +02:00
client_stat_reuse_test.go fix: refresh stale client_traffics row when an inbound-deleted client's email is reused (#6003) 2026-07-21 15:57:55 +02:00
client_sync_mtproto_test.go feat(mtproto): per-client ad-tags, management-API auth, and record secret sync 2026-07-07 12:00:43 +02:00
client_sync_multiprotocol_test.go
client_test.go
client_traffic.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
client_update_enable_test.go fix(clients): re-enable depleted clients on API renewal (#5619) 2026-06-29 13:39:03 +02:00
client_update_no_inbound_test.go fix(clients): persist all editable fields for clients with no inbound (#6053) 2026-07-21 15:49:43 +02:00
client_update_rename_test.go fix(clients): keep a client editable when its subId is already shared (#6065) 2026-07-24 22:18:39 +02:00
client_wireguard.go fix(wireguard): widen the client address pool past a full /24 (#6089) 2026-07-24 22:21:18 +02:00
client_wireguard_crud_test.go fix(node): fully delete clients on nodes instead of only detaching them 2026-07-05 20:28:26 +02:00
client_wireguard_test.go fix(wireguard): widen the client address pool past a full /24 (#6089) 2026-07-24 22:21:18 +02:00
config.json Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
del_shared_email_runtime_test.go fix(node): fully delete clients on nodes instead of only detaching them 2026-07-05 20:28:26 +02:00
fallback.go style: adopt golangci-lint v2 and resolve all findings 2026-06-27 15:42:22 +02:00
finalmask_rand_packet_test.go fix(xray): reject configs xray-core refuses, and check the fixtures against it 2026-07-28 14:43:55 +02:00
global_traffic_test.go style: drop the line comments added with the triage fixes 2026-07-27 14:37:57 +02:00
golden_fixtures_xray_test.go fix(xray): reject configs xray-core refuses, and check the fixtures against it 2026-07-28 14:43:55 +02:00
host.go fix(hosts): assign group ids to imported hosts and repair empty ones 2026-07-23 18:52:42 +02:00
host_test.go feat(hosts): bulk-add multiple hosts to multiple inbounds (#5677) 2026-07-08 23:35:20 +02:00
inbound.go inbounds: allow custom monthly traffic reset days (#6071) 2026-07-28 23:27:09 +02:00
inbound_autorenew_shadowsocks_test.go fix(xray): stop the runtime user API from crashing xray-core 2026-07-28 13:52:10 +02:00
inbound_autorenew_test.go perf(scale): speed up traffic, auto-renew, and node bulk ops at 50k-100k clients 2026-06-20 10:35:46 +02:00
inbound_client_ips.go fix(node): stop Postgres deadlocks and deleted-client resurrection in node sync 2026-07-02 13:37:06 +02:00
inbound_client_ips_merge_test.go
inbound_client_move_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
inbound_client_traffic_test.go fix(traffic): persist delayed-start expiry only for converted clients 2026-07-02 16:24:18 +02:00
inbound_clients.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
inbound_disable.go fix(xray): synchronize lifecycle state (#6138) 2026-07-29 21:00:29 +02:00
inbound_durable_postgres_test.go fix(inbounds): apply runtime changes after the DB commit (#5768) 2026-07-08 22:12:28 +02:00
inbound_fallback_runtime_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
inbound_finalmask_reality_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
inbound_finalmask_xmc_test.go feat(xray): update xray-core to v26.7.28 and adapt panel 2026-07-28 13:14:06 +02:00
inbound_flow_restore.go fix(flow): restore XTLS Vision when an inbound becomes flow-eligible (#5520) 2026-06-24 13:02:42 +02:00
inbound_flow_restore_test.go fix(flow): restore XTLS Vision when an inbound becomes flow-eligible (#5520) 2026-06-24 13:02:42 +02:00
inbound_import_external_proxy_test.go fix(inbound): convert legacy externalProxy to hosts on import 2026-06-27 13:50:06 +02:00
inbound_import_shared_clients_test.go fix: refresh stale client_traffics row when an inbound-deleted client's email is reused (#6003) 2026-07-21 15:57:55 +02:00
inbound_migration.go fix: stop deleting client_traffics for detached-but-alive clients (#6110) 2026-07-28 22:14:01 +02:00
inbound_migration_test.go fix: stop deleting client_traffics for detached-but-alive clients (#6110) 2026-07-28 22:14:01 +02:00
inbound_mtproto.go feat(mtproto): enforce per-client quota & expiry via mtg-multi limits 2026-07-08 15:30:56 +02:00
inbound_mtproto_apply_test.go fix(mtproto): stop dropping connections on client/inbound edits; add live updates + ad-tag (#5838) 2026-07-07 01:13:24 +02:00
inbound_mtproto_client_test.go fix(mtproto): stop dropping connections on client/inbound edits; add live updates + ad-tag (#5838) 2026-07-07 01:13:24 +02:00
inbound_mtproto_desired_test.go fix(mtproto): stop dropping connections on client/inbound edits; add live updates + ad-tag (#5838) 2026-07-07 01:13:24 +02:00
inbound_mtproto_test.go fix(mtproto): stop persisting a vestigial inbound-level secret 2026-07-06 17:55:57 +02:00
inbound_mtproto_txfail_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
inbound_node.go fix(xray): synchronize lifecycle state (#6138) 2026-07-29 21:00:29 +02:00
inbound_node_ips.go fix(node): stop Postgres deadlocks and deleted-client resurrection in node sync 2026-07-02 13:37:06 +02:00
inbound_node_ips_test.go fix(nodes): cloned-node attribution, node-hosted client display (online/speed/counts), and sync robustness (#5488) 2026-06-22 20:20:55 +02:00
inbound_node_reconcile_test.go fix(node): never sweep a node's inbounds before their first adoption 2026-07-11 22:48:57 +02:00
inbound_options_node_address_test.go fix(panel): use the hosting node address for WireGuard client configs (#5679) 2026-07-03 01:12:32 +02:00
inbound_protocol.go
inbound_protocol_test.go
inbound_settings_clients.go fix(clients): parse only settings.clients across protocols (#5855) 2026-07-08 20:31:00 +02:00
inbound_settings_clients_test.go fix(clients): parse only settings.clients across protocols (#5855) 2026-07-08 20:31:00 +02:00
inbound_sub_sort_test.go
inbound_sublink.go feat(inbounds): apply remark template to Export all inbound links 2026-06-27 11:22:45 +02:00
inbound_tgbot_lookup_test.go fix(tgbot): find clients by tgId regardless of settings JSON formatting 2026-07-05 20:18:59 +02:00
inbound_traffic.go fix(xray): synchronize lifecycle state (#6138) 2026-07-29 21:00:29 +02:00
inbound_traffic_global.go fix(node): stop a departed master's frozen traffic from disabling clients (#6113) 2026-07-27 14:21:56 +02:00
inbound_traffic_reset_test.go inbounds: allow custom monthly traffic reset days (#6071) 2026-07-28 23:27:09 +02:00
inbound_update_tag_test.go fix(inbound): scope port-conflict check to the stored node on update (#5833) 2026-07-09 01:18:30 +02:00
inbound_util.go
key_gen_parse_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
metric_history.go chore: refresh dependencies, fix Linux tool tasks, modernize Go idioms 2026-07-25 16:08:09 +02:00
metric_history_test.go chore: bump deps and modernize test loops 2026-06-26 00:10:30 +02:00
mtproto_fake_test.go fix(mtproto): stop dropping connections on client/inbound edits; add live updates + ad-tag (#5838) 2026-07-07 01:13:24 +02:00
node.go fix(nodes): make node API tokens write-only (#5613) 2026-07-23 15:35:11 +02:00
node_bulk_dispatch_test.go fix(inbounds): apply runtime changes after the DB commit (#5768) 2026-07-08 22:12:28 +02:00
node_client_breakdown_test.go fix(inbounds): apply runtime changes after the DB commit (#5768) 2026-07-08 22:12:28 +02:00
node_client_expiry_sync_test.go fix(node): show the activated first-use deadline on the Clients page 2026-07-02 09:36:07 +02:00
node_client_renew_sync_test.go fix(node): start a fresh quota window when a node auto-renews a client 2026-07-07 15:05:23 +02:00
node_client_traffic_sum_test.go fix(node): stop Postgres deadlocks and deleted-client resurrection in node sync 2026-07-02 13:37:06 +02:00
node_contract.go fix(nodes): make node API tokens write-only (#5613) 2026-07-23 15:35:11 +02:00
node_credentials_writeonly_test.go fix(nodes): make node API tokens write-only (#5613) 2026-07-23 15:35:11 +02:00
node_delete_orphan_test.go
node_dirty_test.go fix(node): fully delete clients on nodes instead of only detaching them 2026-07-05 20:28:26 +02:00
node_host_adopt_test.go fix(node): adopt a node inbound's host overrides into the master 2026-07-11 23:17:57 +02:00
node_mtls.go
node_mtls_test.go style: adopt golangci-lint v2 and resolve all findings 2026-06-27 15:42:22 +02:00
node_netmetrics_test.go
node_origin_guid_test.go fix(nodes): cloned-node attribution, node-hosted client display (online/speed/counts), and sync robustness (#5488) 2026-06-22 20:20:55 +02:00
node_shared_guid_test.go fix(nodes): cloned-node attribution, node-hosted client display (online/speed/counts), and sync robustness (#5488) 2026-06-22 20:20:55 +02:00
node_tag_sync_test.go
node_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
node_tree.go fix(nodes): make node API tokens write-only (#5613) 2026-07-23 15:35:11 +02:00
node_tree_test.go fix(inbounds): apply runtime changes after the DB commit (#5768) 2026-07-08 22:12:28 +02:00
outbound_subscription.go fix(xray): synchronize lifecycle state (#6138) 2026-07-29 21:00:29 +02:00
outbound_subscription_ssrf_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
outbound_subscription_test.go fix(subscription): bound outbound response body (#5493) 2026-06-23 10:48:01 +02:00
port_conflict.go
port_conflict_test.go style: adopt golangci-lint v2 and resolve all findings 2026-06-27 15:42:22 +02:00
reality_scan.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
reality_scan_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
reset_writer_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
scale_helpers_test.go refactor: modernize Go with strings.SplitSeq and maps.Copy 2026-07-08 22:10:54 +02:00
server.go fix(xray): synchronize lifecycle state (#6138) 2026-07-29 21:00:29 +02:00
server_import_sniff_test.go feat(server): sniff sqlite panel restore uploads and keep the fallback on failure 2026-07-12 20:14:22 +02:00
server_import_stage_test.go feat(server): sniff sqlite panel restore uploads and keep the fallback on failure 2026-07-12 20:14:22 +02:00
server_pg_restore_test.go feat(db): add pgclient command to install or upgrade PostgreSQL client tools 2026-07-06 09:24:18 +02:00
server_vlessenc_test.go feat(web): vless encryption new modes (#5517) 2026-06-24 21:22:42 +02:00
server_xray_checksum_test.go
setting.go feat(ui): tag settings that sit at their shipped default value (#6128) 2026-07-29 08:03:21 +02:00
setting_clash_test.go feat(sub): auto-detect subscription format by User-Agent (Updated) (#5826) 2026-07-14 13:01:40 +02:00
setting_factory_defaults_test.go feat(ui): tag settings that sit at their shipped default value (#6128) 2026-07-29 08:03:21 +02:00
setting_mtls.go
setting_mtls_test.go
setting_security_test.go feat(settings): let users clear stored secrets from the UI 2026-07-02 13:57:34 +02:00
setting_sub_identity_test.go feat(sub): allow identity tokens on every subscription link (#5935) 2026-07-28 22:12:52 +02:00
shadowsocks_client_key_test.go
stream_network_alias_test.go feat(xray): update xray-core to v26.7.11 and adapt panel 2026-07-12 00:30:47 +02:00
sub_uri_base_test.go
sync_scale_postgres_test.go fix(node): fully delete clients on nodes instead of only detaching them 2026-07-05 20:28:26 +02:00
traffic_commit_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
traffic_poll_scale_test.go test(scale): cover traffic poll, ws payloads, ip-limit job, sub and xray config at 500k 2026-07-02 16:12:46 +02:00
traffic_writer.go
traffic_writer_test.go
url_safety.go
ws_payload_scale_test.go test(scale): cover traffic poll, ws payloads, ip-limit job, sub and xray config at 500k 2026-07-02 16:12:46 +02:00
xray.go fix(xray): synchronize lifecycle state (#6138) 2026-07-29 21:00:29 +02:00
xray_config_clients_test.go style: drop the line comments added with the triage fixes 2026-07-27 14:37:57 +02:00
xray_config_inject_test.go fix(xray): validate generated egress targets (#5989) 2026-07-21 15:57:34 +02:00
xray_config_scale_test.go test(scale): cover traffic poll, ws payloads, ip-limit job, sub and xray config at 500k 2026-07-02 16:12:46 +02:00
xray_lifecycle_test.go fix(xray): synchronize lifecycle state (#6138) 2026-07-29 21:00:29 +02:00
xray_metrics.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
xray_metrics_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
xray_restart_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
xray_setting.go fix(xray): synchronize lifecycle state (#6138) 2026-07-29 21:00:29 +02:00
xray_setting_dns_routing.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
xray_setting_dns_routing_test.go Bug-label issue sweep: 16 fixes (#6083) 2026-07-23 15:34:42 +02:00
xray_setting_routing_sync.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
xray_setting_routing_sync_test.go Repo-wide self-correcting audit: 54 verified bug fixes (#5970) 2026-07-17 00:33:06 +02:00
xray_setting_test.go fix: gate embedded unencrypted-outbound rejection on running Xray core version (#6028) 2026-07-21 15:51:46 +02:00
xray_strip_rules_test.go
xray_wireguard_config_test.go feat(wireguard): multi-client support 2026-06-28 00:44:38 +02:00
xray_xhttp_session_test.go feat(xhttp): support sessionID* rename + sessionIDTable/Length (xray v26.6.22) (#5506) 2026-06-23 17:38:16 +02:00