blob: 06a0600c0d78daee854a4fc37a05cf603e62fb94 [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.distributedlog.metadata;
import org.apache.distributedlog.DLSN;
import org.apache.distributedlog.LogRecordWithDLSN;
import org.apache.distributedlog.LogSegmentMetadata;
import org.apache.distributedlog.util.Transaction;
import com.twitter.util.Future;
/**
* An updater to update metadata. It contains utility functions on mutating metadata.
*/
public interface MetadataUpdater {
/**
* Start a transaction on metadata updates
*
* @return transaction
*/
Transaction<Object> transaction();
/**
* Update the log segment metadata with correct last <i>record</i>.
*
* @param segment
* log segment to update last dlsn.
* @param record
* correct last record.
* @return new log segment
*/
Future<LogSegmentMetadata> updateLastRecord(LogSegmentMetadata segment,
LogRecordWithDLSN record);
/**
* Change ledger sequence number of <i>segment</i> to given <i>logSegmentSeqNo</i>.
*
* @param segment
* log segment to change sequence number.
* @param logSegmentSeqNo
* ledger sequence number to change.
* @return new log segment
*/
Future<LogSegmentMetadata> changeSequenceNumber(LogSegmentMetadata segment,
long logSegmentSeqNo);
/**
* Change the truncation status of a <i>log segment</i> to be active
*
* @param segment
* log segment to change truncation status to active.
* @return new log segment
*/
Future<LogSegmentMetadata> setLogSegmentActive(LogSegmentMetadata segment);
/**
* Change the truncation status of a <i>log segment</i> to truncated
*
* @param segment
* log segment to change truncation status to truncated.
* @return new log segment
*/
Future<LogSegmentMetadata> setLogSegmentTruncated(LogSegmentMetadata segment);
/**
* Change the truncation status of a <i>log segment</i> to truncated. The operation won't be executed
* immediately. The update only happens after {@link Transaction#execute()}.
*
* @param txn
* transaction used to set the log segment status
* @param segment
* segment to set truncation status to truncated
* @return log segment that truncation status is set to truncated.
*/
LogSegmentMetadata setLogSegmentTruncated(Transaction<Object> txn, LogSegmentMetadata segment);
/**
* Change the truncation status of a <i>log segment</i> to partially truncated
*
* @param segment
* log segment to change sequence number.
* @param minActiveDLSN
* DLSN within the log segment before which log has been truncated
* @return new log segment
*/
Future<LogSegmentMetadata> setLogSegmentPartiallyTruncated(LogSegmentMetadata segment,
DLSN minActiveDLSN);
/**
* Change the truncation status of a <i>log segment</i> to partially truncated. The operation won't be
* executed until {@link Transaction#execute()}.
*
* @param txn
* transaction used to set the log segment status
* @param segment
* segment to set truncation status to partially truncated
* @param minActiveDLSN
* DLSN within the log segment before which log has been truncated
* @return log segment that truncation status has been set to partially truncated
*/
LogSegmentMetadata setLogSegmentPartiallyTruncated(Transaction<Object> txn,
LogSegmentMetadata segment,
DLSN minActiveDLSN);
}