blob: f00eb839899420a7b84fde20523339999eb5e34c [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.
syntax = "proto2";
package kudu.transactions;
option java_package = "org.apache.kudu.transactions";
// The following state changes are expected:
//
// BeginCommit FinalizeCommit CompleteCommit
// OPEN --> COMMIT_IN_PROGRESS --> FINALIZE_IN_PROGRESS --> COMMITTED
//
// BeginCommit BeginAbort FinalizeAbort
// OPEN --> COMMIT_IN_PROGRESS --> ABORT_IN_PROGRESS --> ABORTED
//
// AbortTxn FinalizeAbort
// OPEN --> ABORT_IN_PROGRESS --> ABORTED
enum TxnStatePB {
UNKNOWN = 0;
// The transaction is open. Users can write to participants, and register new
// participants.
OPEN = 1;
// A user or Kudu's transaction staleness tracker has signaled that the
// transaction should be aborted. No further participants can be registered,
// and the transaction can only be moved to the ABORTED state after sending
// ABORT_TXN ops to all participants.
ABORT_IN_PROGRESS = 5;
// The transaction has been fully aborted -- all participants have
// successfully replicated ABORT_TXN ops and cleared the transaction. No
// further tasks are required to abort the transaction.
ABORTED = 2;
// The user has signaled that the transaction should be committed. No further
// participants can be registered. The transaction may still be aborted if
// prompted by a user or if sending any BEGIN_COMMIT op fails.
COMMIT_IN_PROGRESS = 3;
// Kudu has successfully sent BEGIN_COMMIT ops to all participants, and has
// started sending FINALIZE_COMMIT ops to participants. The transaction can
// only be moved to the COMMITTED state.
FINALIZE_IN_PROGRESS = 6;
// All FINALIZE_COMMIT ops have succeeded. No further tasks are required to
// commit the transaction.
COMMITTED = 4;
}
// Metadata encapsulating the status of a transaction.
message TxnStatusEntryPB {
optional TxnStatePB state = 1;
optional string user = 2;
// Commit timestamp associated with this transaction.
optional fixed64 commit_timestamp = 3;
// The timestamp in seconds since the epoch that this transaction was
// started.
optional int64 start_timestamp = 4;
// The timestamp in seconds since the epoch that this transaction had a state
// change.
optional int64 last_transition_timestamp = 5;
}
// Metadata encapsulating the existence of a transaction participant.
message TxnParticipantEntryPB {
optional TxnStatePB state = 1;
}
// High-level metadata about a transaction. Serialized messages of this type
// are used to pass information on an already opened transaction among multiple
// Kudu clients (even if residing on different nodes), so they can issue write
// operations in the context of the same multi-row distributed transaction.
message TxnTokenPB {
// Transaction identifier assigned to the transaction.
optional int64 txn_id = 1;
// The keep-alive interval (in milliseconds) to keep the transaction alive.
// To avoid auto-aborting the transaction, TxnManager should receive
// keep-alive heartbeats spaced by intervals equal or shorter than
// 'keepalive_millis' milliseconds in duration.
optional uint32 keepalive_millis = 2;
// Whether the client should automatically send keepalive messages once
// this token is deserialized into a runtime transaction handle.
optional bool enable_keepalive = 3;
}