Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

受講者の同期機能で受講者数が多いと失敗する #1021

Open
ties-makimura opened this issue May 20, 2024 · 0 comments
Open

受講者の同期機能で受講者数が多いと失敗する #1021

ties-makimura opened this issue May 20, 2024 · 0 comments
Labels
bug Something isn't working

Comments

@ties-makimura
Copy link

そのバグについて

受講者の同期機能について,LMS側の受講者数が多い状態で実行すると,outgoing request timed out after 3500ms が出て失敗し,そのまま同期を進めると既存の受講者含め一覧から受講者が消える。

再現手順

  1. Moodleのコースに学生ロールでユーザを1人登録
  2. 学習分析ページにある受講者の同期機能を実行,成功する
  3. 同じコースに学生ロールでユーザを3万人登録
    4.学習分析ページにある受講者の同期機能を実行,失敗して一覧から受講者が消える。

期待していた動作

  • 理想は3万人でも登録できる(時間がかかる場合は進捗だすとか?)
  • または,同期失敗した旨が表示され,既存の受講者は消えないようにする

スクリーンショット

image

デスクトップ再現環境 (下記をうめてください):

  • OS: Windows10
  • ブラウザ: Chrome
  • Version: 124.0.6367.208

追記・備考

https://github.com/npocccties/chibichilo/blob/42941b6c7a14817e1464ceb02939a4ce02e17921/server/utils/ltiv1p3/findClient.ts
から,以下のようにタイムアウト時間を延ばせば一応処理が成功したが,時間かかりすぎる

import { Issuer, custom } from "openid-client";
import prisma from "$server/utils/prisma";
import { createPrivateKey } from "$server/utils/ltiv1p3/jwk";

/** OpenID Connect Client を得る */
async function findClient(clientId: string, redirectUris?: string[]) {
  const consumer = await prisma.ltiConsumer.findUnique({
    where: { id: clientId },
    include: { platform: true },
  });
  const platform = consumer?.platform;

  if (!platform?.issuer) return;

  const metadata =
    typeof platform.metadata === "object" ? platform.metadata : {};
  const issuer = new Issuer({
    ...metadata,
    issuer: platform.issuer,
  });
  const privateKey = await createPrivateKey();
  const client = new issuer.Client(
    {
      client_id: clientId,
      redirect_uris: redirectUris,
      response_types: ["id_token"],
      token_endpoint_auth_method: "private_key_jwt",
      token_endpoint_auth_signing_alg: "RS256",
    },
    { keys: privateKey ? [privateKey] : [] }
  );

  // タイムアウトを設定
  client[custom.http_options] = function httpOptions(options) {
    options.timeout = 30000; // 30秒に設定
    return options;
  };
  
  return client;
}

export default findClient;

@ties-makimura ties-makimura added the bug Something isn't working label May 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant