blob: fa7fc7322e39e0cc23d6608c606f3658e2e22bf2 [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.carbondata.core.metadata.schema.indextable;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.carbondata.core.constants.CarbonCommonConstants;
import org.apache.carbondata.core.util.ObjectSerializationUtil;
/**
* Carbon Index properties holder
*/
public class IndexMetadata implements Serializable {
private static final long serialVersionUID = -8076464279248926823L;
/**
* index provider and map of index table name and its index properties
*/
private Map<String, Map<String, Map<String, String>>> indexProviderMap;
/**
* parent table name of this index table
*/
private String parentTableName;
/**
* location of parent table, path till table folder
*/
private String parentTablePath;
/**
* table ID of parent table
*/
private String parentTableId;
/**
* flag to check for index table
*/
private boolean isIndexTable;
public IndexMetadata(boolean isIndexTable) {
this.isIndexTable = isIndexTable;
}
public IndexMetadata(String parentTableName, boolean isIndexTable, String parentTablePath) {
this(isIndexTable);
this.parentTableName = parentTableName;
this.parentTablePath = parentTablePath;
}
public IndexMetadata(Map<String, Map<String, Map<String, String>>> indexProviderMap,
String parentTableName, boolean isIndexTable, String parentTablePath, String parentTableId) {
this(parentTableName, isIndexTable, parentTablePath);
this.indexProviderMap = indexProviderMap;
this.parentTableId = parentTableId;
}
public void addIndexTableInfo(String providerName, String tableName,
Map<String, String> indexProperties) {
if (null == indexProviderMap) {
indexProviderMap = new ConcurrentHashMap<>();
}
if (null == indexProviderMap.get(providerName) || indexProviderMap.isEmpty()) {
Map<String, Map<String, String>> indexMap = new ConcurrentHashMap<>();
indexMap.put(tableName, indexProperties);
indexProviderMap.put(providerName, indexMap);
} else {
indexProviderMap.get(providerName).put(tableName, indexProperties);
}
}
public void removeIndexTableInfo(String indexName) {
if (null != indexProviderMap) {
for (Map.Entry<String, Map<String, Map<String, String>>> indexProviderEntry : indexProviderMap
.entrySet()) {
Map<String, Map<String, String>> indexMap = indexProviderEntry.getValue();
if (indexMap.containsKey(indexName)) {
indexProviderMap.get(indexProviderEntry.getKey()).remove(indexName);
}
}
}
}
public void renameIndexWithStatus(String indexProvider, String oldIndexName,
String newIndexName, String indexStatus) {
if (null != indexProviderMap) {
Map<String, String> properties = indexProviderMap.get(indexProvider).remove(oldIndexName);
if (properties != null) {
properties.put(CarbonCommonConstants.INDEX_STATUS, indexStatus);
indexProviderMap.get(indexProvider).put(newIndexName, properties);
}
}
}
public void updateIndexStatus(String indexProvider, String indexName, String indexStatus) {
if (null != indexProviderMap) {
indexProviderMap.get(indexProvider).get(indexName)
.put(CarbonCommonConstants.INDEX_STATUS, indexStatus);
}
}
public List<String> getIndexTables() {
if (null != indexProviderMap) {
List<String> indexTables = new ArrayList<>();
for (Map.Entry<String, Map<String, Map<String, String>>> mapEntry : indexProviderMap
.entrySet()) {
indexTables.addAll(mapEntry.getValue().keySet());
}
return indexTables;
} else {
return new ArrayList<String>();
}
}
public List<String> getIndexTables(String indexProvider) {
if (null != indexProviderMap && null != indexProviderMap.get(indexProvider)) {
return new ArrayList<>(indexProviderMap.get(indexProvider).keySet());
} else {
return new ArrayList<>();
}
}
/**
* indexTableMap will be null if index table info is not loaded.
*/
public Map<String, Map<String, Map<String, String>>> getIndexesMap() {
return indexProviderMap;
}
public String getParentTableName() {
return parentTableName;
}
public boolean isIndexTable() {
return isIndexTable;
}
public String getParentTablePath() {
return parentTablePath;
}
public String getParentTableId() {
return parentTableId;
}
public String serialize() throws IOException {
return ObjectSerializationUtil.convertObjectToString(this);
}
public static IndexMetadata deserialize(String serializedIndexMeta) throws IOException {
if (null == serializedIndexMeta) {
return null;
}
return (IndexMetadata) ObjectSerializationUtil.convertStringToObject(serializedIndexMeta);
}
public String getIndexColumns(String provider, String indexName) {
return indexProviderMap.get(provider).get(indexName).get(CarbonCommonConstants.INDEX_COLUMNS);
}
public String getIndexStatus(String provider, String indexName) {
return indexProviderMap.get(provider).get(indexName).get(CarbonCommonConstants.INDEX_STATUS);
}
}