/**
* 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.hadoop.hive.metastore.txn;
import org.apache.hadoop.hive.common.ValidCompactorTxnList;
import org.apache.hadoop.hive.metastore.api.CompactionType;
import org.apache.hadoop.hive.metastore.api.GetOpenTxnsInfoResponse;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* Information on a possible or running compaction.
*/
public class CompactionInfo implements Comparable<CompactionInfo> {
public long id;
public String dbname;
public String tableName;
public String partName;
char state;
public CompactionType type;
String workerId;
long start;
public String runAs;
public String properties;
public boolean tooManyAborts = false;
/**
* {@code 0} means it wasn't set (e.g. in case of upgrades, since ResultSet.getLong() will return 0 if field is NULL)
* See {@link TxnStore#setCompactionHighestTxnId(CompactionInfo, long)} for precise definition.
* See also {@link TxnUtils#createValidCompactTxnList(GetOpenTxnsInfoResponse)} and
* {@link ValidCompactorTxnList#highWatermark}
*/
public long highestTxnId;
byte[] metaInfo;
String hadoopJobId;
private String fullPartitionName = null;
private String fullTableName = null;
public CompactionInfo(String dbname, String tableName, String partName, CompactionType type) {
this.dbname = dbname;
this.tableName = tableName;
this.partName = partName;
this.type = type;
}
CompactionInfo(long id, String dbname, String tableName, String partName, char state) {
this(dbname, tableName, partName, null);
this.id = id;
this.state = state;
}
CompactionInfo() {}
public String getFullPartitionName() {
if (fullPartitionName == null) {
StringBuilder buf = new StringBuilder(dbname);
buf.append('.');
buf.append(tableName);
if (partName != null) {
buf.append('.');
buf.append(partName);
}
fullPartitionName = buf.toString();
}
return fullPartitionName;
}
public String getFullTableName() {
if (fullTableName == null) {
StringBuilder buf = new StringBuilder(dbname);
buf.append('.');
buf.append(tableName);
fullTableName = buf.toString();
}
return fullTableName;
}
public boolean isMajorCompaction() {
return CompactionType.MAJOR == type;
}
@Override
public int compareTo(CompactionInfo o) {
return getFullPartitionName().compareTo(o.getFullPartitionName());
}
public String toString() {
return "id:" + id + "," +
"dbname:" + dbname + "," +
"tableName:" + tableName + "," +
"partName:" + partName + "," +
"state:" + state + "," +
"type:" + type + "," +
"properties:" + properties + "," +
"runAs:" + runAs + "," +
"tooManyAborts:" + tooManyAborts + "," +
"highestTxnId:" + highestTxnId;
}
/**
* loads object from a row in Select * from COMPACTION_QUEUE
* @param rs ResultSet after call to rs.next()
* @throws SQLException
*/
static CompactionInfo loadFullFromCompactionQueue(ResultSet rs) throws SQLException {
CompactionInfo fullCi = new CompactionInfo();
fullCi.id = rs.getLong(1);
fullCi.dbname = rs.getString(2);
fullCi.tableName = rs.getString(3);
fullCi.partName = rs.getString(4);
fullCi.state = rs.getString(5).charAt(0);//cq_state
fullCi.type = TxnHandler.dbCompactionType2ThriftType(rs.getString(6).charAt(0));
fullCi.properties = rs.getString(7);
fullCi.workerId = rs.getString(8);
fullCi.start = rs.getLong(9);
fullCi.runAs = rs.getString(10);
fullCi.highestTxnId = rs.getLong(11);
fullCi.metaInfo = rs.getBytes(12);
fullCi.hadoopJobId = rs.getString(13);
return fullCi;
}
static void insertIntoCompletedCompactions(PreparedStatement pStmt, CompactionInfo ci, long endTime) throws SQLException {
pStmt.setLong(1, ci.id);
pStmt.setString(2, ci.dbname);
pStmt.setString(3, ci.tableName);
pStmt.setString(4, ci.partName);
pStmt.setString(5, Character.toString(ci.state));
pStmt.setString(6, Character.toString(TxnHandler.thriftCompactionType2DbType(ci.type)));
pStmt.setString(7, ci.properties);
pStmt.setString(8, ci.workerId);
pStmt.setLong(9, ci.start);
pStmt.setLong(10, endTime);
pStmt.setString(11, ci.runAs);
pStmt.setLong(12, ci.highestTxnId);
pStmt.setBytes(13, ci.metaInfo);
pStmt.setString(14, ci.hadoopJobId);
}
}