@@ -1957,6 +1957,10 @@ func (cf *changeFrontier) manageProtectedTimestamps(
1957
1957
}
1958
1958
}()
1959
1959
1960
+ if cf .knobs .ManagePTSError != nil {
1961
+ return false , cf .knobs .ManagePTSError ()
1962
+ }
1963
+
1960
1964
var ptsEntries cdcprogresspb.ProtectedTimestampRecords
1961
1965
if err := readChangefeedJobInfo (ctx , perTableProtectedTimestampsFilename , & ptsEntries , txn , cf .spec .JobID ); err != nil {
1962
1966
return false , err
@@ -1971,15 +1975,7 @@ func (cf *changeFrontier) manageProtectedTimestamps(
1971
1975
}()
1972
1976
1973
1977
if cf .spec .ProgressConfig .PerTableProtectedTimestamps {
1974
- newPTS , updatedPerTablePTS , err := cf .managePerTableProtectedTimestamps (ctx , txn , & ptsEntries , highwater )
1975
- if err != nil {
1976
- return false , err
1977
- }
1978
- updatedMainPTS , err := cf .advanceProtectedTimestamp (ctx , progress , pts , newPTS )
1979
- if err != nil {
1980
- return false , err
1981
- }
1982
- return updatedMainPTS || updatedPerTablePTS , nil
1978
+ return cf .managePerTableProtectedTimestamps (ctx , txn , & ptsEntries , highwater )
1983
1979
}
1984
1980
1985
1981
return cf .advanceProtectedTimestamp (ctx , progress , pts , highwater )
@@ -1990,28 +1986,8 @@ func (cf *changeFrontier) managePerTableProtectedTimestamps(
1990
1986
txn isql.Txn ,
1991
1987
ptsEntries * cdcprogresspb.ProtectedTimestampRecords ,
1992
1988
highwater hlc.Timestamp ,
1993
- ) (newPTS hlc.Timestamp , updatedPerTablePTS bool , err error ) {
1994
- var leastLaggingTimestamp hlc.Timestamp
1995
- for _ , frontier := range cf .frontier .Frontiers () {
1996
- if frontier .Frontier ().After (leastLaggingTimestamp ) {
1997
- leastLaggingTimestamp = frontier .Frontier ()
1998
- }
1999
- }
2000
-
2001
- newPTS = func () hlc.Timestamp {
2002
- lagDuration := changefeedbase .ProtectTimestampBucketingInterval .Get (& cf .FlowCtx .Cfg .Settings .SV )
2003
- ptsLagCutoff := leastLaggingTimestamp .AddDuration (- lagDuration )
2004
- // If we are within the bucketing interval of having started the changefeed,
2005
- // we use the highwater as the PTS timestamp so as not to try to protect
2006
- // tables before the changefeed started.
2007
- if ptsLagCutoff .Less (highwater ) {
2008
- return highwater
2009
- }
2010
- return ptsLagCutoff
2011
- }()
2012
-
1989
+ ) (updatedPerTablePTS bool , err error ) {
2013
1990
pts := cf .FlowCtx .Cfg .ProtectedTimestampProvider .WithTxn (txn )
2014
- tableIDsToRelease := make ([]descpb.ID , 0 )
2015
1991
tableIDsToCreate := make (map [descpb.ID ]hlc.Timestamp )
2016
1992
for tableID , frontier := range cf .frontier .Frontiers () {
2017
1993
tableHighWater := func () hlc.Timestamp {
@@ -2023,66 +1999,35 @@ func (cf *changeFrontier) managePerTableProtectedTimestamps(
2023
1999
return frontier .Frontier ()
2024
2000
}()
2025
2001
2026
- isLagging := tableHighWater .Less (newPTS )
2027
-
2028
- if cf .knobs .IsTableLagging != nil && cf .knobs .IsTableLagging (tableID ) {
2029
- isLagging = true
2030
- }
2031
-
2032
- if ! isLagging {
2033
- if ptsEntries .ProtectedTimestampRecords [tableID ] != nil {
2034
- tableIDsToRelease = append (tableIDsToRelease , tableID )
2035
- }
2036
- continue
2037
- }
2038
-
2039
- if ptsEntries .ProtectedTimestampRecords [tableID ] != nil {
2002
+ if ptsEntries .ProtectedTimestampRecords [tableID ] != uuid .Nil {
2040
2003
if updated , err := cf .advancePerTableProtectedTimestampRecord (ctx , ptsEntries , tableID , tableHighWater , pts ); err != nil {
2041
- return hlc. Timestamp {}, false , err
2004
+ return false , err
2042
2005
} else if updated {
2043
2006
updatedPerTablePTS = true
2044
2007
}
2045
2008
} else {
2046
2009
// TODO(#152448): Do not include system table protections in these records.
2010
+ // TODO(#153894): Newly added/dropped tables should be caught and
2011
+ // protected when starting the frontier, not here.
2047
2012
tableIDsToCreate [tableID ] = tableHighWater
2048
2013
}
2049
2014
}
2050
2015
2051
- if len (tableIDsToRelease ) > 0 {
2052
- if err := cf .releasePerTableProtectedTimestampRecords (ctx , ptsEntries , tableIDsToRelease , pts ); err != nil {
2053
- return hlc.Timestamp {}, false , err
2054
- }
2055
- }
2056
-
2057
2016
if len (tableIDsToCreate ) > 0 {
2058
- if err := cf .createPerTableProtectedTimestampRecords (ctx , ptsEntries , tableIDsToCreate , pts ); err != nil {
2059
- return hlc.Timestamp {}, false , err
2017
+ if err := cf .createPerTableProtectedTimestampRecords (
2018
+ ctx , ptsEntries , tableIDsToCreate , pts ,
2019
+ ); err != nil {
2020
+ return false , err
2060
2021
}
2061
- }
2062
-
2063
- if len (tableIDsToRelease ) > 0 || len (tableIDsToCreate ) > 0 {
2064
- if err := writeChangefeedJobInfo (ctx , perTableProtectedTimestampsFilename , ptsEntries , txn , cf .spec .JobID ); err != nil {
2065
- return hlc.Timestamp {}, false , err
2022
+ if err := writeChangefeedJobInfo (
2023
+ ctx , perTableProtectedTimestampsFilename , ptsEntries , txn , cf .spec .JobID ,
2024
+ ); err != nil {
2025
+ return false , err
2066
2026
}
2067
2027
updatedPerTablePTS = true
2068
2028
}
2069
2029
2070
- return newPTS , updatedPerTablePTS , nil
2071
- }
2072
-
2073
- func (cf * changeFrontier ) releasePerTableProtectedTimestampRecords (
2074
- ctx context.Context ,
2075
- ptsEntries * cdcprogresspb.ProtectedTimestampRecords ,
2076
- tableIDs []descpb.ID ,
2077
- pts protectedts.Storage ,
2078
- ) error {
2079
- for _ , tableID := range tableIDs {
2080
- if err := pts .Release (ctx , * ptsEntries .ProtectedTimestampRecords [tableID ]); err != nil {
2081
- return err
2082
- }
2083
- delete (ptsEntries .ProtectedTimestampRecords , tableID )
2084
- }
2085
- return nil
2030
+ return updatedPerTablePTS , nil
2086
2031
}
2087
2032
2088
2033
func (cf * changeFrontier ) advancePerTableProtectedTimestampRecord (
@@ -2092,7 +2037,7 @@ func (cf *changeFrontier) advancePerTableProtectedTimestampRecord(
2092
2037
tableHighWater hlc.Timestamp ,
2093
2038
pts protectedts.Storage ,
2094
2039
) (updated bool , err error ) {
2095
- rec , err := pts .GetRecord (ctx , * ptsEntries .ProtectedTimestampRecords [tableID ])
2040
+ rec , err := pts .GetRecord (ctx , ptsEntries .ProtectedTimestampRecords [tableID ])
2096
2041
if err != nil {
2097
2042
return false , err
2098
2043
}
@@ -2102,7 +2047,7 @@ func (cf *changeFrontier) advancePerTableProtectedTimestampRecord(
2102
2047
return false , nil
2103
2048
}
2104
2049
2105
- if err := pts .UpdateTimestamp (ctx , * ptsEntries .ProtectedTimestampRecords [tableID ], tableHighWater ); err != nil {
2050
+ if err := pts .UpdateTimestamp (ctx , ptsEntries .ProtectedTimestampRecords [tableID ], tableHighWater ); err != nil {
2106
2051
return false , err
2107
2052
}
2108
2053
return true , nil
@@ -2115,7 +2060,7 @@ func (cf *changeFrontier) createPerTableProtectedTimestampRecords(
2115
2060
pts protectedts.Storage ,
2116
2061
) error {
2117
2062
if ptsEntries .ProtectedTimestampRecords == nil {
2118
- ptsEntries .ProtectedTimestampRecords = make (map [descpb.ID ]* uuid.UUID )
2063
+ ptsEntries .ProtectedTimestampRecords = make (map [descpb.ID ]uuid.UUID )
2119
2064
}
2120
2065
for tableID , tableHighWater := range tableIDsToCreate {
2121
2066
targets , err := cf .createPerTablePTSTargets (tableID )
@@ -2126,7 +2071,7 @@ func (cf *changeFrontier) createPerTableProtectedTimestampRecords(
2126
2071
ctx , cf .FlowCtx .Codec (), cf .spec .JobID , targets , tableHighWater ,
2127
2072
)
2128
2073
uuid := ptr .ID .GetUUID ()
2129
- ptsEntries .ProtectedTimestampRecords [tableID ] = & uuid
2074
+ ptsEntries .ProtectedTimestampRecords [tableID ] = uuid
2130
2075
if err := pts .Protect (ctx , ptr ); err != nil {
2131
2076
return err
2132
2077
}
@@ -2210,10 +2155,6 @@ func (cf *changeFrontier) advanceProtectedTimestamp(
2210
2155
return false , nil
2211
2156
}
2212
2157
2213
- if cf .knobs .ManagePTSError != nil {
2214
- return false , cf .knobs .ManagePTSError ()
2215
- }
2216
-
2217
2158
log .VEventf (ctx , 2 , "updating protected timestamp %v at %v" , progress .ProtectedTimestampRecord , timestamp )
2218
2159
return true , pts .UpdateTimestamp (ctx , progress .ProtectedTimestampRecord , timestamp )
2219
2160
}
0 commit comments