/**
 * 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.
 */
syntax = "proto2";

package pulsar.delay;
option java_package = "org.apache.pulsar.broker.delayed.proto";
option optimize_for = SPEED;

message DelayedIndex {
    required uint64 timestamp = 1;
    required uint64 ledger_id = 2;
    required uint64 entry_id = 3;
}

message SnapshotSegmentMetadata {
    map<uint64, bytes> delayed_index_bit_map = 1;
    required uint64 max_schedule_timestamp = 2;
    required uint64 min_schedule_timestamp = 3;
}

message SnapshotSegment {
    repeated DelayedIndex indexes = 1;
}

message SnapshotMetadata {
    repeated SnapshotSegmentMetadata metadata_list = 1;
}
