Skip to content

Commit 7978fd7

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

File tree

4 files changed

+106
-6
lines changed

4 files changed

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

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

0 commit comments

Comments
 (0)