diff --git a/go/vt/vttablet/tabletserver/query_engine.go b/go/vt/vttablet/tabletserver/query_engine.go index 735f95ab2fe..c8388d6abeb 100644 --- a/go/vt/vttablet/tabletserver/query_engine.go +++ b/go/vt/vttablet/tabletserver/query_engine.go @@ -235,6 +235,7 @@ func NewQueryEngine(checker connpool.MySQLChecker, se *schema.Engine, config tab qe.streamBufferSize = sync2.NewAtomicInt64(int64(config.StreamBufferSize)) qe.passthroughDMLs = sync2.NewAtomicBool(config.PassthroughDMLs) + qe.allowUnsafeDMLs = config.AllowUnsafeDMLs planbuilder.PassthroughDMLs = config.PassthroughDMLs qe.accessCheckerLogger = logutil.NewThrottledLogger("accessChecker", 1*time.Second) diff --git a/go/vt/vttablet/tabletserver/tabletenv/config.go b/go/vt/vttablet/tabletserver/tabletenv/config.go index ea81237e41d..cc6eac7df9d 100644 --- a/go/vt/vttablet/tabletserver/tabletenv/config.go +++ b/go/vt/vttablet/tabletserver/tabletenv/config.go @@ -56,6 +56,7 @@ func init() { flag.IntVar(&Config.WarnResultSize, "queryserver-config-warn-result-size", DefaultQsConfig.WarnResultSize, "query server result size warning threshold, warn if number of rows returned from vttablet for non-streaming queries exceeds this") flag.IntVar(&Config.MaxDMLRows, "queryserver-config-max-dml-rows", DefaultQsConfig.MaxDMLRows, "query server max dml rows per statement, maximum number of rows allowed to return at a time for an update or delete with either 1) an equality where clauses on primary keys, or 2) a subselect statement. For update and delete statements in above two categories, vttablet will split the original query into multiple small queries based on this configuration value. ") flag.BoolVar(&Config.PassthroughDMLs, "queryserver-config-passthrough-dmls", DefaultQsConfig.PassthroughDMLs, "query server pass through all dml statements without rewriting") + flag.BoolVar(&Config.AllowUnsafeDMLs, "queryserver-config-allowunsafe-dmls", DefaultQsConfig.AllowUnsafeDMLs, "query server allow unsafe dml statements") flag.IntVar(&Config.StreamBufferSize, "queryserver-config-stream-buffer-size", DefaultQsConfig.StreamBufferSize, "query server stream buffer size, the maximum number of bytes sent from vttablet for each stream call. It's recommended to keep this value in sync with vtgate's stream_buffer_size.") flag.IntVar(&Config.QueryPlanCacheSize, "queryserver-config-query-cache-size", DefaultQsConfig.QueryPlanCacheSize, "query server query cache size, maximum number of queries to be cached. vttablet analyzes every incoming query and generate a query plan, these plans are being cached in a lru cache. This config controls the capacity of the lru cache.") @@ -134,6 +135,7 @@ type TabletConfig struct { WarnResultSize int MaxDMLRows int PassthroughDMLs bool + AllowUnsafeDMLs bool StreamBufferSize int QueryPlanCacheSize int SchemaReloadTime float64 @@ -205,6 +207,7 @@ var DefaultQsConfig = TabletConfig{ WarnResultSize: 0, MaxDMLRows: 500, PassthroughDMLs: false, + AllowUnsafeDMLs: false, QueryPlanCacheSize: 5000, SchemaReloadTime: 30 * 60, QueryTimeout: 30,