Пример #1
0
// 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
}
Пример #2
0
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
}
Пример #3
0
// 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
}
Пример #4
0
// 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
}
Пример #5
0
// 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
}
Пример #6
0
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
}
Пример #7
0
// 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)
}