dbms: fixed error with DROP COLUMN in replicated tables [#METR-14848].

This commit is contained in:
Alexey Milovidov 2015-02-01 06:49:36 +03:00
parent bd51359819
commit 22b9ecfdea
4 changed files with 48 additions and 2 deletions

View File

@ -594,6 +594,10 @@ public:
/// Если не был вызван commit(), удаляет временные файлы, отменяя ALTER куска.
~AlterDataPartTransaction();
/// Посмотреть изменения перед коммитом.
const NamesAndTypesList & getNewColumns() const { return new_columns; }
const DataPart::Checksums & getNewChecksums() const { return new_checksums; }
private:
friend class MergeTreeData;

View File

@ -1571,8 +1571,10 @@ void StorageReplicatedMergeTree::alterThread()
/// Обновим метаданные куска в ZooKeeper.
zkutil::Ops ops;
ops.push_back(new zkutil::Op::SetData(replica_path + "/parts/" + part->name + "/columns", part->columns.toString(), -1));
ops.push_back(new zkutil::Op::SetData(replica_path + "/parts/" + part->name + "/checksums", part->checksums.toString(), -1));
ops.push_back(new zkutil::Op::SetData(
replica_path + "/parts/" + part->name + "/columns", transaction->getNewColumns().toString(), -1));
ops.push_back(new zkutil::Op::SetData(
replica_path + "/parts/" + part->name + "/checksums", transaction->getNewChecksums().toString(), -1));
zookeeper->multi(ops);
/// Применим изменения файлов.

View File

@ -0,0 +1,13 @@
columns format version: 1
1 columns:
`d` Date
2014-01-01
2014-01-01 0
2014-02-01 1
2014-01-01
2014-02-01
columns format version: 1
1 columns:
`d` Date

View File

@ -0,0 +1,27 @@
DROP TABLE IF EXISTS test.alter;
CREATE TABLE test.alter (d Date, x UInt8) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/alter', 'r1', d, (d), 8192);
INSERT INTO test.alter VALUES ('2014-01-01', 1);
ALTER TABLE test.alter DROP COLUMN x;
SELECT value FROM system.zookeeper WHERE path = '/clickhouse/tables/test/alter/replicas/r1/parts/20140101_20140101_200_200_0' AND name = 'columns' FORMAT TabSeparatedRaw;
DROP TABLE test.alter;
CREATE TABLE test.alter (d Date) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/alter', 'r1', d, (d), 8192);
INSERT INTO test.alter VALUES ('2014-01-01');
SELECT * FROM test.alter ORDER BY d;
ALTER TABLE test.alter ADD COLUMN x UInt8;
INSERT INTO test.alter VALUES ('2014-02-01', 1);
SELECT * FROM test.alter ORDER BY d;
ALTER TABLE test.alter DROP COLUMN x;
SELECT * FROM test.alter ORDER BY d;
SELECT value FROM system.zookeeper WHERE path = '/clickhouse/tables/test/alter/replicas/r1/parts/20140201_20140201_200_200_0' AND name = 'columns' FORMAT TabSeparatedRaw;
DROP TABLE test.alter;