Quellcode durchsuchen

improve schema inconsitent error

Chris Bannister vor 10 Jahren
Ursprung
Commit
0d2035c9ee
1 geänderte Dateien mit 13 neuen und 3 gelöschten Zeilen
  1. 13 3
      conn.go

+ 13 - 3
conn.go

@@ -743,7 +743,10 @@ func (c *Conn) executeQuery(qry *Query) *Iter {
 		return &Iter{framer: framer}
 		return &Iter{framer: framer}
 	case *resultSchemaChangeFrame, *schemaChangeKeyspace, *schemaChangeTable, *schemaChangeFunction:
 	case *resultSchemaChangeFrame, *schemaChangeKeyspace, *schemaChangeTable, *schemaChangeFunction:
 		iter := &Iter{framer: framer}
 		iter := &Iter{framer: framer}
-		c.awaitSchemaAgreement()
+		if err := c.awaitSchemaAgreement(); err != nil {
+			// TODO: should have this behind a flag
+			log.Println(err)
+		}
 		// dont return an error from this, might be a good idea to give a warning
 		// dont return an error from this, might be a good idea to give a warning
 		// though. The impact of this returning an error would be that the cluster
 		// though. The impact of this returning an error would be that the cluster
 		// is not consistent with regards to its schema.
 		// is not consistent with regards to its schema.
@@ -943,11 +946,13 @@ func (c *Conn) awaitSchemaAgreement() (err error) {
 		localSchemas = "SELECT schema_version FROM system.local WHERE key='local'"
 		localSchemas = "SELECT schema_version FROM system.local WHERE key='local'"
 	)
 	)
 
 
+	var versions map[string]struct{}
+
 	endDeadline := time.Now().Add(c.session.cfg.MaxWaitSchemaAgreement)
 	endDeadline := time.Now().Add(c.session.cfg.MaxWaitSchemaAgreement)
 	for time.Now().Before(endDeadline) {
 	for time.Now().Before(endDeadline) {
 		iter := c.query(peerSchemas)
 		iter := c.query(peerSchemas)
 
 
-		versions := make(map[string]struct{})
+		versions = make(map[string]struct{})
 
 
 		var schemaVersion string
 		var schemaVersion string
 		for iter.Scan(&schemaVersion) {
 		for iter.Scan(&schemaVersion) {
@@ -981,8 +986,13 @@ func (c *Conn) awaitSchemaAgreement() (err error) {
 		return
 		return
 	}
 	}
 
 
+	schemas := make([]string, 0, len(versions))
+	for schema := range versions {
+		schemas = append(schemas, schema)
+	}
+
 	// not exported
 	// not exported
-	return errors.New("gocql: cluster schema versions not consistent")
+	return fmt.Errorf("gocql: cluster schema versions not consistent: %+v", schemas)
 }
 }
 
 
 type inflightPrepare struct {
 type inflightPrepare struct {