Skip to content

Commit

Permalink
store history of changes made to hive via http (ydb-platform#1637)
Browse files Browse the repository at this point in the history
  • Loading branch information
vporyadke authored Feb 12, 2024
1 parent 590c21c commit c1d5a30
Show file tree
Hide file tree
Showing 7 changed files with 307 additions and 70 deletions.
12 changes: 11 additions & 1 deletion ydb/core/mind/hive/hive_schema.h
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,15 @@ struct Schema : NIceDb::Schema {
using TColumns = TableColumns<Node, TabletType, MaxCount>;
};

struct OperationsLog : Table<21> {
struct Timestamp : Column<1, NScheme::NTypeIds::Uint64> {};
struct User : Column<2, NScheme::NTypeIds::String> {};
struct Operation : Column<3, NScheme::NTypeIds::String> {}; // JSON

using TKey = TableKey<Timestamp>;
using TColumns = TableColumns<Timestamp, User, Operation>;
};

using TTables = SchemaTables<
State,
Tablet,
Expand All @@ -313,7 +322,8 @@ struct Schema : NIceDb::Schema {
SubDomain,
BlockedOwner,
TabletOwners,
TabletAvailabilityRestrictions
TabletAvailabilityRestrictions,
OperationsLog
>;
using TSettings = SchemaSettings<
ExecutorLogBatching<true>,
Expand Down
281 changes: 217 additions & 64 deletions ydb/core/mind/hive/monitoring.cpp

Large diffs are not rendered by default.

23 changes: 23 additions & 0 deletions ydb/core/mind/hive/monitoring.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#include <library/cpp/json/json_writer.h>
#include <ydb/core/protos/hive.pb.h>
#include <ydb/core/tablet_flat/flat_cxx_database.h>
#include <ydb/library/aclib/aclib.h>
#include <ydb/library/actors/core/mon.h>

namespace NKikimr {
namespace NHive {

class TLoggedMonTransaction {
private:
TInstant Timestamp;
TString User;

protected:
TLoggedMonTransaction(const NMon::TEvRemoteHttpInfo::TPtr& ev);

bool Prepare(NIceDb::TNiceDb& db);
void WriteOperation(NIceDb::TNiceDb& db, const NJson::TJsonValue& op);
};

}
}
2 changes: 2 additions & 0 deletions ydb/core/mind/hive/ya.make
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ SRCS(
leader_tablet_info.h
metrics.h
monitoring.cpp
monitoring.h
node_info.cpp
node_info.h
object_distribution.h
Expand Down Expand Up @@ -82,6 +83,7 @@ SRCS(
)

PEERDIR(
ydb/library/aclib
ydb/library/actors/core
ydb/library/actors/interconnect
library/cpp/containers/ring_buffer
Expand Down
11 changes: 6 additions & 5 deletions ydb/core/tablet/tablet_monitoring_proxy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@ class TForwardingActor : public TActorBootstrapped<TForwardingActor> {
return NKikimrServices::TActivity::TABLET_FORWARDING_ACTOR;
}

TForwardingActor(const TTabletMonitoringProxyConfig& config, ui64 targetTablet, bool forceFollower, const TActorId& sender, const NMonitoring::IMonHttpRequest& request)
TForwardingActor(const TTabletMonitoringProxyConfig& config, ui64 targetTablet, bool forceFollower, const TActorId& sender, const NMonitoring::IMonHttpRequest& request, const TString& userToken)
: Config(config)
, TargetTablet(targetTablet)
, ForceFollower(forceFollower)
, Sender(sender)
, Request(ConvertRequestToProtobuf(request))
, Request(ConvertRequestToProtobuf(request, userToken))
{}

static NActorsProto::TRemoteHttpInfo ConvertRequestToProtobuf(const NMonitoring::IMonHttpRequest& request) {
static NActorsProto::TRemoteHttpInfo ConvertRequestToProtobuf(const NMonitoring::IMonHttpRequest& request, const TString& userToken) {
NActorsProto::TRemoteHttpInfo pb;
pb.SetMethod(request.GetMethod());
pb.SetPath(TString(request.GetPathInfo()));
Expand All @@ -70,6 +70,7 @@ class TForwardingActor : public TActorBootstrapped<TForwardingActor> {
if (const auto& addr = request.GetRemoteAddr()) {
pb.SetRemoteAddr(addr.data(), addr.size());
}
pb.SetUserToken(userToken);
return pb;
}

Expand Down Expand Up @@ -279,7 +280,7 @@ TTabletMonitoringProxyActor::Handle(NMon::TEvHttpInfo::TPtr &ev, const TActorCon
const TString &tabletIdParam = cgi->Get("FollowerID");
const ui64 tabletId = TryParseTabletId(tabletIdParam);
if (tabletId) {
ctx.ExecutorThread.RegisterActor(new TForwardingActor(Config, tabletId, true, ev->Sender, msg->Request));
ctx.ExecutorThread.RegisterActor(new TForwardingActor(Config, tabletId, true, ev->Sender, msg->Request, msg->UserToken));
return;
}
}
Expand All @@ -289,7 +290,7 @@ TTabletMonitoringProxyActor::Handle(NMon::TEvHttpInfo::TPtr &ev, const TActorCon
const TString &tabletIdParam = cgi->Get("TabletID");
const ui64 tabletId = TryParseTabletId(tabletIdParam);
if (tabletId) {
ctx.ExecutorThread.RegisterActor(new TForwardingActor(Config, tabletId, false, ev->Sender, msg->Request));
ctx.ExecutorThread.RegisterActor(new TForwardingActor(Config, tabletId, false, ev->Sender, msg->Request, msg->UserToken));
return;
}
}
Expand Down
1 change: 1 addition & 0 deletions ydb/library/actors/protos/actors.proto
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ message TRemoteHttpInfo {
optional bytes PostContent = 8;
repeated THeader Headers = 9;
optional string RemoteAddr = 7;
optional string UserToken = 10;

// for compatibility reasons (incorrect field types merged in 21-4)
reserved 5;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -549,6 +549,53 @@
}
}
},
{
"TableId": 21,
"TableName": "OperationsLog",
"TableKey": [
1
],
"ColumnsAdded": [
{
"ColumnId": 1,
"ColumnName": "Timestamp",
"ColumnType": "Uint64"
},
{
"ColumnId": 2,
"ColumnName": "User",
"ColumnType": "String"
},
{
"ColumnId": 3,
"ColumnName": "Operation",
"ColumnType": "String"
}
],
"ColumnsDropped": [],
"ColumnFamilies": {
"0": {
"Columns": [
1,
2,
3
],
"RoomID": 0,
"Codec": 0,
"InMemory": false,
"Cache": 0,
"Small": 4294967295,
"Large": 4294967295
}
},
"Rooms": {
"0": {
"Main": 1,
"Outer": 1,
"Blobs": 1
}
}
},
{
"TableId": 4,
"TableName": "Node",
Expand Down

0 comments on commit c1d5a30

Please sign in to comment.