blob: 8dc9ff9d6c32f6440b294f85387e31dacdfcc9ce [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.apache.doris.task;
import org.apache.doris.catalog.Column;
import org.apache.doris.thrift.TAlterTabletReq;
import org.apache.doris.thrift.TColumn;
import org.apache.doris.thrift.TCreateTabletReq;
import org.apache.doris.thrift.TKeysType;
import org.apache.doris.thrift.TResourceInfo;
import org.apache.doris.thrift.TStorageType;
import org.apache.doris.thrift.TTabletSchema;
import org.apache.doris.thrift.TTaskType;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class SchemaChangeTask extends AgentTask {
private long baseReplicaId;
private int baseSchemaHash;
private TStorageType storageType;
private TKeysType keysType;
private int newSchemaHash;
private short newShortKeyColumnCount;
private List<Column> newColumns;
// bloom filter columns
private Set<String> bfColumns;
private double bfFpp;
public SchemaChangeTask(TResourceInfo resourceInfo, long backendId, long dbId, long tableId,
long partitionId, long indexId, long baseTabletId, long baseReplicaId,
List<Column> newColumns, int newSchemaHash, int baseSchemaHash,
short newShortKeyColumnCount, TStorageType storageType,
Set<String> bfColumns, double bfFpp, TKeysType keysType) {
super(resourceInfo, backendId, TTaskType.SCHEMA_CHANGE, dbId, tableId, partitionId, indexId, baseTabletId);
this.baseReplicaId = baseReplicaId;
this.baseSchemaHash = baseSchemaHash;
this.storageType = storageType;
this.keysType = keysType;
this.newSchemaHash = newSchemaHash;
this.newShortKeyColumnCount = newShortKeyColumnCount;
this.newColumns = newColumns;
this.bfColumns = bfColumns;
this.bfFpp = bfFpp;
}
public TAlterTabletReq toThrift() {
TAlterTabletReq tAlterTabletReq = new TAlterTabletReq();
tAlterTabletReq.setBase_tablet_id(tabletId);
tAlterTabletReq.setBase_schema_hash(baseSchemaHash);
// make 1 TCreateTableReq
TCreateTabletReq createTabletReq = new TCreateTabletReq();
createTabletReq.setTablet_id(tabletId);
// no need to set version
// schema
TTabletSchema tSchema = new TTabletSchema();
tSchema.setShort_key_column_count(newShortKeyColumnCount);
tSchema.setSchema_hash(newSchemaHash);
tSchema.setStorage_type(storageType);
tSchema.setKeys_type(keysType);
List<TColumn> tColumns = new ArrayList<TColumn>();
for (Column column : newColumns) {
TColumn tColumn = column.toThrift();
// is bloom filter column
if (bfColumns != null && bfColumns.contains(column.getName())) {
tColumn.setIs_bloom_filter_column(true);
}
tColumns.add(tColumn);
}
tSchema.setColumns(tColumns);
if (bfColumns != null) {
tSchema.setBloom_filter_fpp(bfFpp);
}
createTabletReq.setTablet_schema(tSchema);
createTabletReq.setTable_id(tableId);
createTabletReq.setPartition_id(partitionId);
tAlterTabletReq.setNew_tablet_req(createTabletReq);
return tAlterTabletReq;
}
public long getReplicaId() {
return baseReplicaId;
}
public int getSchemaHash() {
return newSchemaHash;
}
public int getBaseSchemaHash() {
return baseSchemaHash;
}
public short getNewShortKeyColumnCount() {
return newShortKeyColumnCount;
}
public TStorageType getStorageType() {
return storageType;
}
public List<Column> getColumns() {
return newColumns;
}
}