Skip to content

Commit db635ac

Browse files
committed
Make it possible to change in-memory setting for tables
1 parent 97c9f43 commit db635ac

File tree

4 files changed

+105
-6
lines changed

4 files changed

+105
-6
lines changed

ydb/core/ydb_convert/column_families.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,13 +183,15 @@ namespace NKikimr {
183183
case Ydb::FeatureFlag::STATUS_UNSPECIFIED:
184184
break;
185185
case Ydb::FeatureFlag::ENABLED:
186-
*code = Ydb::StatusIds::BAD_REQUEST;
187-
*error = TStringBuilder()
188-
<< "Setting keep_in_memory to ENABLED is not supported in column family '"
189-
<< familySettings.name() << "'";
190-
return false;
186+
if (!AppData()->FeatureFlags.GetEnablePublicApiKeepInMemory()) {
187+
*code = Ydb::StatusIds::BAD_REQUEST;
188+
*error = "Setting keep_in_memory to ENABLED is not allowed";
189+
return false;
190+
}
191+
family->SetColumnCache(NKikimrSchemeOp::ColumnCacheEver);
192+
break;
191193
case Ydb::FeatureFlag::DISABLED:
192-
family->ClearColumnCache();
194+
family->SetColumnCache(NKikimrSchemeOp::ColumnCacheNone);
193195
break;
194196
default:
195197
*code = Ydb::StatusIds::BAD_REQUEST;

ydb/public/sdk/cpp/client/ydb_table/table.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1115,6 +1115,11 @@ TColumnFamilyBuilder& TColumnFamilyBuilder::SetCompression(EColumnFamilyCompress
11151115
return *this;
11161116
}
11171117

1118+
TColumnFamilyBuilder& TColumnFamilyBuilder::SetKeepInMemory(bool enabled) {
1119+
Impl_->Proto.set_keep_in_memory(enabled ? Ydb::FeatureFlag::ENABLED : Ydb::FeatureFlag::DISABLED);
1120+
return *this;
1121+
}
1122+
11181123
TColumnFamilyDescription TColumnFamilyBuilder::Build() const {
11191124
return TColumnFamilyDescription(Impl_->Proto);
11201125
}

ydb/public/sdk/cpp/client/ydb_table/table.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,7 @@ class TColumnFamilyBuilder {
806806

807807
TColumnFamilyBuilder& SetData(const TString& media);
808808
TColumnFamilyBuilder& SetCompression(EColumnFamilyCompression compression);
809+
TColumnFamilyBuilder& SetKeepInMemory(bool enabled);
809810

810811
TColumnFamilyDescription Build() const;
811812

@@ -868,6 +869,11 @@ class TTableColumnFamilyBuilder {
868869
return *this;
869870
}
870871

872+
TTableColumnFamilyBuilder& SetKeepInMemory(bool enabled) {
873+
Builder_.SetKeepInMemory(enabled);
874+
return *this;
875+
}
876+
871877
TTableBuilder& EndColumnFamily();
872878

873879
private:
@@ -1486,6 +1492,11 @@ class TAlterColumnFamilyBuilder {
14861492
return *this;
14871493
}
14881494

1495+
TAlterColumnFamilyBuilder& SetKeepInMemory(bool enabled) {
1496+
Builder_.SetKeepInMemory(enabled);
1497+
return *this;
1498+
}
1499+
14891500
TAlterTableSettings& EndAddColumnFamily();
14901501
TAlterTableSettings& EndAlterColumnFamily();
14911502

ydb/services/ydb/ydb_ut.cpp

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,87 @@ Y_UNIT_TEST_SUITE(TGRpcNewClient) {
824824
client.CreateSession().Apply(createSessionHandler).Wait();
825825
UNIT_ASSERT(done);
826826
}
827+
828+
Y_UNIT_TEST(InMemoryTables) {
829+
TKikimrWithGrpcAndRootSchemaNoSystemViews server;
830+
server.Server_->GetRuntime()->GetAppData().FeatureFlags.SetEnablePublicApiKeepInMemory(true);
831+
832+
ui16 grpc = server.GetPort();
833+
TString location = TStringBuilder() << "localhost:" << grpc;
834+
835+
auto connection = NYdb::TDriver(
836+
TDriverConfig()
837+
.SetEndpoint(location));
838+
839+
auto client = NYdb::NTable::TTableClient(connection);
840+
auto createSessionResult = client.CreateSession().ExtractValueSync();
841+
UNIT_ASSERT(!createSessionResult.IsTransportError());
842+
auto session = createSessionResult.GetSession();
843+
844+
auto createTableResult = session.CreateTable("/Root/Table", client.GetTableBuilder()
845+
.AddNullableColumn("Key", EPrimitiveType::Int32)
846+
.AddNullableColumn("Value", EPrimitiveType::String)
847+
.SetPrimaryKeyColumn("Key")
848+
// Note: only needed because this test doesn't initial table profiles
849+
.BeginStorageSettings()
850+
.SetTabletCommitLog0("ssd")
851+
.SetTabletCommitLog1("ssd")
852+
.EndStorageSettings()
853+
.BeginColumnFamily("default")
854+
.SetData("ssd")
855+
.SetKeepInMemory(true)
856+
.EndColumnFamily()
857+
.Build()).ExtractValueSync();
858+
UNIT_ASSERT_C(createTableResult.IsSuccess(), (NYdb::TStatus&)createTableResult);
859+
860+
{
861+
auto describeTableResult = session.DescribeTable("/Root/Table").ExtractValueSync();
862+
UNIT_ASSERT_C(describeTableResult.IsSuccess(), (NYdb::TStatus&)describeTableResult);
863+
auto desc = describeTableResult.GetTableDescription();
864+
auto families = desc.GetColumnFamilies();
865+
UNIT_ASSERT_VALUES_EQUAL(families.size(), 1u);
866+
auto family = families.at(0);
867+
UNIT_ASSERT_VALUES_EQUAL(family.GetKeepInMemory(), true);
868+
}
869+
870+
{
871+
auto alterTableResult = session.AlterTable("/Root/Table", NYdb::NTable::TAlterTableSettings()
872+
.BeginAlterColumnFamily("default")
873+
.SetKeepInMemory(false)
874+
.EndAlterColumnFamily()).ExtractValueSync();
875+
UNIT_ASSERT_C(alterTableResult.IsSuccess(), (NYdb::TStatus&)alterTableResult);
876+
}
877+
878+
{
879+
auto describeTableResult = session.DescribeTable("/Root/Table").ExtractValueSync();
880+
UNIT_ASSERT_C(describeTableResult.IsSuccess(), (NYdb::TStatus&)describeTableResult);
881+
auto desc = describeTableResult.GetTableDescription();
882+
auto families = desc.GetColumnFamilies();
883+
UNIT_ASSERT_VALUES_EQUAL(families.size(), 1u);
884+
auto family = families.at(0);
885+
// Note: server cannot currently distinguish between implicitly
886+
// unset and explicitly disabled, so it returns the former.
887+
UNIT_ASSERT_VALUES_EQUAL(family.GetKeepInMemory(), Nothing());
888+
}
889+
890+
{
891+
auto alterTableResult = session.AlterTable("/Root/Table", NYdb::NTable::TAlterTableSettings()
892+
.BeginAlterColumnFamily("default")
893+
.SetKeepInMemory(true)
894+
.EndAlterColumnFamily()).ExtractValueSync();
895+
UNIT_ASSERT_C(alterTableResult.IsSuccess(), (NYdb::TStatus&)alterTableResult);
896+
}
897+
898+
{
899+
auto describeTableResult = session.DescribeTable("/Root/Table").ExtractValueSync();
900+
UNIT_ASSERT_C(describeTableResult.IsSuccess(), (NYdb::TStatus&)describeTableResult);
901+
auto desc = describeTableResult.GetTableDescription();
902+
auto families = desc.GetColumnFamilies();
903+
UNIT_ASSERT_VALUES_EQUAL(families.size(), 1u);
904+
auto family = families.at(0);
905+
UNIT_ASSERT_VALUES_EQUAL(family.GetKeepInMemory(), true);
906+
}
907+
}
827908
}
828909

829910
static TString CreateSession(std::shared_ptr<grpc::Channel> channel) {

0 commit comments

Comments
 (0)