Search in sources :

Example 1 with RecordWriterFactory

use of org.apache.nifi.provenance.store.RecordWriterFactory in project nifi by apache.

the class WriteAheadProvenanceRepository method initialize.

@Override
public synchronized void initialize(final EventReporter eventReporter, final Authorizer authorizer, final ProvenanceAuthorizableFactory resourceFactory, final IdentifierLookup idLookup) throws IOException {
    final RecordWriterFactory recordWriterFactory = (file, idGenerator, compressed, createToc) -> {
        final TocWriter tocWriter = createToc ? new StandardTocWriter(TocUtil.getTocFile(file), false, false) : null;
        return new EventIdFirstSchemaRecordWriter(file, idGenerator, tocWriter, compressed, BLOCK_SIZE, idLookup);
    };
    final EventFileManager fileManager = new EventFileManager();
    final RecordReaderFactory recordReaderFactory = (file, logs, maxChars) -> {
        fileManager.obtainReadLock(file);
        try {
            return RecordReaders.newRecordReader(file, logs, maxChars);
        } finally {
            fileManager.releaseReadLock(file);
        }
    };
    init(recordWriterFactory, recordReaderFactory, eventReporter, authorizer, resourceFactory);
}
Also used : LuceneEventIndex(org.apache.nifi.provenance.index.lucene.LuceneEventIndex) CloseableUtil(org.apache.nifi.provenance.util.CloseableUtil) StandardTocWriter(org.apache.nifi.provenance.toc.StandardTocWriter) Query(org.apache.nifi.provenance.search.Query) LoggerFactory(org.slf4j.LoggerFactory) RecordReaders(org.apache.nifi.provenance.serialization.RecordReaders) HashSet(java.util.HashSet) EventFileManager(org.apache.nifi.provenance.store.EventFileManager) TocWriter(org.apache.nifi.provenance.toc.TocWriter) StorageResult(org.apache.nifi.provenance.store.StorageResult) NiFiUser(org.apache.nifi.authorization.user.NiFiUser) Map(java.util.Map) EventStore(org.apache.nifi.provenance.store.EventStore) RecordReaderFactory(org.apache.nifi.provenance.store.RecordReaderFactory) TocUtil(org.apache.nifi.provenance.toc.TocUtil) UserEventAuthorizer(org.apache.nifi.provenance.authorization.UserEventAuthorizer) QuerySubmission(org.apache.nifi.provenance.search.QuerySubmission) SearchableField(org.apache.nifi.provenance.search.SearchableField) EventIndex(org.apache.nifi.provenance.index.EventIndex) Logger(org.slf4j.Logger) Authorizable(org.apache.nifi.authorization.resource.Authorizable) FileUtils(org.apache.nifi.util.file.FileUtils) StorageSummary(org.apache.nifi.provenance.serialization.StorageSummary) Files(java.nio.file.Files) RequestAction(org.apache.nifi.authorization.RequestAction) Set(java.util.Set) IOException(java.io.IOException) PartitionedWriteAheadEventStore(org.apache.nifi.provenance.store.PartitionedWriteAheadEventStore) SimpleIndexManager(org.apache.nifi.provenance.lucene.SimpleIndexManager) File(java.io.File) List(java.util.List) Authorizer(org.apache.nifi.authorization.Authorizer) EventReporter(org.apache.nifi.events.EventReporter) ComputeLineageSubmission(org.apache.nifi.provenance.lineage.ComputeLineageSubmission) NiFiProperties(org.apache.nifi.util.NiFiProperties) IndexManager(org.apache.nifi.provenance.lucene.IndexManager) Severity(org.apache.nifi.reporting.Severity) RecordWriterFactory(org.apache.nifi.provenance.store.RecordWriterFactory) Collections(java.util.Collections) EventAuthorizer(org.apache.nifi.provenance.authorization.EventAuthorizer) StandardTocWriter(org.apache.nifi.provenance.toc.StandardTocWriter) StandardTocWriter(org.apache.nifi.provenance.toc.StandardTocWriter) TocWriter(org.apache.nifi.provenance.toc.TocWriter) EventFileManager(org.apache.nifi.provenance.store.EventFileManager) RecordWriterFactory(org.apache.nifi.provenance.store.RecordWriterFactory) RecordReaderFactory(org.apache.nifi.provenance.store.RecordReaderFactory)

Example 2 with RecordWriterFactory

use of org.apache.nifi.provenance.store.RecordWriterFactory in project nifi by apache.

the class EncryptedWriteAheadProvenanceRepository method initialize.

/**
 * This method initializes the repository. It first builds the key provider and event encryptor
 * from the config values, then creates the encrypted record writer and reader, then delegates
 * back to the superclass for the common implementation.
 *
 * @param eventReporter   the event reporter
 * @param authorizer      the authorizer
 * @param resourceFactory the authorizable factory
 * @param idLookup        the lookup provider
 * @throws IOException if there is an error initializing this repository
 */
@Override
public synchronized void initialize(final EventReporter eventReporter, final Authorizer authorizer, final ProvenanceAuthorizableFactory resourceFactory, final IdentifierLookup idLookup) throws IOException {
    // Initialize the encryption-specific fields
    ProvenanceEventEncryptor provenanceEventEncryptor;
    if (getConfig().supportsEncryption()) {
        try {
            KeyProvider keyProvider;
            if (KeyProviderFactory.requiresMasterKey(getConfig().getKeyProviderImplementation())) {
                SecretKey masterKey = getMasterKey();
                keyProvider = buildKeyProvider(masterKey);
            } else {
                keyProvider = buildKeyProvider();
            }
            provenanceEventEncryptor = new AESProvenanceEventEncryptor();
            provenanceEventEncryptor.initialize(keyProvider);
        } catch (KeyManagementException e) {
            String msg = "Encountered an error building the key provider";
            logger.error(msg, e);
            throw new IOException(msg, e);
        }
    } else {
        throw new IOException("The provided configuration does not support a encrypted repository");
    }
    // Build a factory using lambda which injects the encryptor
    final RecordWriterFactory recordWriterFactory = (file, idGenerator, compressed, createToc) -> {
        try {
            final TocWriter tocWriter = createToc ? new StandardTocWriter(TocUtil.getTocFile(file), false, false) : null;
            return new EncryptedSchemaRecordWriter(file, idGenerator, tocWriter, compressed, BLOCK_SIZE, idLookup, provenanceEventEncryptor, getConfig().getDebugFrequency());
        } catch (EncryptionException e) {
            logger.error("Encountered an error building the schema record writer factory: ", e);
            throw new IOException(e);
        }
    };
    // Build a factory using lambda which injects the encryptor
    final EventFileManager fileManager = new EventFileManager();
    final RecordReaderFactory recordReaderFactory = (file, logs, maxChars) -> {
        fileManager.obtainReadLock(file);
        try {
            EncryptedSchemaRecordReader tempReader = (EncryptedSchemaRecordReader) RecordReaders.newRecordReader(file, logs, maxChars);
            tempReader.setProvenanceEventEncryptor(provenanceEventEncryptor);
            return tempReader;
        } finally {
            fileManager.releaseReadLock(file);
        }
    };
    // Delegate the init to the parent impl
    super.init(recordWriterFactory, recordReaderFactory, eventReporter, authorizer, resourceFactory);
}
Also used : KeyProvider(org.apache.nifi.security.kms.KeyProvider) StandardTocWriter(org.apache.nifi.provenance.toc.StandardTocWriter) Logger(org.slf4j.Logger) DecoderException(org.apache.commons.codec.DecoderException) NiFiPropertiesLoader(org.apache.nifi.properties.NiFiPropertiesLoader) LoggerFactory(org.slf4j.LoggerFactory) SecretKeySpec(javax.crypto.spec.SecretKeySpec) IOException(java.io.IOException) KeyManagementException(java.security.KeyManagementException) Hex(org.apache.commons.codec.binary.Hex) RecordReaders(org.apache.nifi.provenance.serialization.RecordReaders) EventFileManager(org.apache.nifi.provenance.store.EventFileManager) TocWriter(org.apache.nifi.provenance.toc.TocWriter) Authorizer(org.apache.nifi.authorization.Authorizer) EventReporter(org.apache.nifi.events.EventReporter) NiFiProperties(org.apache.nifi.util.NiFiProperties) RecordReaderFactory(org.apache.nifi.provenance.store.RecordReaderFactory) SecretKey(javax.crypto.SecretKey) RecordWriterFactory(org.apache.nifi.provenance.store.RecordWriterFactory) TocUtil(org.apache.nifi.provenance.toc.TocUtil) KeyProvider(org.apache.nifi.security.kms.KeyProvider) KeyProviderFactory(org.apache.nifi.security.kms.KeyProviderFactory) EventFileManager(org.apache.nifi.provenance.store.EventFileManager) IOException(java.io.IOException) RecordWriterFactory(org.apache.nifi.provenance.store.RecordWriterFactory) KeyManagementException(java.security.KeyManagementException) RecordReaderFactory(org.apache.nifi.provenance.store.RecordReaderFactory) StandardTocWriter(org.apache.nifi.provenance.toc.StandardTocWriter) SecretKey(javax.crypto.SecretKey) StandardTocWriter(org.apache.nifi.provenance.toc.StandardTocWriter) TocWriter(org.apache.nifi.provenance.toc.TocWriter)

Aggregations

IOException (java.io.IOException)2 Authorizer (org.apache.nifi.authorization.Authorizer)2 EventReporter (org.apache.nifi.events.EventReporter)2 RecordReaders (org.apache.nifi.provenance.serialization.RecordReaders)2 EventFileManager (org.apache.nifi.provenance.store.EventFileManager)2 RecordReaderFactory (org.apache.nifi.provenance.store.RecordReaderFactory)2 RecordWriterFactory (org.apache.nifi.provenance.store.RecordWriterFactory)2 StandardTocWriter (org.apache.nifi.provenance.toc.StandardTocWriter)2 TocUtil (org.apache.nifi.provenance.toc.TocUtil)2 TocWriter (org.apache.nifi.provenance.toc.TocWriter)2 NiFiProperties (org.apache.nifi.util.NiFiProperties)2 Logger (org.slf4j.Logger)2 LoggerFactory (org.slf4j.LoggerFactory)2 File (java.io.File)1 Files (java.nio.file.Files)1 KeyManagementException (java.security.KeyManagementException)1 Collections (java.util.Collections)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Map (java.util.Map)1