blob: fc955b488cc67759808c7073fc0b187b48858ab5 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.nifi.minifi.provenance;
import java.io.IOException;
import java.util.List;
import org.apache.nifi.events.EventReporter;
import org.apache.nifi.provenance.ProvenanceEventBuilder;
import org.apache.nifi.provenance.ProvenanceEventRecord;
/**
* This Repository houses Provenance Events. The repository is responsible for
* managing the life-cycle of the events, providing access to the events that it
* has stored, and providing query capabilities against the events.
*
*/
public interface ProvenanceEventRepository {
/**
* Performs any initialization needed. This should be called only by the
* framework.
*
* @param eventReporter to report to
* @throws IOException if unable to initialize
*/
void initialize(EventReporter eventReporter) throws IOException;
/**
* Returns a {@link org.apache.nifi.provenance.ProvenanceEventBuilder} that is capable of building
* {@link ProvenanceEventRecord}s
*
* @return builder
*/
ProvenanceEventBuilder eventBuilder();
/**
* Adds the given event to the repository and returns a new event for which
* the event id has been populated. Depending on the implementation, the
* returned event may or may not be the same event given
*
* @param event to register
*/
void registerEvent(ProvenanceEventRecord event);
/**
* Adds the given events to the repository.
*
* <p>
* This interface makes no assumptions about whether or not the registration
* of the Collection are atomic. This detail is implementation-specific.
* </p>
*
* @param events to register
*/
void registerEvents(Iterable<ProvenanceEventRecord> events);
/**
* Returns a List of all <code>ProvenanceEventRecord</code>s in the
* repository starting with the given ID. The first ID in the repository
* will always be 0 or higher.
*
* @param firstRecordId id of the first record to retrieve
* @param maxRecords maximum number of records to retrieve
* @return records
* @throws IOException if error reading from repository
*/
List<ProvenanceEventRecord> getEvents(long firstRecordId, final int maxRecords) throws IOException;
/**
* @return the largest ID of any event that is queryable in the repository.
* If no queryable events exists, returns null
*/
Long getMaxEventId();
/**
* @param id to lookup
* @return the Provenance Event Record with the given ID, if it exists, or
* {@code null} otherwise
* @throws IOException if failure while retrieving event
*/
ProvenanceEventRecord getEvent(long id) throws IOException;
/**
* Closes the repository, freeing any resources
*
* @throws IOException if failure closing repository
*/
void close() throws IOException;
}