blob: cc1c65de890c0019982e4ee88b88152784f2b1aa [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.ignite.internal.catalog;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import org.apache.ignite.internal.catalog.descriptors.CatalogIndexDescriptor;
import org.apache.ignite.internal.catalog.descriptors.CatalogIndexStatus;
import org.apache.ignite.internal.catalog.descriptors.CatalogSchemaDescriptor;
import org.apache.ignite.internal.catalog.descriptors.CatalogTableDescriptor;
import org.apache.ignite.internal.catalog.descriptors.CatalogZoneDescriptor;
import org.apache.ignite.internal.catalog.events.CatalogEvent;
import org.apache.ignite.internal.catalog.events.CatalogEventParameters;
import org.apache.ignite.internal.event.EventProducer;
import org.jetbrains.annotations.Nullable;
/**
* Catalog service provides methods to access schema object's descriptors of exact version and/or last actual version at given timestamp,
* which is logical point-in-time.
*
* <p>Catalog service listens distributed schema update event, stores/restores schema evolution history (schema versions) for time-travelled
* queries purposes and for lazy data evolution purposes.
*
* <p>Notes:</p>
* <ul>
* <li>Events are fired in the metastore thread.</li>
* </ul>
*
* <p>TBD: events
*/
public interface CatalogService extends EventProducer<CatalogEvent, CatalogEventParameters> {
/** Default schema name. */
String DEFAULT_SCHEMA_NAME = "PUBLIC";
/** System schema name. */
String SYSTEM_SCHEMA_NAME = "SYSTEM";
/** Default storage profile. */
String DEFAULT_STORAGE_PROFILE = "default";
@Nullable Catalog catalog(int catalogVersion);
@Nullable CatalogTableDescriptor table(String tableName, long timestamp);
@Nullable CatalogTableDescriptor table(int tableId, long timestamp);
@Nullable CatalogTableDescriptor table(int tableId, int catalogVersion);
Collection<CatalogTableDescriptor> tables(int catalogVersion);
/**
* Returns an <em>alive</em> index with the given name, that is an index that has not been dropped yet at a given point in time.
*
* <p>This effectively means that the index must be present in the Catalog and not in the {@link CatalogIndexStatus#STOPPING}
* state.
*/
@Nullable CatalogIndexDescriptor aliveIndex(String indexName, long timestamp);
@Nullable CatalogIndexDescriptor index(int indexId, long timestamp);
@Nullable CatalogIndexDescriptor index(int indexId, int catalogVersion);
Collection<CatalogIndexDescriptor> indexes(int catalogVersion);
List<CatalogIndexDescriptor> indexes(int catalogVersion, int tableId);
@Nullable CatalogSchemaDescriptor schema(int catalogVersion);
@Nullable CatalogSchemaDescriptor schema(@Nullable String schemaName, int catalogVersion);
@Nullable CatalogSchemaDescriptor schema(int schemaId, int catalogVersion);
@Nullable CatalogZoneDescriptor zone(String zoneName, long timestamp);
@Nullable CatalogZoneDescriptor zone(int zoneId, long timestamp);
@Nullable CatalogZoneDescriptor zone(int zoneId, int catalogVersion);
Collection<CatalogZoneDescriptor> zones(int catalogVersion);
@Nullable CatalogSchemaDescriptor activeSchema(long timestamp);
@Nullable CatalogSchemaDescriptor activeSchema(@Nullable String schemaName, long timestamp);
int activeCatalogVersion(long timestamp);
/** Returns the earliest registered version of the catalog. */
int earliestCatalogVersion();
/** Returns the latest registered version of the catalog. */
int latestCatalogVersion();
/**
* Returns a future, which completes, when catalog of given version will be available.
*
* @param version Catalog version to wait for.
*/
CompletableFuture<Void> catalogReadyFuture(int version);
/**
* Returns a future, which completes when empty catalog is initialised. Otherwise this future completes upon startup.
*/
CompletableFuture<Void> catalogInitializationFuture();
}