/* * Licensed 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 com.facebook.presto.raptor.metadata; import com.facebook.presto.raptor.RaptorColumnHandle; import com.facebook.presto.spi.predicate.TupleDomain; import org.skife.jdbi.v2.ResultIterator; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.OptionalLong; import java.util.Set; import java.util.UUID; public interface ShardManager { /** * Create a table. */ void createTable(long tableId, List<ColumnInfo> columns, boolean bucketed, OptionalLong temporalColumnId); /** * Drop a table. */ void dropTable(long tableId); /** * Add a column to the end of the table. */ void addColumn(long tableId, ColumnInfo column); /** * Commit data for a table. */ void commitShards(long transactionId, long tableId, List<ColumnInfo> columns, Collection<ShardInfo> shards, Optional<String> externalBatchId, long updateTime); /** * Replace oldShardsUuids with newShards. */ void replaceShardUuids(long transactionId, long tableId, List<ColumnInfo> columns, Set<UUID> oldShardUuids, Collection<ShardInfo> newShards, OptionalLong updateTime); /** * Get shard metadata for shards on a given node. */ Set<ShardMetadata> getNodeShards(String nodeIdentifier); /** * Get shard metadata for shards on a given node. */ Set<ShardMetadata> getNodeShards(String nodeIdentifier, long tableId); /** * Return the shard nodes for a non-bucketed table. */ ResultIterator<BucketShards> getShardNodes(long tableId, TupleDomain<RaptorColumnHandle> effectivePredicate); /** * Return the shard nodes for a bucketed table. */ ResultIterator<BucketShards> getShardNodesBucketed(long tableId, boolean merged, Map<Integer, String> bucketToNode, TupleDomain<RaptorColumnHandle> effectivePredicate); /** * Assign a shard to a node. */ void assignShard(long tableId, UUID shardUuid, String nodeIdentifier, boolean gracePeriod); /** * Remove shard assignment from a node. */ void unassignShard(long tableId, UUID shardUuid, String nodeIdentifier); /** * Get the number of bytes used by assigned shards per node. */ Map<String, Long> getNodeBytes(); /** * Begin a transaction for creating shards. * * @return transaction ID */ long beginTransaction(); /** * Rollback a transaction. */ void rollbackTransaction(long transactionId); /** * Create initial bucket assignments for a distribution. */ void createBuckets(long distributionId, int bucketCount); /** * Get map of buckets to node identifiers for a distribution. */ Map<Integer, String> getBucketAssignments(long distributionId); /** * Change the node a bucket is assigned to. */ void updateBucketAssignment(long distributionId, int bucketNumber, String nodeId); /** * Get all active distributions. */ List<Distribution> getDistributions(); /** * Get total physical size of all tables in a distribution. */ long getDistributionSizeInBytes(long distributionId); /** * Get list of bucket nodes for a distribution. */ List<BucketNode> getBucketNodes(long distributionId); /** * Return the subset of shard uuids that exist */ Set<UUID> getExistingShardUuids(long tableId, Set<UUID> shardUuids); }