use of org.apache.hyracks.storage.common.ILocalResourceRepository 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);
}
}
Aggregations