Skip to content

Commit 18f020d

Browse files
authored
Merge pull request #20 from vitessio/full-vschema
dump the full vtgate view of vschema
2 parents 89dd933 + d9ad83b commit 18f020d

File tree

3 files changed

+35
-26
lines changed

3 files changed

+35
-26
lines changed

src/vitess-tester/reporter.go

+4-12
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,12 @@ limitations under the License.
1717
package vitess_tester
1818

1919
import (
20-
"encoding/json"
2120
"fmt"
2221
"net/url"
2322
"os"
2423
"path"
2524
"strings"
2625
"time"
27-
28-
"vitess.io/vitess/go/vt/vtgate/vindexes"
2926
)
3027

3128
type Suite interface {
@@ -37,7 +34,7 @@ type Suite interface {
3734
type Reporter interface {
3835
AddTestCase(query string, lineNo int)
3936
EndTestCase()
40-
AddFailure(vschema vindexes.VSchema, err error)
37+
AddFailure(vschema []byte, err error)
4138
AddInfo(info string)
4239
Report() string
4340
Failed() bool
@@ -118,7 +115,7 @@ func (e *FileReporter) EndTestCase() {
118115
}
119116
}
120117

121-
func (e *FileReporter) AddFailure(vschema vindexes.VSchema, err error) {
118+
func (e *FileReporter) AddFailure(vschema []byte, err error) {
122119
e.failureCount++
123120
e.currentQueryFailed = true
124121
if e.currentQuery == "" {
@@ -165,19 +162,14 @@ func (e *FileReporter) createErrorFileFor() *os.File {
165162
return file
166163
}
167164

168-
func (e *FileReporter) createVSchemaDump(vschema vindexes.VSchema) {
165+
func (e *FileReporter) createVSchemaDump(vschema []byte) {
169166
errorDir := e.errorDir()
170167
err := os.MkdirAll(errorDir, PERM)
171168
if err != nil {
172169
panic("failed to create vschema directory\n" + err.Error())
173170
}
174171

175-
vschemaBytes, err := json.MarshalIndent(vschema, "", "\t")
176-
if err != nil {
177-
panic("failed to marshal vschema\n" + err.Error())
178-
}
179-
180-
err = os.WriteFile(path.Join(errorDir, "vschema.json"), vschemaBytes, PERM)
172+
err = os.WriteFile(path.Join(errorDir, "vschema.json"), vschema, PERM)
181173
if err != nil {
182174
panic("failed to write vschema\n" + err.Error())
183175
}

src/vitess-tester/tester.go

+30-12
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"os"
2626
"strconv"
2727
"strings"
28+
"time"
2829

2930
"github.com/pingcap/errors"
3031
log "github.com/sirupsen/logrus"
@@ -113,14 +114,31 @@ func (t *Tester) addSuccess() {
113114

114115
}
115116

117+
func (t *Tester) getVschema() []byte {
118+
httpClient := &http.Client{Timeout: 5 * time.Second}
119+
resp, err := httpClient.Get(t.clusterInstance.VtgateProcess.VSchemaURL)
120+
if err != nil {
121+
log.Errorf(err.Error())
122+
return nil
123+
}
124+
defer resp.Body.Close()
125+
res, err := io.ReadAll(resp.Body)
126+
if err != nil {
127+
log.Errorf(err.Error())
128+
return nil
129+
}
130+
131+
return res
132+
}
133+
116134
func (t *Tester) Run() error {
117135
t.preProcess()
118136
if t.autoVSchema() {
119137
defer t.postProcess()
120138
}
121139
queries, err := t.loadQueries()
122140
if err != nil {
123-
t.reporter.AddFailure(t.vschema, err)
141+
t.reporter.AddFailure(t.getVschema(), err)
124142
return err
125143
}
126144

@@ -142,26 +160,26 @@ func (t *Tester) Run() error {
142160
case Q_SKIP:
143161
t.skipNext = true
144162
case Q_BEGIN_CONCURRENT, Q_END_CONCURRENT, Q_CONNECT, Q_CONNECTION, Q_DISCONNECT, Q_LET, Q_REPLACE_COLUMN:
145-
t.reporter.AddFailure(t.vschema, fmt.Errorf("%s not supported", String(q.tp)))
163+
t.reporter.AddFailure(t.getVschema(), fmt.Errorf("%s not supported", String(q.tp)))
146164
case Q_SKIP_IF_BELOW_VERSION:
147165
strs := strings.Split(q.Query, " ")
148166
if len(strs) != 3 {
149-
t.reporter.AddFailure(t.vschema, fmt.Errorf("incorrect syntax for Q_SKIP_IF_BELOW_VERSION in: %v", q.Query))
167+
t.reporter.AddFailure(t.getVschema(), fmt.Errorf("incorrect syntax for Q_SKIP_IF_BELOW_VERSION in: %v", q.Query))
150168
continue
151169
}
152170
t.skipBinary = strs[1]
153171
var err error
154172
t.skipVersion, err = strconv.Atoi(strs[2])
155173
if err != nil {
156-
t.reporter.AddFailure(t.vschema, err)
174+
t.reporter.AddFailure(t.getVschema(), err)
157175
continue
158176
}
159177
case Q_ERROR:
160178
t.expectedErrs = true
161179
case Q_VEXPLAIN:
162180
strs := strings.Split(q.Query, " ")
163181
if len(strs) != 2 {
164-
t.reporter.AddFailure(t.vschema, fmt.Errorf("incorrect syntax for Q_VEXPLAIN in: %v", q.Query))
182+
t.reporter.AddFailure(t.getVschema(), fmt.Errorf("incorrect syntax for Q_VEXPLAIN in: %v", q.Query))
165183
continue
166184
}
167185

@@ -185,14 +203,14 @@ func (t *Tester) Run() error {
185203
result, err := t.curr.VtConn.ExecuteFetch("vexplain "+t.vexplain+" "+q.Query, -1, false)
186204
t.vexplain = ""
187205
if err != nil {
188-
t.reporter.AddFailure(t.vschema, err)
206+
t.reporter.AddFailure(t.getVschema(), err)
189207
continue
190208
}
191209

192210
t.reporter.AddInfo(fmt.Sprintf("VExplain Output:\n %s\n", result.Rows[0][0].ToString()))
193211
}
194212
if err = t.execute(q); err != nil && !t.expectedErrs {
195-
t.reporter.AddFailure(t.vschema, err)
213+
t.reporter.AddFailure(t.getVschema(), err)
196214
}
197215
t.reporter.EndTestCase()
198216
// clear expected errors and current query after we execute any query
@@ -203,7 +221,7 @@ func (t *Tester) Run() error {
203221
return errors.Annotate(err, "failed to remove file")
204222
}
205223
default:
206-
t.reporter.AddFailure(t.vschema, fmt.Errorf("%s not supported", String(q.tp)))
224+
t.reporter.AddFailure(t.getVschema(), fmt.Errorf("%s not supported", String(q.tp)))
207225
}
208226
}
209227
fmt.Printf("%s\n", t.reporter.Report())
@@ -237,21 +255,21 @@ func (t *Tester) waitAuthoritative(query string) {
237255
var err error
238256
ksName, err = t.findTable(tblName)
239257
if err != nil {
240-
t.reporter.AddFailure(t.vschema, err)
258+
t.reporter.AddFailure(t.getVschema(), err)
241259
return
242260
}
243261
case 3:
244262
tblName = strs[1]
245263
ksName = strs[2]
246264

247265
default:
248-
t.reporter.AddFailure(t.vschema, fmt.Errorf("expected table name and keyspace for wait_authoritative in: %v", query))
266+
t.reporter.AddFailure(t.getVschema(), fmt.Errorf("expected table name and keyspace for wait_authoritative in: %v", query))
249267
}
250268

251269
log.Infof("Waiting for authoritative schema for table %s", tblName)
252270
err := utils.WaitForAuthoritative(t, ksName, tblName, t.clusterInstance.VtgateProcess.ReadVSchema)
253271
if err != nil {
254-
t.reporter.AddFailure(t.vschema, fmt.Errorf("failed to wait for authoritative schema for table %s: %v", tblName, err))
272+
t.reporter.AddFailure(t.getVschema(), fmt.Errorf("failed to wait for authoritative schema for table %s: %v", tblName, err))
255273
}
256274
}
257275

@@ -439,7 +457,7 @@ func (t *Tester) handleCreateTable(create *sqlparser.CreateTable) {
439457
}
440458

441459
func (t *Tester) Errorf(format string, args ...interface{}) {
442-
t.reporter.AddFailure(t.vschema, errors.Errorf(format, args...))
460+
t.reporter.AddFailure(t.getVschema(), errors.Errorf(format, args...))
443461
}
444462

445463
func (t *Tester) FailNow() {

src/vitess-tester/xunit.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"time"
2323

2424
"github.com/jstemmer/go-junit-report/v2/junit"
25-
"vitess.io/vitess/go/vt/vtgate/vindexes"
2625
)
2726

2827
type XMLTestSuite struct {
@@ -78,7 +77,7 @@ func (xml *XMLTestSuite) EndTestCase() {
7877
xml.currTestCase = nil
7978
}
8079

81-
func (xml *XMLTestSuite) AddFailure(vschema vindexes.VSchema, err error) {
80+
func (xml *XMLTestSuite) AddFailure(vschema []byte, err error) {
8281
if xml.currTestCase == nil {
8382
xml.AddTestCase("SETUP", 0)
8483
xml.AddFailure(vschema, err)

0 commit comments

Comments
 (0)