mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-07 08:50:34 -06:00
Merge branch 'aaron/sql-cluster-standby-is-read-only' into aaron/sql-cluster-interceptors-transition-role
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user