Merge branch 'aaron/sql-cluster-standby-is-read-only' into aaron/sql-cluster-interceptors-transition-role

This commit is contained in:
Aaron Son
2022-09-30 13:55:54 -07:00
2 changed files with 39 additions and 20 deletions

View File

@@ -54,34 +54,59 @@ func TestSchemaTableRecreationOlder(t *testing.T) {
{Name: doltdb.SchemasTablesFragmentCol, Type: sql.Text, Source: doltdb.SchemasTableName, PrimaryKey: false},
}), sql.Collation_Default)
require.NoError(t, err)
root, err := db.GetRoot(ctx)
sqlTbl, found, err := db.GetTableInsensitive(ctx, doltdb.SchemasTableName)
require.NoError(t, err)
err = dEnv.UpdateWorkingRoot(ctx, root)
require.True(t, found)
inserter := sqlTbl.(*WritableDoltTable).Inserter(ctx)
err = inserter.Insert(ctx, sql.Row{"view", "view1", "SELECT v1 FROM test;"})
require.NoError(t, err)
err = inserter.Insert(ctx, sql.Row{"view", "view2", "SELECT v2 FROM test;"})
require.NoError(t, err)
err = inserter.Close(ctx)
require.NoError(t, err)
expected := []sql.Row{
table, err := sqlTbl.(*WritableDoltTable).DoltTable.DoltTable(ctx)
require.NoError(t, err)
rowData, err := table.GetNomsRowData(ctx)
require.NoError(t, err)
expectedVals := []sql.Row{
{"view", "view1", "SELECT v1 FROM test;"},
{"view", "view2", "SELECT v2 FROM test;"},
}
actual, err := ExecuteSelect(t, dEnv, root, "SELECT * FROM "+doltdb.SchemasTableName)
require.NoError(t, err)
assert.Equal(t, expected, actual)
index := 0
_ = rowData.IterAll(ctx, func(keyTpl, valTpl types.Value) error {
dRow, err := row.FromNoms(sqlTbl.(*WritableDoltTable).sch, keyTpl.(types.Tuple), valTpl.(types.Tuple))
require.NoError(t, err)
sqlRow, err := sqlutil.DoltRowToSqlRow(dRow, sqlTbl.(*WritableDoltTable).sch)
require.NoError(t, err)
assert.Equal(t, expectedVals[index], sqlRow)
index++
return nil
})
// removes the old table and recreates it with the new schema
tbl, err := GetOrCreateDoltSchemasTable(ctx, db)
tbl, err := GetOrCreateDoltSchemasTable(ctx, db) // removes the old table and recreates it with the new schema
require.NoError(t, err)
root, err = db.GetRoot(ctx)
require.NoError(t, err)
err = dEnv.UpdateWorkingRoot(ctx, root)
table, err = tbl.DoltTable.DoltTable(ctx)
require.NoError(t, err)
expected = []sql.Row{
rowData, err = table.GetNomsRowData(ctx)
require.NoError(t, err)
expectedVals = []sql.Row{
{"view", "view1", "SELECT v1 FROM test;", int64(1), nil},
{"view", "view2", "SELECT v2 FROM test;", int64(2), nil},
}
actual, err = ExecuteSelect(t, dEnv, root, "SELECT * FROM "+doltdb.SchemasTableName)
require.NoError(t, err)
index = 0
_ = rowData.IterAll(ctx, func(keyTpl, valTpl types.Value) error {
dRow, err := row.FromNoms(tbl.sch, keyTpl.(types.Tuple), valTpl.(types.Tuple))
require.NoError(t, err)
sqlRow, err := sqlutil.DoltRowToSqlRow(dRow, tbl.sch)
require.NoError(t, err)
assert.Equal(t, expectedVals[index], sqlRow)
index++
return nil
})
indexes := tbl.sch.Indexes().AllIndexes()
require.Len(t, indexes, 1)

View File

@@ -130,14 +130,8 @@ cluster:
server_query_with_port "${SERVERONE_MYSQL_PORT}" repo1 1 dolt "" "call dolt_assume_cluster_role('standby', '10');" "status\n0"
# same role, new epoch
server_query_with_port "${SERVERONE_MYSQL_PORT}" repo1 1 dolt "" "call dolt_assume_cluster_role('standby', '12'); select @@GLOBAL.dolt_cluster_role, @@GLOBAL.dolt_cluster_role_epoch;" "status\n0;@@GLOBAL.dolt_cluster_role,@@GLOBAL.dolt_cluster_role_epoch\nstandby,12"
<<<<<<< HEAD
# new role, new epoch (this can drop the connection, so check the results in a new connection)
run server_query_with_port "${SERVERONE_MYSQL_PORT}" repo1 1 dolt "" "call dolt_assume_cluster_role('primary', '13');" "" 1
=======
# new role, new epoch
run server_query_with_port "${SERVERONE_MYSQL_PORT}" repo1 1 dolt "" "call dolt_assume_cluster_role('primary', '13');" "" 1
# we assert on a new connection, since the server may have killed the old one on the transition.
>>>>>>> go: sqle: cluster: Dolt databases on a standby are read only. They accept writes when the server transitions to primary.
server_query_with_port "${SERVERONE_MYSQL_PORT}" repo1 1 dolt "" "select @@GLOBAL.dolt_cluster_role, @@GLOBAL.dolt_cluster_role_epoch;" "@@GLOBAL.dolt_cluster_role,@@GLOBAL.dolt_cluster_role_epoch\nprimary,13"
# Server comes back up with latest assumed role.