@ThreadSafe public final class FileSystemContext extends Object implements Closeable
FileSystem
operations.
Typically, a single JVM should only need one instance of a FileSystem
to connect to
Alluxio. The reference to that client object should be shared among threads.
A second FileSystemContext
object should only be created when a user needs to connect to
Alluxio with a different Subject
and/or AlluxioConfiguration
.
FileSystemContext
instances should be created sparingly because each instance creates
its own thread pools of FileSystemMasterClient
and BlockMasterClient
which can
lead to inefficient use of client machine resources.
A FileSystemContext
should be closed once the user is done performing operations with
Alluxio and no more connections need to be made. Once a FileSystemContext
is closed it
is preferred that the user of the class create a new instance with
create(alluxio.conf.AlluxioConfiguration)
to create a new context, rather than reinitializing using the
init(alluxio.ClientContext, alluxio.master.MasterInquireClient)
method.
NOTE: Each context maintains a pool of file system master clients that is already thread-safe.
Synchronizing FileSystemContext
methods could lead to deadlock: thread A attempts to
acquire a client when there are no clients left in the pool and blocks holding a lock on the
FileSystemContext
, when thread B attempts to release a client it owns it is unable to do
so, because thread A holds the lock on FileSystemContext
.public static FileSystemContext create(AlluxioConfiguration conf)
FileSystemContext
with a null subject.conf
- Alluxio configurationpublic static FileSystemContext create(@Nullable Subject subject, @Nullable AlluxioConfiguration conf)
subject
- the parent subject, set to null if not presentconf
- Alluxio configurationpublic static FileSystemContext create(ClientContext clientContext)
clientContext
- the ClientContext
containing the subject and configurationFileSystemContext
public static FileSystemContext create(Subject subject, MasterInquireClient masterInquireClient, AlluxioConfiguration alluxioConf)
create(alluxio.conf.AlluxioConfiguration)
methods. The
returned context object will not be cached automatically.subject
- the parent subject, set to null if not presentmasterInquireClient
- the client to use for determining the master; note that if the
context is reset, this client will be replaced with a new masterInquireClient based on
the original configuration.alluxioConf
- Alluxio configurationpublic void close() throws IOException
FileSystem
associated with this FileSystemContext
.close
in interface Closeable
close
in interface AutoCloseable
IOException
public FileSystemContextReinitializer.ReinitBlockerResource blockReinit()
public void reinit(boolean updateClusterConf, boolean updatePathConf) throws UnavailableException, IOException
updateClusterConf
- whether cluster level configuration should be updatedupdatePathConf
- whether path level configuration should be updatedUnavailableException
- when failed to load configuration from masterIOException
- when failed to close the contextpublic String getId()
public MasterClientContext getMasterClientContext()
MasterClientContext
backing this contextpublic ClientContext getClientContext()
ClientContext
backing this FileSystemContext
public AlluxioConfiguration getClusterConf()
FileSystemContext
public AlluxioConfiguration getPathConf(AlluxioURI path)
SpecificPathConfiguration
.
If path level configuration has never been loaded from meta master yet, it will be loaded.path
- the path to get the configuration forpublic InetSocketAddress getMasterAddress() throws UnavailableException
UnavailableException
- if the master address cannot be determinedpublic boolean getUriValidationEnabled()
true
if URI validation is enabledpublic CloseableResource<FileSystemMasterClient> acquireMasterClientResource()
Closeable
.public CloseableResource<BlockMasterClient> acquireBlockMasterClientResource()
Closeable
.public CloseableResource<BlockWorkerClient> acquireBlockWorkerClient(WorkerNetAddress workerNetAddress) throws IOException
workerNetAddress
- the network address of the channelIOException
public boolean hasLocalWorker() throws IOException
IOException
public WorkerNetAddress getLocalWorker() throws IOException
IOException
Copyright © 2023. All Rights Reserved.