alluxio.master.block.BlockId Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alluxio-core-common Show documentation
Show all versions of alluxio-core-common Show documentation
Common utilities shared in Alluxio core modules
/*
* The Alluxio Open Foundation licenses this work under the Apache License, version 2.0
* (the "License"). You may not use this work except in compliance with the License, which is
* available at www.apache.org/licenses/LICENSE-2.0
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied, as more fully set forth in the License.
*
* See the NOTICE file distributed with this work for information regarding copyright ownership.
*/
package alluxio.master.block;
import javax.annotation.concurrent.ThreadSafe;
/**
* This class provides a set of methods related to block IDs. Each block ID is a value of long with
* the following two parts:
*
* - The most significant 5 bytes (40 bits) represent the container ID of this block and
* - The least significant 3 bytes (24 bits) represent the sequence number of this block in the
* container.
*
*/
@ThreadSafe
public final class BlockId {
private static final int CONTAINER_ID_BITS = 40;
private static final int SEQUENCE_NUMBER_BITS = 64 - CONTAINER_ID_BITS;
private static final long CONTAINER_ID_MASK = (1L << CONTAINER_ID_BITS) - 1;
private static final long SEQUENCE_NUMBER_MASK = (1L << SEQUENCE_NUMBER_BITS) - 1;
private BlockId() {
// prevent instantiation of a util class
}
/**
* @param containerId the container ID to create the block ID with
* @param sequenceNumber the sequence number to create the block ID with
* @return the block ID constructed with the container ID and sequence number
*/
public static long createBlockId(long containerId, long sequenceNumber) {
// TODO(gene): Check for valid IDs here?
return ((containerId & CONTAINER_ID_MASK) << SEQUENCE_NUMBER_BITS)
| (sequenceNumber & SEQUENCE_NUMBER_MASK);
}
/**
* @param blockId the block ID to get the container ID for
* @return the container ID of a specified block ID
*/
public static long getContainerId(long blockId) {
return (blockId >> SEQUENCE_NUMBER_BITS) & CONTAINER_ID_MASK;
}
/**
* @param blockId the block ID to get the file ID for
* @return the file ID of a specified block ID
*/
public static long getFileId(long blockId) {
return createBlockId(getContainerId(blockId), getMaxSequenceNumber());
}
/**
* @param blockId the block ID to get the sequence number for
* @return the sequence number of the specified block ID
*/
public static long getSequenceNumber(long blockId) {
return blockId & SEQUENCE_NUMBER_MASK;
}
/**
* @return the maximum possible sequence number for block IDs
*/
public static long getMaxSequenceNumber() {
return SEQUENCE_NUMBER_MASK;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy