/*
* 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 gobblin.kafka.schemareg;
import java.io.IOException;
import org.apache.avro.Schema;
/**
* An interface for a Kafka Schema Registry
* Classes implementing this interface will typically be constructed by a {@link KafkaSchemaRegistryFactory}
* and should have a constructor that takes a {@link java.util.Properties} object as a parameter.
*
* @param <K> : the type of the schema identifier (e.g. int, string, md5, ...)
* @param <S> : the type of the schema system in use (e.g. avro's Schema, ... )
*/
public interface KafkaSchemaRegistry<K, S> {
/**
* Register this schema under the provided name
* @param name
* @param schema
* @return the schema identifier
* @throws IOException
* @throws SchemaRegistryException
*/
public K register(String name, S schema) throws IOException, SchemaRegistryException;
/**
* Get a schema given an id
* @param id
* @return the Schema
* @throws IOException
* @throws SchemaRegistryException
*/
public S getById(K id)
throws IOException, SchemaRegistryException;
/**
* Get the latest schema that was registered under this name
* @param name
* @return the latest Schema
* @throws SchemaRegistryException
*/
public S getLatestSchema(String name) throws IOException, SchemaRegistryException;
/**
*
* SchemaRegistry implementations that do not have an internal cache can set this to false
* and Gobblin will supplement such registries with a cache on top (if enabled).
* @return whether this implementation of the schema registry has an internal cache
*/
boolean hasInternalCache();
}