/*
 * 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.
 */

option java_package = "org.apache.phoenix.coprocessor.generated";
option java_outer_classname = "ServerCachingProtos";
option java_generic_services = true;
option java_generate_equals_and_hash = true;
option optimize_for = SPEED;

import "ServerCacheFactory.proto";

message ImmutableBytesWritable {
  required bytes byteArray = 1;
  required int32 offset = 2;
  required int32 length = 3;
}

message ColumnReference {
  required bytes family = 1;
  required bytes qualifier = 2;
}

message ColumnInfo {
  optional string familyName = 1;
  required string columnName = 2;
}

message IndexMaintainer {
  required int32 saltBuckets = 1;
  required bool isMultiTenant = 2;
  optional bytes viewIndexId = 3;
  repeated ColumnReference indexedColumns = 4;
  repeated int32 indexedColumnTypeOrdinal = 5;
  repeated ColumnReference dataTableColRefForCoveredColumns = 6;
  repeated ColumnReference indexTableColRefForCoveredColumns = 7;
  required bool isLocalIndex = 8;
  required bytes indexTableName = 9;
  required bool rowKeyOrderOptimizable = 10;
  required bytes dataTableEmptyKeyValueColFamily = 11;
  required ImmutableBytesWritable emptyKeyValueColFamily = 12;
  optional bytes indexedExpressions = 13;
  required bytes rowKeyMetadata = 14;
  required int32 numDataTableColFamilies = 15;
  required bool indexWalDisabled = 16;
  required int32 indexRowKeyByteSize = 17;
  required bool immutable = 18;
  repeated ColumnInfo indexedColumnInfo = 19;
  required int32 encodingScheme = 20;
  required int32 immutableStorageScheme = 21;
  optional int32 viewIndexIdType = 22 ;
  optional int32 indexDataColumnCount = 23 [default = -1];
  optional string parentTableType = 24;
  optional string logicalIndexName = 25;
  optional int32 dataEncodingScheme = 26;
  optional int32 dataImmutableStorageScheme = 27;
  optional bool isUncovered = 28;
  optional bytes indexWhere = 29;
  repeated ColumnReference indexWhereColumns = 30;
  optional bool isCDCIndex = 31;
  optional int32 dataTableSaltBuckets = 32;
  optional string indexConsistency = 33;
}

message TransformMaintainer {
  required int32 saltBuckets = 1;
  required bool isMultiTenant = 2;
  repeated ColumnReference newTableColumns = 3;
  repeated ColumnReference oldTableColRefForCoveredColumns = 4;
  repeated ColumnReference newTableColRefForCoveredColumns = 5;
  required bytes newTableName = 6;
  required bool newTableRowKeyOrderOptimizable = 7;
  required bytes oldTableEmptyKeyValueColFamily = 8;
  required ImmutableBytesWritable emptyKeyValueColFamily = 9;
  optional bytes newTableExpressions = 10;
  required int32 numDataTableColFamilies = 11;
  required bool newTableWalDisabled = 12;
  required int32 newTableRowKeyByteSize = 13;
  required bool newTableImmutable = 14;
  repeated ColumnInfo newTableColumnInfo = 15;
  required int32 newTableEncodingScheme = 16;
  required int32 newTableImmutableStorageScheme = 17;
  optional int32 newTableColumnCount = 18 [default = -1];
  optional string parentTableType = 19;
  optional string logicalNewTableName = 20;
  optional int32 oldTableEncodingScheme = 21;
  optional int32 oldTableImmutableStorageScheme = 22;
}

message AddServerCacheRequest {
  optional bytes tenantId = 1;
  required bytes cacheId = 2;
  required ImmutableBytesWritable cachePtr = 3;
  required ServerCacheFactory cacheFactory = 4;
  optional bytes txState = 5;
  optional bool hasProtoBufIndexMaintainer = 6;
  optional int32 clientVersion = 7;
  optional bool usePersistentCache = 8;
}

message AddServerCacheResponse {
  required bool return = 1;
}

message RemoveServerCacheRequest {
  optional bytes tenantId = 1;
  required bytes cacheId = 2;
}

message RemoveServerCacheResponse {
  required bool return = 1;
}

service ServerCachingService {
  rpc addServerCache(AddServerCacheRequest)
      returns (AddServerCacheResponse);

  rpc removeServerCache(RemoveServerCacheRequest)
      returns (RemoveServerCacheResponse);
}
