use of org.apache.hyracks.storage.common.LocalResource in project asterixdb by apache.
the class IndexBuilder method build.
@Override
public void build() throws HyracksDataException {
IResourceLifecycleManager<IIndex> lcManager = storageManager.getLifecycleManager(ctx);
synchronized (lcManager) {
// The previous resource Id needs to be removed since calling IIndex.create() may possibly destroy any
// physical artifact that the LocalResourceRepository is managing (e.g. a file containing the resource Id).
// Once the index has been created, a new resource Id can be generated.
ILocalResourceRepository localResourceRepository = storageManager.getLocalResourceRepository(ctx);
LocalResource lr = localResourceRepository.get(resourceRef.getRelativePath());
long resourceId = lr == null ? -1 : lr.getId();
if (resourceId != -1) {
localResourceRepository.delete(resourceRef.getRelativePath());
}
resourceId = resourceIdFactory.createId();
IResource resource = localResourceFactory.createResource(resourceRef);
lr = new LocalResource(resourceId, ITreeIndexFrame.Constants.VERSION, durable, resource);
IIndex index = lcManager.get(resourceRef.getRelativePath());
if (index != null) {
//how is this right?????????? <needs to be fixed>
//The reason for this is to handle many cases such as:
//1. Crash while delete index is running (we don't do global cleanup on restart)
//2. Node leaves and then join with old data
lcManager.unregister(resourceRef.getRelativePath());
} else {
index = resource.createInstance(ctx);
}
index.create();
try {
localResourceRepository.insert(lr);
} catch (IOException e) {
throw HyracksDataException.create(e);
}
lcManager.register(resourceRef.getRelativePath(), index);
}
}
use of org.apache.hyracks.storage.common.LocalResource in project asterixdb by apache.
the class IndexDataflowHelper method readIndex.
private LocalResource readIndex() throws HyracksDataException {
// Get local resource
LocalResource lr = getResource();
if (lr == null) {
throw new HyracksDataException("Index resource couldn't be found. Has it been created yet? Was it deleted?");
}
IResource resource = lr.getResource();
index = resource.createInstance(ctx);
return lr;
}
use of org.apache.hyracks.storage.common.LocalResource in project asterixdb by apache.
the class IndexDataflowHelper method open.
@Override
public void open() throws HyracksDataException {
//Get local resource file
synchronized (lcManager) {
index = lcManager.get(resourceRef.getRelativePath());
if (index == null) {
LocalResource lr = readIndex();
lcManager.register(lr.getPath(), index);
}
lcManager.open(resourceRef.getRelativePath());
}
}
use of org.apache.hyracks.storage.common.LocalResource in project asterixdb by apache.
the class PersistentLocalResourceRepository method loadIndex.
private void loadIndex(File indexFile, Map<Long, LocalResource> resourcesMap) throws HyracksDataException {
LOGGER.log(Level.INFO, "Loading index:" + indexFile.getName());
if (indexFile.isDirectory()) {
File[] metadataFiles = indexFile.listFiles(METADATA_FILES_FILTER);
if (metadataFiles != null) {
for (File metadataFile : metadataFiles) {
LocalResource localResource = readLocalResource(metadataFile);
LOGGER.log(Level.INFO, "Resource loaded " + localResource.getId() + ":" + localResource.getPath());
resourcesMap.put(localResource.getId(), localResource);
}
}
}
}
use of org.apache.hyracks.storage.common.LocalResource in project asterixdb by apache.
the class DatasetLifecycleManager method register.
@Override
public synchronized void register(String resourcePath, IIndex index) throws HyracksDataException {
validateDatasetLifecycleManagerState();
int did = getDIDfromResourcePath(resourcePath);
LocalResource resource = resourceRepository.get(resourcePath);
DatasetResource datasetResource = datasets.get(did);
if (datasetResource == null) {
datasetResource = getDatasetLifecycle(did);
}
datasetResource.register(resource, index);
}
Aggregations