Search in sources :

Example 1 with DatasetDefinitionRegistry

use of co.cask.cdap.api.dataset.module.DatasetDefinitionRegistry in project cdap by caskdata.

the class AbstractDatasetFrameworkTest method setup.

@BeforeClass
public static void setup() throws Exception {
    cConf = CConfiguration.create();
    File dataDir = new File(TMP_FOLDER.newFolder(), "data");
    cConf.set(Constants.CFG_LOCAL_DATA_DIR, dataDir.getAbsolutePath());
    final Injector injector = Guice.createInjector(new ConfigModule(cConf), new NonCustomLocationUnitTestModule().getModule(), new TransactionInMemoryModule(), new NamespaceClientRuntimeModule().getInMemoryModules(), new AuditModule().getInMemoryModules(), new AbstractModule() {

        @Override
        protected void configure() {
            bind(OwnerStore.class).to(InMemoryOwnerStore.class).in(Scopes.SINGLETON);
            bind(OwnerAdmin.class).to(DefaultOwnerAdmin.class);
        }
    });
    locationFactory = injector.getInstance(LocationFactory.class);
    namespacedLocationFactory = injector.getInstance(NamespacedLocationFactory.class);
    txExecutorFactory = injector.getInstance(TransactionExecutorFactory.class);
    registryFactory = new DatasetDefinitionRegistryFactory() {

        @Override
        public DatasetDefinitionRegistry create() {
            DefaultDatasetDefinitionRegistry registry = new DefaultDatasetDefinitionRegistry();
            injector.injectMembers(registry);
            return registry;
        }
    };
    namespaceAdmin = injector.getInstance(NamespaceAdmin.class);
    namespaceQueryAdmin = injector.getInstance(NamespaceQueryAdmin.class);
    ownerAdmin = injector.getInstance(OwnerAdmin.class);
    inMemoryAuditPublisher = injector.getInstance(InMemoryAuditPublisher.class);
    namespaceAdmin.create(new NamespaceMeta.Builder().setName(NAMESPACE_ID).build());
}
Also used : NamespaceClientRuntimeModule(co.cask.cdap.common.namespace.guice.NamespaceClientRuntimeModule) TransactionInMemoryModule(org.apache.tephra.runtime.TransactionInMemoryModule) ConfigModule(co.cask.cdap.common.guice.ConfigModule) DefaultOwnerAdmin(co.cask.cdap.security.impersonation.DefaultOwnerAdmin) OwnerAdmin(co.cask.cdap.security.impersonation.OwnerAdmin) NamespaceAdmin(co.cask.cdap.common.namespace.NamespaceAdmin) NamespacedLocationFactory(co.cask.cdap.common.namespace.NamespacedLocationFactory) DatasetDefinitionRegistry(co.cask.cdap.api.dataset.module.DatasetDefinitionRegistry) NonCustomLocationUnitTestModule(co.cask.cdap.common.guice.NonCustomLocationUnitTestModule) DefaultOwnerAdmin(co.cask.cdap.security.impersonation.DefaultOwnerAdmin) OwnerStore(co.cask.cdap.security.impersonation.OwnerStore) InMemoryOwnerStore(co.cask.cdap.security.impersonation.InMemoryOwnerStore) AbstractModule(com.google.inject.AbstractModule) NamespacedLocationFactory(co.cask.cdap.common.namespace.NamespacedLocationFactory) LocationFactory(org.apache.twill.filesystem.LocationFactory) TransactionExecutorFactory(org.apache.tephra.TransactionExecutorFactory) InMemoryAuditPublisher(co.cask.cdap.data2.audit.InMemoryAuditPublisher) Injector(com.google.inject.Injector) NamespaceMeta(co.cask.cdap.proto.NamespaceMeta) NamespaceQueryAdmin(co.cask.cdap.common.namespace.NamespaceQueryAdmin) AuditModule(co.cask.cdap.data2.audit.AuditModule) File(java.io.File) BeforeClass(org.junit.BeforeClass)

Example 2 with DatasetDefinitionRegistry

use of co.cask.cdap.api.dataset.module.DatasetDefinitionRegistry in project cdap by caskdata.

the class InMemoryDatasetFramework method deleteModule.

@Override
public void deleteModule(DatasetModuleId moduleId) {
    // TODO (CDAP-6297): check if existing datasets or modules use this module
    writeLock.lock();
    try {
        moduleClasses.remove(moduleId.getParent(), moduleId);
        LinkedHashSet<String> availableModuleClasses = getAvailableModuleClasses(moduleId.getParent());
        // this will cleanup types
        DatasetDefinitionRegistry registry = createRegistry(availableModuleClasses, registries.getClass().getClassLoader());
        registries.put(moduleId.getParent(), registry);
    } finally {
        writeLock.unlock();
    }
}
Also used : DatasetDefinitionRegistry(co.cask.cdap.api.dataset.module.DatasetDefinitionRegistry)

Example 3 with DatasetDefinitionRegistry

use of co.cask.cdap.api.dataset.module.DatasetDefinitionRegistry in project cdap by caskdata.

the class InMemoryDatasetFramework method addModule.

@Override
public void addModule(DatasetModuleId moduleId, DatasetModule module) throws ModuleConflictException {
    // TODO (CDAP-6297): check if existing modules overlap, or if this removes a type other modules depend on
    writeLock.lock();
    try {
        DatasetDefinitionRegistry registry = registries.get(moduleId.getParent());
        if (registry == null) {
            registry = registryFactory.create();
            registries.put(moduleId.getParent(), registry);
        }
        TypesTrackingRegistry trackingRegistry = new TypesTrackingRegistry(registry);
        module.register(trackingRegistry);
        String moduleClassName = DatasetModules.getDatasetModuleClass(module).getName();
        moduleClasses.put(moduleId.getParent(), moduleId, moduleClassName);
        List<String> types = trackingRegistry.getTypes();
        nonDefaultTypes.putAll(moduleId.getParent(), types);
        for (String type : types) {
            this.types.put(moduleId.getParent().datasetType(type), new DatasetTypeMeta(type, Collections.singletonList(new DatasetModuleMeta(moduleId.getEntityName(), moduleClassName, null, types, Collections.<String>emptyList()))));
        }
    } finally {
        writeLock.unlock();
    }
}
Also used : DatasetModuleMeta(co.cask.cdap.proto.DatasetModuleMeta) DatasetTypeMeta(co.cask.cdap.proto.DatasetTypeMeta) DatasetDefinitionRegistry(co.cask.cdap.api.dataset.module.DatasetDefinitionRegistry)

Example 4 with DatasetDefinitionRegistry

use of co.cask.cdap.api.dataset.module.DatasetDefinitionRegistry in project cdap by caskdata.

the class InMemoryDatasetFramework method getDefinitionForType.

@Nullable
@VisibleForTesting
DatasetDefinition getDefinitionForType(NamespaceId namespaceId, String datasetType) {
    DatasetDefinitionRegistry registry = registries.get(namespaceId);
    if (registry != null && registry.hasType(datasetType)) {
        return registry.get(datasetType);
    }
    registry = registries.get(NamespaceId.SYSTEM);
    if (registry != null && registry.hasType(datasetType)) {
        return registry.get(datasetType);
    }
    return null;
}
Also used : DatasetDefinitionRegistry(co.cask.cdap.api.dataset.module.DatasetDefinitionRegistry) VisibleForTesting(com.google.common.annotations.VisibleForTesting) Nullable(javax.annotation.Nullable)

Aggregations

DatasetDefinitionRegistry (co.cask.cdap.api.dataset.module.DatasetDefinitionRegistry)4 ConfigModule (co.cask.cdap.common.guice.ConfigModule)1 NonCustomLocationUnitTestModule (co.cask.cdap.common.guice.NonCustomLocationUnitTestModule)1 NamespaceAdmin (co.cask.cdap.common.namespace.NamespaceAdmin)1 NamespaceQueryAdmin (co.cask.cdap.common.namespace.NamespaceQueryAdmin)1 NamespacedLocationFactory (co.cask.cdap.common.namespace.NamespacedLocationFactory)1 NamespaceClientRuntimeModule (co.cask.cdap.common.namespace.guice.NamespaceClientRuntimeModule)1 AuditModule (co.cask.cdap.data2.audit.AuditModule)1 InMemoryAuditPublisher (co.cask.cdap.data2.audit.InMemoryAuditPublisher)1 DatasetModuleMeta (co.cask.cdap.proto.DatasetModuleMeta)1 DatasetTypeMeta (co.cask.cdap.proto.DatasetTypeMeta)1 NamespaceMeta (co.cask.cdap.proto.NamespaceMeta)1 DefaultOwnerAdmin (co.cask.cdap.security.impersonation.DefaultOwnerAdmin)1 InMemoryOwnerStore (co.cask.cdap.security.impersonation.InMemoryOwnerStore)1 OwnerAdmin (co.cask.cdap.security.impersonation.OwnerAdmin)1 OwnerStore (co.cask.cdap.security.impersonation.OwnerStore)1 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 AbstractModule (com.google.inject.AbstractModule)1 Injector (com.google.inject.Injector)1 File (java.io.File)1