| /** |
| * 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. |
| */ |
| |
| /** |
| * These .proto interfaces are private and stable. |
| * Please see http://wiki.apache.org/hadoop/Compatibility |
| * for what changes are allowed for a *stable* .proto interface. |
| */ |
| |
| option java_package = "org.apache.hadoop.hdfs.qjournal.protocol"; |
| option java_outer_classname = "QJournalProtocolProtos"; |
| option java_generic_services = true; |
| option java_generate_equals_and_hash = true; |
| package hadoop.hdfs.qjournal; |
| |
| import "hdfs.proto"; |
| |
| message JournalIdProto { |
| required string identifier = 1; |
| } |
| |
| message RequestInfoProto { |
| required JournalIdProto journalId = 1; |
| required uint64 epoch = 2; |
| required uint64 ipcSerialNumber = 3; |
| |
| // Whenever a writer makes a request, it informs |
| // the node of the latest committed txid. This may |
| // be higher than the transaction data included in the |
| // request itself, eg in the case that the node has |
| // fallen behind. |
| optional uint64 committedTxId = 4; |
| } |
| |
| message SegmentStateProto { |
| required uint64 startTxId = 1; |
| required uint64 endTxId = 2; |
| required bool isInProgress = 3; |
| } |
| |
| /** |
| * The storage format used on local disk for previously |
| * accepted decisions. |
| */ |
| message PersistedRecoveryPaxosData { |
| required SegmentStateProto segmentState = 1; |
| required uint64 acceptedInEpoch = 2; |
| } |
| |
| /** |
| * journal() |
| */ |
| |
| message JournalRequestProto { |
| required RequestInfoProto reqInfo = 1; |
| required uint64 firstTxnId = 2; |
| required uint32 numTxns = 3; |
| required bytes records = 4; |
| required uint64 segmentTxnId = 5; |
| } |
| |
| message JournalResponseProto { |
| } |
| |
| /** |
| * heartbeat() |
| */ |
| |
| message HeartbeatRequestProto { |
| required RequestInfoProto reqInfo = 1; |
| } |
| |
| message HeartbeatResponseProto { // void response |
| } |
| |
| /** |
| * startLogSegment() |
| */ |
| message StartLogSegmentRequestProto { |
| required RequestInfoProto reqInfo = 1; |
| required uint64 txid = 2; // Transaction ID |
| optional sint32 layoutVersion = 3; // the LayoutVersion in the client |
| } |
| |
| message StartLogSegmentResponseProto { |
| } |
| |
| /** |
| * finalizeLogSegment() |
| */ |
| message FinalizeLogSegmentRequestProto { |
| required RequestInfoProto reqInfo = 1; |
| required uint64 startTxId = 2; |
| required uint64 endTxId = 3; |
| } |
| |
| message FinalizeLogSegmentResponseProto { |
| } |
| |
| /** |
| * purgeLogs() |
| */ |
| message PurgeLogsRequestProto { |
| required RequestInfoProto reqInfo = 1; |
| required uint64 minTxIdToKeep = 2; |
| } |
| |
| message PurgeLogsResponseProto { |
| } |
| |
| /** |
| * isFormatted() |
| */ |
| message IsFormattedRequestProto { |
| required JournalIdProto jid = 1; |
| } |
| |
| message IsFormattedResponseProto { |
| required bool isFormatted = 1; |
| } |
| |
| /** |
| * getJournalCTime() |
| */ |
| message GetJournalCTimeRequestProto { |
| required JournalIdProto jid = 1; |
| } |
| |
| message GetJournalCTimeResponseProto { |
| required int64 resultCTime = 1; |
| } |
| |
| /** |
| * doPreUpgrade() |
| */ |
| message DoPreUpgradeRequestProto { |
| required JournalIdProto jid = 1; |
| } |
| |
| message DoPreUpgradeResponseProto { |
| } |
| |
| /** |
| * doUpgrade() |
| */ |
| message DoUpgradeRequestProto { |
| required JournalIdProto jid = 1; |
| required StorageInfoProto sInfo = 2; |
| } |
| |
| message DoUpgradeResponseProto { |
| } |
| |
| /** |
| * doFinalize() |
| */ |
| message DoFinalizeRequestProto { |
| required JournalIdProto jid = 1; |
| } |
| |
| message DoFinalizeResponseProto { |
| } |
| |
| /** |
| * canRollBack() |
| */ |
| message CanRollBackRequestProto { |
| required JournalIdProto jid = 1; |
| required StorageInfoProto storage = 2; |
| required StorageInfoProto prevStorage = 3; |
| required int32 targetLayoutVersion = 4; |
| } |
| |
| message CanRollBackResponseProto { |
| required bool canRollBack = 1; |
| } |
| |
| /** |
| * doRollback() |
| */ |
| message DoRollbackRequestProto { |
| required JournalIdProto jid = 1; |
| } |
| |
| message DoRollbackResponseProto { |
| } |
| |
| /** |
| * discardSegments() |
| */ |
| message DiscardSegmentsRequestProto { |
| required JournalIdProto jid = 1; |
| required uint64 startTxId = 2; |
| } |
| |
| message DiscardSegmentsResponseProto { |
| } |
| |
| /** |
| * getJournalState() |
| */ |
| message GetJournalStateRequestProto { |
| required JournalIdProto jid = 1; |
| } |
| |
| message GetJournalStateResponseProto { |
| required uint64 lastPromisedEpoch = 1; |
| // Deprecated by fromURL |
| required uint32 httpPort = 2; |
| optional string fromURL = 3; |
| } |
| |
| /** |
| * format() |
| */ |
| message FormatRequestProto { |
| required JournalIdProto jid = 1; |
| required NamespaceInfoProto nsInfo = 2; |
| } |
| |
| message FormatResponseProto { |
| } |
| |
| /** |
| * newEpoch() |
| */ |
| message NewEpochRequestProto { |
| required JournalIdProto jid = 1; |
| required NamespaceInfoProto nsInfo = 2; |
| required uint64 epoch = 3; |
| } |
| |
| message NewEpochResponseProto { |
| optional uint64 lastSegmentTxId = 1; |
| } |
| |
| /** |
| * getEditLogManifest() |
| */ |
| message GetEditLogManifestRequestProto { |
| required JournalIdProto jid = 1; |
| required uint64 sinceTxId = 2; // Transaction ID |
| // Whether or not the client will be reading from the returned streams. |
| // optional bool forReading = 3 [default = true]; <obsolete, do not reuse> |
| optional bool inProgressOk = 4 [default = false]; |
| } |
| |
| message GetEditLogManifestResponseProto { |
| required RemoteEditLogManifestProto manifest = 1; |
| // Deprecated by fromURL |
| required uint32 httpPort = 2; |
| optional string fromURL = 3; |
| |
| // TODO: we should add nsinfo somewhere |
| // to verify that it matches up with our expectation |
| // required NamespaceInfoProto nsInfo = 2; |
| } |
| |
| /** |
| * prepareRecovery() |
| */ |
| message PrepareRecoveryRequestProto { |
| required RequestInfoProto reqInfo = 1; |
| required uint64 segmentTxId = 2; |
| } |
| |
| message PrepareRecoveryResponseProto { |
| optional SegmentStateProto segmentState = 1; |
| optional uint64 acceptedInEpoch = 2; |
| required uint64 lastWriterEpoch = 3; |
| |
| // The highest committed txid that this logger has ever seen. |
| // This may be higher than the data it actually has, in the case |
| // that it was lagging before the old writer crashed. |
| optional uint64 lastCommittedTxId = 4; |
| } |
| |
| /** |
| * acceptRecovery() |
| */ |
| message AcceptRecoveryRequestProto { |
| required RequestInfoProto reqInfo = 1; |
| |
| /** Details on the segment to recover */ |
| required SegmentStateProto stateToAccept = 2; |
| |
| /** The URL from which the log may be copied */ |
| required string fromURL = 3; |
| } |
| |
| message AcceptRecoveryResponseProto { |
| } |
| |
| |
| /** |
| * Protocol used to journal edits to a JournalNode. |
| * See the request and response for details of rpc call. |
| */ |
| service QJournalProtocolService { |
| rpc isFormatted(IsFormattedRequestProto) returns (IsFormattedResponseProto); |
| |
| rpc getJournalCTime(GetJournalCTimeRequestProto) returns (GetJournalCTimeResponseProto); |
| |
| rpc doPreUpgrade(DoPreUpgradeRequestProto) returns (DoPreUpgradeResponseProto); |
| |
| rpc doUpgrade(DoUpgradeRequestProto) returns (DoUpgradeResponseProto); |
| |
| rpc doFinalize(DoFinalizeRequestProto) returns (DoFinalizeResponseProto); |
| |
| rpc canRollBack(CanRollBackRequestProto) returns (CanRollBackResponseProto); |
| |
| rpc doRollback(DoRollbackRequestProto) returns (DoRollbackResponseProto); |
| |
| rpc discardSegments(DiscardSegmentsRequestProto) returns (DiscardSegmentsResponseProto); |
| |
| rpc getJournalState(GetJournalStateRequestProto) returns (GetJournalStateResponseProto); |
| |
| rpc newEpoch(NewEpochRequestProto) returns (NewEpochResponseProto); |
| |
| rpc format(FormatRequestProto) returns (FormatResponseProto); |
| |
| rpc journal(JournalRequestProto) returns (JournalResponseProto); |
| |
| rpc heartbeat(HeartbeatRequestProto) returns (HeartbeatResponseProto); |
| |
| rpc startLogSegment(StartLogSegmentRequestProto) |
| returns (StartLogSegmentResponseProto); |
| |
| rpc finalizeLogSegment(FinalizeLogSegmentRequestProto) |
| returns (FinalizeLogSegmentResponseProto); |
| |
| rpc purgeLogs(PurgeLogsRequestProto) |
| returns (PurgeLogsResponseProto); |
| |
| rpc getEditLogManifest(GetEditLogManifestRequestProto) |
| returns (GetEditLogManifestResponseProto); |
| |
| rpc prepareRecovery(PrepareRecoveryRequestProto) |
| returns (PrepareRecoveryResponseProto); |
| |
| rpc acceptRecovery(AcceptRecoveryRequestProto) |
| returns (AcceptRecoveryResponseProto); |
| } |