blob: 2bc740a41d48b15bacad69ce8a0c3fa4fc61aff9 [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.pulsar.broker.systopic;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import org.apache.pulsar.client.api.Message;
import org.apache.pulsar.client.api.MessageId;
import org.apache.pulsar.client.api.PulsarClientException;
import org.apache.pulsar.common.naming.TopicName;
/**
* Pulsar system topic.
*/
public interface SystemTopicClient<T> {
/**
* Get topic name of the system topic.
* @return topic name
*/
TopicName getTopicName();
/**
* Create a reader for the system topic.
* @return a new reader for the system topic
*/
Reader<T> newReader() throws PulsarClientException;
/**
* Create a reader for the system topic asynchronously.
*/
CompletableFuture<Reader<T>> newReaderAsync();
/**
* Create a writer for the system topic.
* @return writer for the system topic
*/
Writer<T> newWriter() throws PulsarClientException;
/**
* Create a writer for the system topic asynchronously.
*/
CompletableFuture<Writer<T>> newWriterAsync();
/**
* Close the system topic.
*/
void close() throws Exception;
/**
* Close the system topic asynchronously.
* @return
*/
CompletableFuture<Void> closeAsync();
/**
* Get all writers of the system topic.
*
* @return {@link java.util.Set} the set of writers
*/
List<Writer<T>> getWriters();
/**
* Get all readers of the system topic.
* @return {@link java.util.Set} the set of readers
*/
List<Reader<T>> getReaders();
/**
* Writer for system topic.
*/
interface Writer<T> {
/**
* Write event to the system topic.
* @param t pulsar event
* @return message id
* @throws PulsarClientException exception while write event cause
*/
MessageId write(T t) throws PulsarClientException;
/**
* Async write event to the system topic.
* @param t pulsar event
* @return message id future
*/
CompletableFuture<MessageId> writeAsync(T t);
/**
* Delete event in the system topic.
* @param t pulsar event
* @return message id
* @throws PulsarClientException exception while write event cause
*/
default MessageId delete(T t) throws PulsarClientException {
throw new UnsupportedOperationException("Unsupported operation");
}
/**
* Async delete event in the system topic.
* @param t pulsar event
* @return message id future
*/
default CompletableFuture<MessageId> deleteAsync(T t) {
throw new UnsupportedOperationException("Unsupported operation");
}
/**
* Close the system topic writer.
*/
void close() throws IOException;
/**
* Close the writer of the system topic asynchronously.
*/
CompletableFuture<Void> closeAsync();
/**
* Get the system topic of the writer.
* @return system topic
*/
SystemTopicClient<T> getSystemTopicClient();
}
/**
* Reader for system topic.
*/
interface Reader<T> {
/**
* Read event from system topic.
* @return pulsar event
*/
Message<T> readNext() throws PulsarClientException;
/**
* Async read event from system topic.
* @return pulsar event future
*/
CompletableFuture<Message<T>> readNextAsync();
/**
* Check has more events available for the reader.
* @return true if has remaining events, otherwise false
*/
boolean hasMoreEvents() throws PulsarClientException;
/**
* Check has more events available for the reader asynchronously.
* @return true if has remaining events, otherwise false
*/
CompletableFuture<Boolean> hasMoreEventsAsync();
/**
* Close the system topic reader.
*/
void close() throws IOException;
/**
* Close the reader of the system topic asynchronously.
*/
CompletableFuture<Void> closeAsync();
/**
* Get the system topic of the reader.
* @return system topic
*/
SystemTopicClient<T> getSystemTopic();
}
}