/*
* 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.client;
import alluxio.annotation.PublicApi;
import javax.annotation.concurrent.ThreadSafe;
/**
* Convenience modes for commonly used read types.
*
* For finer grained control over data storage, advanced users may specify
* {@link AlluxioStorageType} and {@link UnderStorageType}.
*/
@PublicApi
@ThreadSafe
public enum ReadType {
/**
* Read the file and skip Alluxio storage. This read type will not cause any data migration or
* eviction in Alluxio storage.
*/
NO_CACHE(1),
/**
* Read the file and cache it in the highest tier of a local worker. This read type will not move
* data between tiers of Alluxio Storage. Users should use {@link #CACHE_PROMOTE} for more
* optimized performance with tiered storage.
*/
CACHE(2),
/**
* Read the file and cache it in a local worker. Additionally, if the file was in Alluxio
* storage, it will be promoted to the top storage layer.
*/
CACHE_PROMOTE(3),
;
private final int mValue;
ReadType(int value) {
mValue = value;
}
/**
* @return the {@link AlluxioStorageType} associated with this read type
*/
public AlluxioStorageType getAlluxioStorageType() {
if (isPromote()) { // CACHE_PROMOTE
return AlluxioStorageType.PROMOTE;
}
if (isCache()) { // CACHE
return AlluxioStorageType.STORE;
}
// NO_CACHE
return AlluxioStorageType.NO_STORE;
}
/**
* @return the read type value
*/
public int getValue() {
return mValue;
}
/**
* @return true if the read type is {@link #CACHE}, false otherwise
*/
public boolean isCache() {
return mValue == CACHE.mValue || mValue == CACHE_PROMOTE.mValue;
}
/**
* @return true if the read type is {@link #CACHE_PROMOTE}, false otherwise
*/
public boolean isPromote() {
return mValue == CACHE_PROMOTE.mValue;
}
}