@@ -115,7 +115,7 @@ class TConfigureParts : public TSubOperationState {
115
115
event->Record .SetFrozen (true );
116
116
117
117
LOG_DEBUG_S (context.Ctx , NKikimrServices::FLAT_TX_SCHEMESHARD,
118
- " TCoptSequence TConfigureParts ProgressState"
118
+ " TCopySequence TConfigureParts ProgressState"
119
119
<< " sending TEvCreateSequence to tablet " << tabletId
120
120
<< " operationId# " << OperationId
121
121
<< " at tablet " << ssId);
@@ -274,6 +274,50 @@ class TProposedCopySequence : public TSubOperationState {
274
274
<< " operationId#" << OperationId;
275
275
}
276
276
277
+ void UpdateSequenceDescription (NKikimrSchemeOp::TSequenceDescription& descr) {
278
+ descr.SetStartValue (GetSequenceResult.GetNextValue ());
279
+ descr.SetMinValue (GetSequenceResult.GetMinValue ());
280
+ descr.SetMaxValue (GetSequenceResult.GetMaxValue ());
281
+ descr.SetCache (GetSequenceResult.GetCache ());
282
+ descr.SetIncrement (GetSequenceResult.GetIncrement ());
283
+ descr.SetCycle (GetSequenceResult.GetCycle ());
284
+
285
+ i64 nextValue = GetSequenceResult.GetNextValue ();
286
+ i64 minValue = GetSequenceResult.GetMinValue ();
287
+ i64 maxValue = GetSequenceResult.GetMaxValue ();
288
+ bool cycle = GetSequenceResult.GetCycle ();
289
+ bool overflowed = false ;
290
+
291
+ if (GetSequenceResult.GetNextUsed ()) {
292
+ i64 increment = GetSequenceResult.GetIncrement ();
293
+ if (increment > 0 ) {
294
+ ui64 delta = increment;
295
+
296
+ if (nextValue < maxValue && ui64 (maxValue) - ui64 (nextValue) >= delta) {
297
+ nextValue += delta;
298
+ } else {
299
+ if (cycle) {
300
+ nextValue = minValue;
301
+ }
302
+ overflowed = true ;
303
+ }
304
+ } else {
305
+ ui64 delta = -increment;
306
+
307
+ if (nextValue > minValue && ui64 (nextValue) - ui64 (minValue) >= delta) {
308
+ nextValue -= delta;
309
+ } else {
310
+ if (cycle) {
311
+ nextValue = maxValue;
312
+ }
313
+ overflowed = true ;
314
+ }
315
+ }
316
+ }
317
+ descr.SetStartValue (nextValue);
318
+ descr.SetOverflowed (overflowed);
319
+ }
320
+
277
321
public:
278
322
TProposedCopySequence (TOperationId id)
279
323
: OperationId(id)
@@ -333,7 +377,15 @@ class TProposedCopySequence : public TSubOperationState {
333
377
return false ;
334
378
}
335
379
380
+ TPathId pathId = txState->TargetPathId ;
381
+
336
382
NIceDb::TNiceDb db (context.GetDB ());
383
+
384
+ auto sequenceInfo = context.SS ->Sequences .at (pathId);
385
+ UpdateSequenceDescription (sequenceInfo->Description );
386
+
387
+ context.SS ->PersistSequence (db, pathId, *sequenceInfo);
388
+
337
389
context.SS ->ChangeTxState (db, OperationId, TTxState::Done);
338
390
context.OnComplete .ActivateTx (OperationId);
339
391
return true ;
@@ -387,7 +439,7 @@ class TProposedCopySequence : public TSubOperationState {
387
439
return false ;
388
440
}
389
441
390
- auto getSequenceResult = ev->Get ()->Record ;
442
+ GetSequenceResult = ev->Get ()->Record ;
391
443
392
444
Y_ABORT_UNLESS (txState->Shards .size () == 1 );
393
445
for (auto shard : txState->Shards ) {
@@ -397,7 +449,8 @@ class TProposedCopySequence : public TSubOperationState {
397
449
Y_ABORT_UNLESS (currentTabletId != InvalidTabletId);
398
450
399
451
auto event = MakeHolder<NSequenceShard::TEvSequenceShard::TEvRestoreSequence>(
400
- txState->TargetPathId , getSequenceResult);
452
+ txState->TargetPathId , GetSequenceResult);
453
+
401
454
event->Record .SetTxId (ui64 (OperationId.GetTxId ()));
402
455
event->Record .SetTxPartId (OperationId.GetSubTxId ());
403
456
0 commit comments