@@ -13,6 +13,7 @@ import (
13
13
"github.com/cockroachdb/cockroach/pkg/server/telemetry"
14
14
"github.com/cockroachdb/cockroach/pkg/sql/catalog/catpb"
15
15
"github.com/cockroachdb/cockroach/pkg/sql/catalog/descpb"
16
+ "github.com/cockroachdb/cockroach/pkg/util/buildutil"
16
17
"github.com/cockroachdb/errors"
17
18
)
18
19
@@ -134,7 +135,7 @@ func ValidateOutboundFunctionRef(depID descpb.ID, vdg ValidationDescGetter) erro
134
135
135
136
// ValidateOutboundTableRef validates outbound reference to relation descriptor
136
137
// depID from descriptor selfID.
137
- func ValidateOutboundTableRef (depID descpb.ID , vdg ValidationDescGetter ) error {
138
+ func ValidateOutboundTableRef (srcDID descpb. ID , depID descpb.ID , vdg ValidationDescGetter ) error {
138
139
referencedTable , err := vdg .GetTableDescriptor (depID )
139
140
if err != nil {
140
141
return errors .NewAssertionErrorWithWrappedErrf (err , "invalid depends-on relation reference" )
@@ -143,6 +144,20 @@ func ValidateOutboundTableRef(depID descpb.ID, vdg ValidationDescGetter) error {
143
144
return errors .AssertionFailedf ("depends-on relation %q (%d) is dropped" ,
144
145
referencedTable .GetName (), referencedTable .GetID ())
145
146
}
147
+ // On debug builds validate that a back reference exists.
148
+ if buildutil .CrdbTestBuild {
149
+ foundReference := false
150
+ for _ , dep := range referencedTable .GetDependedOnBy () {
151
+ if dep .ID == srcDID {
152
+ foundReference = true
153
+ break
154
+ }
155
+ }
156
+ if ! foundReference {
157
+ return errors .AssertionFailedf ("depends-on relation %q (%d) has no corresponding depended-on-by back reference" ,
158
+ referencedTable .GetName (), referencedTable .GetID ())
159
+ }
160
+ }
146
161
return nil
147
162
}
148
163
0 commit comments