blob: 2f5adc675daed208a591e4e069d99053a9680194 [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.distributedlog.namespace;
import org.apache.distributedlog.DistributedLogConfiguration;
import org.apache.distributedlog.MetadataAccessor;
import org.apache.distributedlog.acl.AccessControlManager;
import org.apache.distributedlog.config.DynamicDistributedLogConfiguration;
import org.apache.distributedlog.exceptions.InvalidStreamNameException;
import org.apache.distributedlog.injector.AsyncFailureInjector;
import org.apache.distributedlog.logsegment.LogSegmentEntryStore;
import org.apache.distributedlog.logsegment.LogSegmentMetadataStore;
import org.apache.distributedlog.metadata.LogMetadataStore;
import org.apache.distributedlog.metadata.LogStreamMetadataStore;
import org.apache.distributedlog.subscription.SubscriptionsStore;
import org.apache.distributedlog.util.OrderedScheduler;
import org.apache.bookkeeper.feature.FeatureProvider;
import org.apache.bookkeeper.stats.StatsLogger;
import java.io.Closeable;
import java.io.IOException;
import java.net.URI;
/**
* Manager to manage all the stores required by a namespace.
*/
public interface NamespaceDriver extends Closeable {
enum Role {
WRITER,
READER
}
/**
* Initialize the namespace manager.
*
* @param conf distributedlog configuration
* @param dynConf dynamic distributedlog configuration
* @param namespace root uri of the namespace
* @param scheduler ordered scheduler
* @param featureProvider feature provider
* @param statsLogger stats logger
* @param perLogStatsLogger per log stream stats logger
* @param clientId client id
* @return namespace manager
* @throws IOException when failed to initialize the namespace manager
*/
NamespaceDriver initialize(DistributedLogConfiguration conf,
DynamicDistributedLogConfiguration dynConf,
URI namespace,
OrderedScheduler scheduler,
FeatureProvider featureProvider,
AsyncFailureInjector failureInjector,
StatsLogger statsLogger,
StatsLogger perLogStatsLogger,
String clientId,
int regionId) throws IOException;
/**
* Get the scheme of the namespace driver.
*
* @return the scheme of the namespace driver.
*/
String getScheme();
/**
* Get the root uri of the namespace driver.
*
* @return the root uri of the namespace driver.
*/
URI getUri();
/**
* Retrieve the log {@code metadata store} used by the namespace.
*
* @return the log metadata store
*/
LogMetadataStore getLogMetadataStore();
/**
* Retrieve the log stream {@code metadata store} used by the namespace.
*
* @param role the role to retrieve the log stream metadata store.
* @return the log stream metadata store
*/
LogStreamMetadataStore getLogStreamMetadataStore(Role role);
/**
* Retrieve the log segment {@code entry store} used by the namespace.
*
* @param role the role to retrieve the log segment entry store.
* @return the log segment entry store.
* @throws IOException when failed to open log segment entry store.
*/
LogSegmentEntryStore getLogSegmentEntryStore(Role role);
/**
* Create an access control manager to manage/check acl for logs.
*
* @return access control manager for logs under the namespace.
* @throws IOException
*/
AccessControlManager getAccessControlManager()
throws IOException;
/**
* Retrieve the metadata accessor for log stream {@code streamName}.
* (TODO: it is a legacy interface. should remove it if we have metadata of stream.)
*
* @param streamName name of log stream.
* @return metadata accessor for log stream {@code streamName}.
*/
MetadataAccessor getMetadataAccessor(String streamName)
throws InvalidStreamNameException, IOException;
/**
* Retrieve the subscriptions store for log stream {@code streamName}.
*
* @return the subscriptions store for log stream {@code streamName}
*/
SubscriptionsStore getSubscriptionsStore(String streamName);
}