Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

kv,client,storage: rationalize TxnCoordSender/client.Txn redundant states #25541

Merged
merged 5 commits into from
Jun 5, 2018

Conversation

andreimatei
Copy link
Contributor

client.Txn and TCS try to maintain a bunch of logically-redundant state
about whether a transaction is "writing" - essentially whether an
EndTransaction needs to be sent to cleanup up the TCS heartbeat loop and
the server's txn record.
The logic that both parties used for this was complex (e.g. it involved
updates in both Txn and TCS both on the outgoing path and on the
returning path of a batch) and not in sync - sometimes the TCS would
consider the txn as "writing" and the client.Txn wouldn't (e.g. in case
the first writing batch got an ambiguous error).

This patch simplifies things: the idea is that, if a BeginTxn has been
sent, an EndTransaction needs to be sent, period. The client.Txn thus
only keeps track of whether a BeginTxn was sent (except for a 1PC
batch), and it takes charge of starting the TCS' heartbeat loop (by
instructing it explicitly directly to start it before the BeginTxn is
sent). The TCS is no longer burdened with maintaining any state about
whether there is a txn record or not.

As a byproduct, the proto Transaction.Writing flag, which used to have
an unclear meaning, becomes straight forward: if set, the server needs
to check batches against the abort cache. The client is the only one
setting it, the server is the only one checking it. It used to be used
for different purposeses by both the client and server.

Release note: none

@andreimatei andreimatei requested review from a team May 16, 2018 03:16
@cockroach-teamcity
Copy link
Member

This change is Reviewable

@bdarnell
Copy link
Contributor

LGTM, but I'm concerned about how this will work in mixed-version clusters. Is it safe to just make the change? (It might be. It's hard to tell how much we were relying on the server-set Writing flag before)


Reviewed 19 of 20 files at r1, 3 of 3 files at r2.
Review status: all files reviewed at latest revision, all discussions resolved, some commit checks failed.


pkg/internal/client/txn.go, line 658 at r2 (raw file):

// readOnlyRes is returned by maybeFinishReadonly, informing the caller of what
// cleanup needs to take place.
type readOnlyRes int

Should we just reuse the txnState enum for this? If we do need a new enum, we should give them all a common prefix - writing is a pretty generic name to use at package scope. And a value of writing for readOnlyRes is an odd name.


pkg/sql/sem/tree/stmt.go, line 652 at r2 (raw file):

func (*ShowCreateTable) hiddenFromStats()                   {}
func (*ShowCreateTable) independentFromParallelizedPriors() {}

Removing this from ShowCreateTable without also removing it from ShowCreateView and other statements seems like a bad idea. @nvanbenschoten should weigh in on why the show statements were exempted here.


pkg/storage/batcheval/cmd_begin_transaction.go, line 134 at r2 (raw file):

	// Write the txn record.
	reply.Txn.Writing = true

I don't think it's safe to remove this without a cluster version check. Won't 2.0 nodes rely on this flag being set in BeginTransaction?


Comments from Reviewable

@andreimatei andreimatei requested a review from a team May 16, 2018 22:25
@andreimatei
Copy link
Contributor Author

I think you're right; I've added back the server-side code setting that flag gated by a new version not being active.
PTAL


Review status: 17 of 26 files reviewed at latest revision, 3 unresolved discussions.


pkg/internal/client/txn.go, line 658 at r2 (raw file):

Previously, bdarnell (Ben Darnell) wrote…

Should we just reuse the txnState enum for this? If we do need a new enum, we should give them all a common prefix - writing is a pretty generic name to use at package scope. And a value of writing for readOnlyRes is an odd name.

ok, shuffled things around and this is gone


pkg/sql/sem/tree/stmt.go, line 652 at r2 (raw file):

Previously, bdarnell (Ben Darnell) wrote…

Removing this from ShowCreateTable without also removing it from ShowCreateView and other statements seems like a bad idea. @nvanbenschoten should weigh in on why the show statements were exempted here.

ok, added a commit removing most of these


pkg/storage/batcheval/cmd_begin_transaction.go, line 134 at r2 (raw file):

Previously, bdarnell (Ben Darnell) wrote…

I don't think it's safe to remove this without a cluster version check. Won't 2.0 nodes rely on this flag being set in BeginTransaction?

put it back behind a version check


Comments from Reviewable

@nvanbenschoten
Copy link
Member

LGTM (mod comments), since it now looks like you're handling things correctly with mixed-version clusters.


Reviewed 16 of 20 files at r1, 10 of 10 files at r3, 3 of 3 files at r4, 1 of 1 files at r5.
Review status: all files reviewed at latest revision, 3 unresolved discussions, some commit checks failed.


pkg/internal/client/sender.go, line 112 at r3 (raw file):

// as TxnSenders with GetMeta or AugmentMeta panicing with unimplemented.
// This is a helper mechanism to facilitate testing.
type TxnSenderFunc struct {

I'd keep this as is and add a second TxnSenderStruct type (maybe with a different name). The <InterfaceName>Func pattern is very common.


pkg/internal/client/txn.go, line 72 at r3 (raw file):

		// be initially set when the transaction sends its first batch, but is
		// reset if the transaction is aborted.
		active bool

Did you look into merging this status into the txnState enum?


pkg/internal/client/txn.go, line 952 at r3 (raw file):

		needBeginTxn = haveTxnWrite && (txn.mu.state != txnWriting)
		// We need the EndTxn if we're ever written before or if we're writing now.

s/we're/we've/


pkg/internal/client/txn.go, line 953 at r3 (raw file):

		needBeginTxn = haveTxnWrite && (txn.mu.state != txnWriting)
		// We need the EndTxn if we're ever written before or if we're writing now.
		needEndTxn := txn.mu.state != txnReadOnly || haveTxnWrite

nit: flip this around so that it's easier to read and compare to the previous line:

needEndTxn := haveTxnWrite || (txn.mu.state != txnReadOnly)

pkg/kv/dist_sender_server_test.go, line 2529 at r3 (raw file):

				b := txn.NewBatch()
				b.CPut("a", "cput", "value")
				err := txn.CommitInBatch(ctx, b)

?


pkg/kv/txn_coord_sender.go, line 979 at r3 (raw file):

			log.VEventf(ctx, 2, "transaction heartbeat stopped: %s", ctx.Err())

			// Check if the closer channel had also been closed; in that case, that

Why do we suddenly need this?


pkg/kv/txn_coord_sender.go, line 1288 at r3 (raw file):

	// the current transaction timestamp.
	//
	// A tricky edge case is that of a transaction which "fails" on the

💯


pkg/kv/txn_coord_sender.go, line 1314 at r3 (raw file):

		tc.appendAndCondenseIntentsLocked(ctx, ba, br)

		// Initialize the first update time and maybe start the heartbeat.

:101:


pkg/roachpb/batch.go, line 409 at r3 (raw file):

		} else if et, ok := req.(*EndTransactionRequest); ok {
			h := req.Header()
			str = append(str, fmt.Sprintf("%s(commit:%t) [%s,%s)", req.Method(), et.Commit, h.Key, h.EndKey))

Will an EndTransactionRequest ever have an EndKey?


pkg/roachpb/data.proto, line 338 at r3 (raw file):

  // Transaction.UpdateObservedTimestamp to maintain the sorted order.
  repeated ObservedTimestamp observed_timestamps = 8 [(gogoproto.nullable) = false];
  // Writing is true if the transaction has previously executed a successful

This first sentence is no longer accurate.


Comments from Reviewable

@andreimatei andreimatei force-pushed the client-txn-states branch 2 times, most recently from 4236eb0 to c3956be Compare May 17, 2018 18:42
@andreimatei
Copy link
Contributor Author

Review status: 22 of 26 files reviewed at latest revision, 13 unresolved discussions.


pkg/internal/client/sender.go, line 112 at r3 (raw file):

Previously, nvanbenschoten (Nathan VanBenschoten) wrote…

I'd keep this as is and add a second TxnSenderStruct type (maybe with a different name). The <InterfaceName>Func pattern is very common.

renamed to TxnSenderAdapter


pkg/internal/client/txn.go, line 72 at r3 (raw file):

Previously, nvanbenschoten (Nathan VanBenschoten) wrote…

Did you look into merging this status into the txnState enum?

I looked now. Unfortunately this sucker doesn't match with any of the states. It means "has any request ever been sent". It's not a very important field... I'll leave it for another cleanup :)


pkg/internal/client/txn.go, line 952 at r3 (raw file):

Previously, nvanbenschoten (Nathan VanBenschoten) wrote…

s/we're/we've/

Done.


pkg/internal/client/txn.go, line 953 at r3 (raw file):

Previously, nvanbenschoten (Nathan VanBenschoten) wrote…

nit: flip this around so that it's easier to read and compare to the previous line:

needEndTxn := haveTxnWrite || (txn.mu.state != txnReadOnly)

Done.


pkg/kv/dist_sender_server_test.go, line 2529 at r3 (raw file):

Previously, nvanbenschoten (Nathan VanBenschoten) wrote…

?

Done.


pkg/kv/txn_coord_sender.go, line 979 at r3 (raw file):

Previously, nvanbenschoten (Nathan VanBenschoten) wrote…

Why do we suddenly need this?

I think we always needed it. I forgot why I added it here exactly; it could be that I just noticed some error while debugging.
In any case, luckily ctx.Done() is going away from here.


pkg/roachpb/batch.go, line 409 at r3 (raw file):

Previously, nvanbenschoten (Nathan VanBenschoten) wrote…

Will an EndTransactionRequest ever have an EndKey?

Done.


pkg/roachpb/data.proto, line 338 at r3 (raw file):

Previously, nvanbenschoten (Nathan VanBenschoten) wrote…

This first sentence is no longer accurate.

Done.


Comments from Reviewable

@nvanbenschoten
Copy link
Member

Review status: 12 of 26 files reviewed at latest revision, 6 unresolved discussions, some commit checks failed.


pkg/internal/client/sender.go, line 112 at r3 (raw file):

Previously, andreimatei (Andrei Matei) wrote…

renamed to TxnSenderAdapter

Sorry, I also meant that you should leave TxnSenderFunc alone and have the call to StartTracking panic (or return nil, I don't have a strong opinion).


Comments from Reviewable

@andreimatei andreimatei force-pushed the client-txn-states branch 3 times, most recently from 4678aba to 17341eb Compare May 18, 2018 21:30
@andreimatei
Copy link
Contributor Author

I've hit a snag here, surfaced by TestClientRunConcurrentTransaction:

  • A txn send a BeginTxn
  • While the BeginTxn is in flight, the txn gets aborted by a pusher (say the txn managed to concurrently lay down an intent and then a pusher ran into that intent and pushed the txn like butter cause there's no transaction record still)
  • With the BeginTxn still in flight, another concurrent request from the txn figures out that the txn has been aborted (by hitting the AbortSpan) and returns a TransactionAbortedError (which is retriable).
  • Upon seeing the TransactionAbortedError, the coordinator switches to a new txn proto and sends an EndTransaction for the old one.
  • The EndTransaction executes and populates the timestamp cache.
  • The BeginTxn finally executes and hits the timestamp cache, so it looks like a replay. It generates a TransactionReplayError.
  • When the client receives the TransactionReplayError, it moves the client.Txn object to the TxnError state.
  • Now, the txn can't do any more requests because it's in the TxnError state. Even though it should be allowed to perform more requests, as it would like to retry the txn.

Everything here was true before this PR too, up until the move to the TxnError state which starts rejecting everything. I need to figure out what to do - maybe it's as simple as not moving to the TxnError state if the request was part of a different txn id / epoch.

One question I have for the group is: is it surprising that the EndTxn and BeginTxn get reordered relatively reliably (the EndTxn is sent after the Begin, but executes first)? Would the command queue order the two if the Begin made it to the command queue)?


Review status: 8 of 31 files reviewed at latest revision, 6 unresolved discussions, some commit checks failed.


Comments from Reviewable

@bdarnell
Copy link
Contributor

I need to figure out what to do - maybe it's as simple as not moving to the TxnError state if the request was part of a different txn id / epoch.

I think TransactionReplayError is special and should not move the txn to the TxnError state. We make this an error to guard against BeginTransactions being reordered after a committing EndTransaction, but in this case we know that there could not have been a committing ET (with matching epoch) because only this client.Txn could have sent it. Therefore we can safely restart the txn (at a higher timestamp) without going into the error state.

@andreimatei
Copy link
Contributor Author

The problem shown here by the TransactionReplayError is more general - any error received by requests that were in flight when the transaction restarts would have the unfortunate effect of moving the txn to the TxnError state.
I've added a small commit to the beginning that generally short-circuits the handling of responses for such requests that straddle the restart of the txn. I think that's a sane thing to do.
With that in place, I don't think any special treatment of TransactionReplayError is warranted. Tell me if you feel otherwise.

@nvanbenschoten PTAL at the first commit.


Review status: 7 of 34 files reviewed at latest revision, 6 unresolved discussions, some commit checks failed.


Comments from Reviewable

@andreimatei
Copy link
Contributor Author

Added one more commit that I was telling you about @nvanbenschoten for binding the TCS to a txn early. PTAL


Review status: 0 of 33 files reviewed at latest revision, 6 unresolved discussions, all commit checks successful.


Comments from Reviewable

@andreimatei
Copy link
Contributor Author

As I was telling Nathan, I've made a change to r11 adding copying of a few fields from a requests's Txn to the TxnCoordSender's copy of the proto, which proved to be necessary. This is to compensate for the effects of the previous cloning of the requests's proto on the first TxnCoordSender.Send() call that has now gone away.


Review status: 0 of 34 files reviewed at latest revision, 6 unresolved discussions, some commit checks pending.


Comments from Reviewable

@andreimatei
Copy link
Contributor Author

bors r+


Review status: 0 of 34 files reviewed at latest revision, 6 unresolved discussions, all commit checks successful.


Comments from Reviewable

craig bot pushed a commit that referenced this pull request Jun 5, 2018
25541: kv,client,storage: rationalize TxnCoordSender/client.Txn redundant states r=andreimatei a=andreimatei

client.Txn and TCS try to maintain a bunch of logically-redundant state
about whether a transaction is "writing" - essentially whether an
EndTransaction needs to be sent to cleanup up the TCS heartbeat loop and
the server's txn record.
The logic that both parties used for this was complex (e.g. it involved
updates in both Txn and TCS both on the outgoing path and on the
returning path of a batch) and not in sync - sometimes the TCS would
consider the txn as "writing" and the client.Txn wouldn't (e.g. in case
the first writing batch got an ambiguous error).

This patch simplifies things: the idea is that, if a BeginTxn has been
sent, an EndTransaction needs to be sent, period. The client.Txn thus
only keeps track of whether a BeginTxn was sent (except for a 1PC
batch), and it takes charge of starting the TCS' heartbeat loop (by
instructing it explicitly directly to start it before the BeginTxn is
sent). The TCS is no longer burdened with maintaining any state about
whether there is a txn record or not.

As a byproduct, the proto Transaction.Writing flag, which used to have
an unclear meaning, becomes straight forward: if set, the server needs
to check batches against the abort cache. The client is the only one
setting it, the server is the only one checking it. It used to be used
for different purposeses by both the client and server.

Release note: none

Co-authored-by: Andrei Matei <[email protected]>
@craig
Copy link
Contributor

craig bot commented Jun 5, 2018

Build succeeded

@craig craig bot merged commit 823438f into cockroachdb:master Jun 5, 2018
@andreimatei andreimatei deleted the client-txn-states branch June 5, 2018 15:39
andreimatei added a commit to andreimatei/cockroach that referenced this pull request Jun 5, 2018
TestTxnCoordSenderRetries is flaky, presumably as a consequence of
merging cockroachdb#25541.
A subtest is sometimes failing because a CommandFilter that it's using
is inadvertently injecting a failure into a lingering request from a
previous subtest. Don't know why that PR changed any behavior yet, but
it seems more likely that this is a test issue than issue warranting a
rollback, so skipping while I figure it out.

Touches cockroachdb#26434

Release note: None
craig bot pushed a commit that referenced this pull request Jun 5, 2018
26442: kv: skip TestTxnCoordSenderRetries r=andreimatei a=andreimatei

TestTxnCoordSenderRetries is flaky, presumably as a consequence of
merging #25541.
A subtest is sometimes failing because a CommandFilter that it's using
is inadvertently injecting a failure into a lingering request from a
previous subtest. Don't know why that PR changed any behavior yet, but
it seems more likely that this is a test issue than issue warranting a
rollback, so skipping while I figure it out.

Touches #26434

Release note: None

Co-authored-by: Andrei Matei <[email protected]>
andreimatei added a commit to andreimatei/cockroach that referenced this pull request Jun 6, 2018
A txn's heartbeat loop is generally stopped when, upon a successful
request, the response's txn is no longer PENDING. This was insufficient;
the loop should always be closed after an EndTransaction(commit=false),
regardless of whether it results in success or error.
The heartbeat loop happens to be currently closed by the context
cancelation that the db.Txn() API performs, but that is going away.

This fixes cockroachdb#26434 - TestTxnCoordSenderRetries had become flaky after cockroachdb#25541
because cockroachdb#25441 caused EndTransactions to be sent in some situations
where they weren't before. What's going on in that test is that a
subtest was leaking a heartbeat loop that was stopped after the subtest
finished; the EndTxn sent when the loop finally was being stopped was
interfering with a CommandFilter installed by a different subtest.
Before cockroachdb#25441, the first subtest was waiting for the heartbeat loop to
be done because of its own CommandFilter. However, with cockroachdb#25441, the
first subtest's CommandFilter was being satisfied by a different, newly
introduced EndTransaction.

Release note: None
andreimatei added a commit to andreimatei/cockroach that referenced this pull request Jun 7, 2018
A txn's heartbeat loop is generally stopped when, upon a successful
request, the response's txn is no longer PENDING. This was insufficient;
the loop should always be closed after an EndTransaction(commit=false),
regardless of whether it results in success or error.
The heartbeat loop happens to be currently closed by the context
cancelation that the db.Txn() API performs, but that is going away.

This fixes cockroachdb#26434 - TestTxnCoordSenderRetries had become flaky after cockroachdb#25541
because cockroachdb#25441 caused EndTransactions to be sent in some situations
where they weren't before. What's going on in that test is that a
subtest was leaking a heartbeat loop that was stopped after the subtest
finished; the EndTxn sent when the loop finally was being stopped was
interfering with a CommandFilter installed by a different subtest.
Before cockroachdb#25441, the first subtest was waiting for the heartbeat loop to
be done because of its own CommandFilter. However, with cockroachdb#25441, the
first subtest's CommandFilter was being satisfied by a different, newly
introduced EndTransaction.

Release note: None
andreimatei added a commit to andreimatei/cockroach that referenced this pull request Jun 7, 2018
The recent cockroachdb#25541 changed the way "tracking" (the heartbeat loop and
intent collection) is initiated for transactions. It aimed to simplify
things and put the burden on the client to decide when a txn needs
tracking. This introduced a problem - the client.Txn was not initiating
tracking when sending 1PC batches. However, tracking is needed for these
transactions too: even though usually they'll succeed and so the
TxnCoordSender state can be quickly destroyed, when they fail their
intents and heartbeat loop need to be kept around just like for any
other txn.

This patch backtracks on the previous move to make it the client's
responsibility to initiate tracking (it didn't stand the test of time):
the client.Txn is no longer in charge of calling tcs.StartTracking().
Instead, the TCS does whatever needs to be done when it sees an
EndTransaction.

I also took the opportunity to spruce up comments on the TxnCoordSender.

Release note: None
andreimatei added a commit to andreimatei/cockroach that referenced this pull request Jun 7, 2018
A txn's heartbeat loop is generally stopped when, upon a successful
request, the response's txn is no longer PENDING. This was insufficient;
the loop should always be closed after an EndTransaction(commit=false),
regardless of whether it results in success or error.
The heartbeat loop happens to be currently closed by the context
cancelation that the db.Txn() API performs, but that is going away.

This fixes cockroachdb#26434 - TestTxnCoordSenderRetries had become flaky after cockroachdb#25541
because cockroachdb#25441 caused EndTransactions to be sent in some situations
where they weren't before. What's going on in that test is that a
subtest was leaking a heartbeat loop that was stopped after the subtest
finished; the EndTxn sent when the loop finally was being stopped was
interfering with a CommandFilter installed by a different subtest.
Before cockroachdb#25441, the first subtest was waiting for the heartbeat loop to
be done because of its own CommandFilter. However, with cockroachdb#25441, the
first subtest's CommandFilter was being satisfied by a different, newly
introduced EndTransaction.

Release note: None
craig bot pushed a commit that referenced this pull request Jun 7, 2018
26479: kv: stop the heartbeat loop on rollback errors r=andreimatei a=andreimatei

A txn's heartbeat loop is generally stopped when, upon a successful
request, the response's txn is no longer PENDING. This was insufficient;
the loop should always be closed after an EndTransaction(commit=false),
regardless of whether it results in success or error.
The heartbeat loop happens to be currently closed by the context
cancelation that the db.Txn() API performs, but that is going away.

This fixes #26434 - TestTxnCoordSenderRetries had become flaky after #25541
because #25441 caused EndTransactions to be sent in some situations
where they weren't before. What's going on in that test is that a
subtest was leaking a heartbeat loop that was stopped after the subtest
finished; the EndTxn sent when the loop finally was being stopped was
interfering with a CommandFilter installed by a different subtest.
Before #25441, the first subtest was waiting for the heartbeat loop to
be done because of its own CommandFilter. However, with #25441, the
first subtest's CommandFilter was being satisfied by a different, newly
introduced EndTransaction.

Release note: None

26516: sql: disable optimizer if force-lookup-joins flag set r=RaduBerinde a=RaduBerinde

The experimental flag to force lookup joins doesn't work with the
optimizer (it is disabled on opt-generated plans). To allow the flag
to still function for now, we disable the optimizer if the flag is
set.

Release note: None

Co-authored-by: Andrei Matei <[email protected]>
Co-authored-by: Radu Berinde <[email protected]>
andreimatei added a commit to andreimatei/cockroach that referenced this pull request Jun 7, 2018
The recent cockroachdb#25541 changed the way "tracking" (the heartbeat loop and
intent collection) is initiated for transactions. It aimed to simplify
things and put the burden on the client to decide when a txn needs
tracking. This introduced a problem - the client.Txn was not initiating
tracking when sending 1PC batches. However, tracking is needed for these
transactions too: even though usually they'll succeed and so the
TxnCoordSender state can be quickly destroyed, when they fail their
intents and heartbeat loop need to be kept around just like for any
other txn.

This patch backtracks on the previous move to make it the client's
responsibility to initiate tracking (it didn't stand the test of time):
the client.Txn is no longer in charge of calling tcs.StartTracking().
Instead, the TCS does whatever needs to be done when it sees an
EndTransaction.

I also took the opportunity to spruce up comments on the TxnCoordSender.

Release note: None
andreimatei added a commit to andreimatei/cockroach that referenced this pull request Jun 7, 2018
The recent cockroachdb#25541 changed the way "tracking" (the heartbeat loop and
intent collection) is initiated for transactions. It aimed to simplify
things and put the burden on the client to decide when a txn needs
tracking. This introduced a problem - the client.Txn was not initiating
tracking when sending 1PC batches. However, tracking is needed for these
transactions too: even though usually they'll succeed and so the
TxnCoordSender state can be quickly destroyed, when they fail their
intents and heartbeat loop need to be kept around just like for any
other txn.

This patch backtracks on the previous move to make it the client's
responsibility to initiate tracking (it didn't stand the test of time):
the client.Txn is no longer in charge of calling tcs.StartTracking().
Instead, the TCS does whatever needs to be done when it sees an
EndTransaction.

I also took the opportunity to spruce up comments on the TxnCoordSender.

Release note: None
craig bot pushed a commit that referenced this pull request Jun 7, 2018
26497: kv: fix issues around failed 1PC txns r=andreimatei a=andreimatei

The recent #25541 changed the way "tracking" (the heartbeat loop and
intent collection) is initiated for transactions. It aimed to simplify
things and put the burden on the client to decide when a txn needs
tracking. This introduced a problem - the client.Txn was not initiating
tracking when sending 1PC batches. However, tracking is needed for these
transactions too: even though usually they'll succeed and so the
TxnCoordSender state can be quickly destroyed, when they fail their
intents and heartbeat loop need to be kept around just like for any
other txn.

This patch backtracks on the previous move to make it the client's
responsibility to initiate tracking (it didn't stand the test of time):
the client.Txn is no longer in charge of calling tcs.StartTracking().
Instead, the TCS does whatever needs to be done when it sees an
EndTransaction.

I also took the opportunity to spruce up comments on the TxnCoordSender.

Release note: None

Co-authored-by: Andrei Matei <[email protected]>
nvanbenschoten added a commit to nvanbenschoten/cockroach that referenced this pull request Jun 18, 2018
This store dump version was accidentally broken in cockroachdb#25541.

Release note: None
craig bot pushed a commit that referenced this pull request Jun 18, 2018
26787: rfc: ALTER COLUMN TYPE TableAction plan r=bobvawter a=bobvawter

FYI: I was doing this as a separate document, but since it's motivated by `ALTER_COLUMN_TYPE`, it seems like it belongs in this doc.  The TL;DR is that `TableMutations` is doing two jobs and doesn't have enough specificity to effectively handle multi-step schema changes.

Update the `ALTER COLUMN TYPE` RFC with a proposed plan for migrating state
management from `TableDescriptor.Mutations` into a new `TableActions`
collection.

Release note: None

26807: roachtest: fix store dump version r=nvanbenschoten a=nvanbenschoten

This store dump version was accidentally broken in #25541.

Release note: None

Co-authored-by: Bob Vawter <[email protected]>
Co-authored-by: Nathan VanBenschoten <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants