package com.linkedin.databus.client.pub;
/*
*
* Copyright 2013 LinkedIn Corp. All rights reserved
*
* Licensed 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.
*
*/
import com.linkedin.databus.core.data_model.DatabusSubscription;
import com.linkedin.databus2.core.filter.DbusKeyCompositeFilterConfig;
public interface DatabusV3Client extends DatabusClient
{
/**
* Subscribes a single consumer to the on-line update stream / bootstrap for the specified subscriptions
* On a successful call, a registration object is returned
*
* It is possible to specify an id, to be used to identify this registration. If rid is null,
* a unique id is generated by the library and returned through the DatabusEspressoRegistration
* object ( can be queried through getId() interface )
*
* During a client's lifetime, registrationIds are persistent. i.e., it is possible to stop the
* consumer, bring it back and associate it with the same registration @see DatabusEspressoRegistration
*
* @param listener
* @param rid
* @param filterConfig
* @param subs
* @return
* @throws DatabusClientException
*/
public DatabusV3Registration registerDatabusListener(DatabusV3Consumer consumer,
RegistrationId rid,
DbusKeyCompositeFilterConfig filterConfig,
DatabusSubscription ... subs)
throws DatabusClientException;
/**
* Subscribes a group of consumer to the on-line update stream / bootstrap for the specified subscriptions.
* The onEvent callbacks will be spread and run in parallel across all consumers
*
* The association between a registration and consumer is 1:N
* (N > 1) is allowed if and only if all of the consumers have the same subscriptions
*
* @param listeners
* @param rid
* @param filterConfig
* @param subs : Espresso subscriptions with a URI format as follows:
*
* espresso:[//authority]/dbName/partition[/table]
* <ul>
* <li><i>authority</i> can be MASTER, SLAVE, ANY; by default is ANY
* <li><i>dbName</i> is the espresso DB name
* <li><i>partition</i> is the partition number of * for all partitions
* <li><i>table</i> is the espresso table name or * for all tables; default is *
* </ul>
* @return DatabusV3Registration object
* @throws DatabusClientException
*/
public DatabusV3Registration registerDatabusListener(DatabusV3Consumer[] consumers,
RegistrationId rid,
DbusKeyCompositeFilterConfig filterConfig,
DatabusSubscription ... subs)
throws DatabusClientException;
/**
* A registrationId uniquely identifies a DatabusV3Registration object in a given client.
*
* The function below is provided for convenience to retrieve a DatabusEspressoRegistration object
* given its id. If there does not exist an object with such an id, it returns null
*
* @param id
* @return Return a DatabusRegistration object given its id
*/
public DatabusV3Registration getRegistration(RegistrationId rid);
/**
* This method is used to register a consumer factory with the client in load-balanced mode
*
* All the parameters below are required
* @param clientClusterName Name of the client cluster in Helix to connect
* @param consumerFactory A concrete implementation for DbusClusterConsumerFactory
* @param sourceUris A comma-separate list of source URIs from which the application wants to consume change events.
* The sources are expected to be in URI format as described in {@link EspressoSubscriptionUriCodec}.
*
* Examples for valid format of sources:
* espresso:/MyDB/<wildcard>/<wildcard> [In MyDB on Espresso, all partitions and all tables] (or)
* espresso:/MyDB/1/<wildcard> [In MyDB on Espresso, partition 1 and all tables] (or)
* espresso:/MyDB/<wildcard>/Table1 [In MyDB on Espresso, all partitions, only Table1] (or)
* espresso:/MyDB/<wildcard>/Table1,espresso:/MyDB/<wildcard>/Table2 [In MyDB on Espresso, all partitions, Table1 and Table2]
*
* Non-wildcard partitioned subscriptions are not accepted for this api.
* Examples of invalid format of sources:
* espresso:/MyDB/0/<wildcard>
* espresso:/MyDB/0/table1,espresso:/MyDB/1/Table2
*
* A client cluster can only support one database. Further, the database name must be the same across all registrations for the
* client cluster. If different database names are specified, the behavior is undefined.
*
* @return DatabusV3Registration A parent registration is returned to the client which may be cached for informational purpose.
* Please see {@link DatabusV3Registration} for more information
*/
public DatabusV3Registration registerCluster(String clientClusterName,
DbusV3ClusterConsumerFactory consumerFactory,
String... sourceUris)
throws DatabusClientException;
}