diff --git a/ydb/core/cms/api_adapters.cpp b/ydb/core/cms/api_adapters.cpp index 4ec7c2c7c11b..18fe27185554 100644 --- a/ydb/core/cms/api_adapters.cpp +++ b/ydb/core/cms/api_adapters.cpp @@ -163,6 +163,7 @@ class TListClusterNodes: public TAdapterActor< out.set_host(in.Host); out.set_port(in.IcPort); out.set_state(ConvertNodeState(in.State)); + *out.mutable_start_time() = TimeUtil::MicrosecondsToTimestamp(in.StartTime.GetValue()); auto& location = *out.mutable_location(); location.set_data_center(in.Location.GetDataCenterId()); diff --git a/ydb/core/cms/cms.cpp b/ydb/core/cms/cms.cpp index 12f543aa5cc8..6e3335b45695 100644 --- a/ydb/core/cms/cms.cpp +++ b/ydb/core/cms/cms.cpp @@ -1160,6 +1160,7 @@ void TCms::AddHostState(const TClusterInfoPtr &clusterInfo, const TNodeInfo &nod host->SetNodeId(node.NodeId); host->SetInterconnectPort(node.IcPort); host->SetTimestamp(timestamp.GetValue()); + host->SetStartTimeSeconds(node.StartTime.Seconds()); node.Location.Serialize(host->MutableLocation(), false); for (auto marker : node.Markers) { host->AddMarkers(marker); diff --git a/ydb/core/protos/cms.proto b/ydb/core/protos/cms.proto index e8d9160f3332..680a5b72accf 100644 --- a/ydb/core/protos/cms.proto +++ b/ydb/core/protos/cms.proto @@ -77,6 +77,7 @@ message THostState { optional uint32 InterconnectPort = 7; repeated EMarker Markers = 8; optional NActorsInterconnect.TNodeLocation Location = 9; + optional uint32 StartTimeSeconds = 10; } message TClusterState { diff --git a/ydb/public/api/protos/draft/ydb_maintenance.proto b/ydb/public/api/protos/draft/ydb_maintenance.proto index 904fdc2ed331..8dc461221314 100644 --- a/ydb/public/api/protos/draft/ydb_maintenance.proto +++ b/ydb/public/api/protos/draft/ydb_maintenance.proto @@ -41,6 +41,8 @@ message Node { StorageNode storage = 6; DynamicNode dynamic = 7; } + // start_time defines time when node was registered in cms. + google.protobuf.Timestamp start_time = 8; } message ListClusterNodesRequest {