// GetSessionId is part of the queryservice.QueryService interface func (f *FakeQueryService) GetSessionId(sessionParams *proto.SessionParams, sessionInfo *proto.SessionInfo) error { if sessionParams.Keyspace != testTarget.Keyspace { f.t.Errorf("invalid keyspace: got %v expected %v", sessionParams.Keyspace, testTarget.Keyspace) } if sessionParams.Shard != testTarget.Shard { f.t.Errorf("invalid shard: got %v expected %v", sessionParams.Shard, testTarget.Shard) } sessionInfo.SessionId = testSessionID return nil }
func (sq *SqlQuery) GetSessionId(sessionParams *proto.SessionParams, sessionInfo *proto.SessionInfo) error { if sq.state.Get() != SERVING { return NewTabletError(RETRY, "Query server is in %s state", stateName[sq.state.Get()]) } if sessionParams.Keyspace != sq.dbconfig.Keyspace { return NewTabletError(FATAL, "Keyspace mismatch, expecting %v, received %v", sq.dbconfig.Keyspace, sessionParams.Keyspace) } if sessionParams.Shard != sq.dbconfig.Shard { return NewTabletError(FATAL, "Shard mismatch, expecting %v, received %v", sq.dbconfig.Shard, sessionParams.Shard) } sessionInfo.SessionId = sq.sessionId return nil }
// GetSessionId returns a sessionInfo response if the state is StateServing. func (sq *SqlQuery) GetSessionId(sessionParams *proto.SessionParams, sessionInfo *proto.SessionInfo) error { if err := sq.startRequest(0, true, false); err != nil { return err } defer sq.endRequest() if sessionParams.Keyspace != sq.dbconfig.Keyspace { return NewTabletError(ErrFatal, "Keyspace mismatch, expecting %v, received %v", sq.dbconfig.Keyspace, sessionParams.Keyspace) } if strings.ToLower(sessionParams.Shard) != strings.ToLower(sq.dbconfig.Shard) { return NewTabletError(ErrFatal, "Shard mismatch, expecting %v, received %v", sq.dbconfig.Shard, sessionParams.Shard) } sessionInfo.SessionId = sq.sessionID return nil }
// GetSessionId returns a sessionInfo response if the state is StateServing. func (tsv *TabletServer) GetSessionId(sessionParams *proto.SessionParams, sessionInfo *proto.SessionInfo) error { tsv.mu.Lock() defer tsv.mu.Unlock() if tsv.state != StateServing { return NewTabletError(ErrRetry, vtrpc.ErrorCode_QUERY_NOT_SERVED, "operation not allowed in state %s", stateName[tsv.state]) } if sessionParams.Keyspace != tsv.dbconfigs.App.Keyspace { return NewTabletError(ErrFatal, vtrpc.ErrorCode_INTERNAL_ERROR, "Keyspace mismatch, expecting %v, received %v", tsv.dbconfigs.App.Keyspace, sessionParams.Keyspace) } if strings.ToLower(sessionParams.Shard) != strings.ToLower(tsv.dbconfigs.App.Shard) { return NewTabletError(ErrFatal, vtrpc.ErrorCode_INTERNAL_ERROR, "Shard mismatch, expecting %v, received %v", tsv.dbconfigs.App.Shard, sessionParams.Shard) } sessionInfo.SessionId = tsv.sessionID return nil }
// GetSessionId returns a sessionInfo response if the state is SERVING. func (sq *SqlQuery) GetSessionId(sessionParams *proto.SessionParams, sessionInfo *proto.SessionInfo) error { // We perform a lockless read of state because we don't care if it changes // after we check its value. if sq.state.Get() != SERVING { return NewTabletError(RETRY, "Query server is in %s state", sq.GetState()) } // state was SERVING if sessionParams.Keyspace != sq.dbconfig.Keyspace { return NewTabletError(FATAL, "Keyspace mismatch, expecting %v, received %v", sq.dbconfig.Keyspace, sessionParams.Keyspace) } if sessionParams.Shard != sq.dbconfig.Shard { return NewTabletError(FATAL, "Shard mismatch, expecting %v, received %v", sq.dbconfig.Shard, sessionParams.Shard) } sessionInfo.SessionId = sq.sessionId return nil }
func (sq *SqlQuery) GetSessionId(sessionParams *proto.SessionParams, sessionInfo *proto.SessionInfo) error { if sessionParams.DbName == "" { if sessionParams.Keyspace != sq.dbconfig.Keyspace { return NewTabletError(FATAL, "Keyspace mismatch, expecting %v, received %v", sq.dbconfig.Keyspace, sessionParams.Keyspace) } if sessionParams.Shard != sq.dbconfig.Shard { return NewTabletError(FATAL, "Shard mismatch, expecting %v, received %v", sq.dbconfig.Shard, sessionParams.Shard) } } else { if sessionParams.DbName != sq.dbconfig.Dbname { return NewTabletError(FATAL, "db name mismatch, expecting %v, received %v", sq.dbconfig.Dbname, sessionParams.DbName) } if sessionParams.KeyRange != sq.dbconfig.KeyRange { return NewTabletError(FATAL, "KeyRange mismatch, expecting %v, received %v", sq.dbconfig.KeyRange.String(), sessionParams.KeyRange.String()) } } sessionInfo.SessionId = sq.sessionId return nil }
// AddTabletErrorToSessionInfo will mutate a SessionInfo struct to fill in the Err // field with details from the TabletError. func AddTabletErrorToSessionInfo(err error, reply *proto.SessionInfo) { if err == nil { return } reply.Err = rpcErrFromTabletError(err) }