Move to a single prisma client connection for the ui backend to prevent competing connections.
This commit is contained in:
@@ -1,11 +1,9 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
import { getTrainingFolder } from '@/server/settings';
|
import { getTrainingFolder } from '@/server/settings';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
||||||
const { jobID } = await params;
|
const { jobID } = await params;
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { getTrainingFolder } from '@/server/settings';
|
import { getTrainingFolder } from '@/server/settings';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
||||||
const { jobID } = await params;
|
const { jobID } = await params;
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import type { FileHandle } from 'fs/promises';
|
import type { FileHandle } from 'fs/promises';
|
||||||
import { getTrainingFolder } from '@/server/settings';
|
import { getTrainingFolder } from '@/server/settings';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
||||||
const { jobID } = await params;
|
const { jobID } = await params;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { getTrainingFolder } from '@/server/settings';
|
import { getTrainingFolder } from '@/server/settings';
|
||||||
@@ -8,8 +8,6 @@ import sqlite3 from 'sqlite3';
|
|||||||
|
|
||||||
export const runtime = 'nodejs';
|
export const runtime = 'nodejs';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
function openDb(filename: string) {
|
function openDb(filename: string) {
|
||||||
const db = new sqlite3.Database(filename);
|
const db = new sqlite3.Database(filename);
|
||||||
db.configure('busyTimeout', 30_000);
|
db.configure('busyTimeout', 30_000);
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
||||||
const { jobID } = await params;
|
const { jobID } = await params;
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { getTrainingFolder } from '@/server/settings';
|
import { getTrainingFolder } from '@/server/settings';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
||||||
const { jobID } = await params;
|
const { jobID } = await params;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
||||||
const { jobID } = await params;
|
const { jobID } = await params;
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { getTrainingFolder } from '@/server/settings';
|
import { getTrainingFolder } from '@/server/settings';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
||||||
const { jobID } = await params;
|
const { jobID } = await params;
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
||||||
const { jobID } = await params;
|
const { jobID } = await params;
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
||||||
const { jobID } = await params;
|
const { jobID } = await params;
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
import { exec } from 'child_process';
|
import { exec } from 'child_process';
|
||||||
import { promisify } from 'util';
|
import { promisify } from 'util';
|
||||||
|
|
||||||
const execAsync = promisify(exec);
|
const execAsync = promisify(exec);
|
||||||
const prisma = new PrismaClient();
|
|
||||||
const isWindows = process.platform === 'win32';
|
const isWindows = process.platform === 'win32';
|
||||||
|
|
||||||
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
export async function GET(request: NextRequest, { params }: { params: { jobID: string } }) {
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
import { NextResponse } from 'next/server';
|
import { NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
import { isMac } from '@/helpers/basic';
|
import { isMac } from '@/helpers/basic';
|
||||||
import { cached } from '@/server/apiCache';
|
import { cached } from '@/server/apiCache';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: Request) {
|
export async function GET(request: Request) {
|
||||||
const { searchParams } = new URL(request.url);
|
const { searchParams } = new URL(request.url);
|
||||||
const id = searchParams.get('id');
|
const id = searchParams.get('id');
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: NextRequest, { params }: { params: { queueID: string } }) {
|
export async function GET(request: NextRequest, { params }: { params: { queueID: string } }) {
|
||||||
const { queueID } = await params;
|
const { queueID } = await params;
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { NextRequest, NextResponse } from 'next/server';
|
import { NextRequest, NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: NextRequest, { params }: { params: { queueID: string } }) {
|
export async function GET(request: NextRequest, { params }: { params: { queueID: string } }) {
|
||||||
const { queueID } = await params;
|
const { queueID } = await params;
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
import { NextResponse } from 'next/server';
|
import { NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET(request: Request) {
|
export async function GET(request: Request) {
|
||||||
const { searchParams } = new URL(request.url);
|
const { searchParams } = new URL(request.url);
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
import { NextResponse } from 'next/server';
|
import { NextResponse } from 'next/server';
|
||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
import { defaultTrainFolder, defaultDatasetsFolder } from '@/paths';
|
import { defaultTrainFolder, defaultDatasetsFolder } from '@/paths';
|
||||||
import { flushCache } from '@/server/settings';
|
import { flushCache } from '@/server/settings';
|
||||||
|
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export async function GET() {
|
export async function GET() {
|
||||||
try {
|
try {
|
||||||
const settings = await prisma.settings.findMany();
|
const settings = await prisma.settings.findMany();
|
||||||
|
|||||||
16
ui/src/server/prisma.ts
Normal file
16
ui/src/server/prisma.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { PrismaClient } from '@prisma/client';
|
||||||
|
|
||||||
|
// Single shared PrismaClient for the whole server. Route files must import
|
||||||
|
// this instead of constructing their own client — each PrismaClient spawns
|
||||||
|
// its own query engine + connection pool, and a pile of them contending for
|
||||||
|
// the same sqlite file just adds lock pressure. The globalThis stash keeps
|
||||||
|
// dev hot-reload from leaking a new client on every recompile.
|
||||||
|
const globalForPrisma = globalThis as unknown as { prisma?: PrismaClient };
|
||||||
|
|
||||||
|
const prisma = globalForPrisma.prisma ?? new PrismaClient();
|
||||||
|
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
globalForPrisma.prisma = prisma;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default prisma;
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
import { PrismaClient } from '@prisma/client';
|
import prisma from '@/server/prisma';
|
||||||
import { defaultDatasetsFolder, defaultDataRoot } from '@/paths';
|
import { defaultDatasetsFolder, defaultDataRoot } from '@/paths';
|
||||||
import { defaultTrainFolder } from '@/paths';
|
import { defaultTrainFolder } from '@/paths';
|
||||||
import NodeCache from 'node-cache';
|
import NodeCache from 'node-cache';
|
||||||
|
|
||||||
const myCache = new NodeCache();
|
const myCache = new NodeCache();
|
||||||
const prisma = new PrismaClient();
|
|
||||||
|
|
||||||
export const flushCache = () => {
|
export const flushCache = () => {
|
||||||
myCache.flushAll();
|
myCache.flushAll();
|
||||||
|
|||||||
Reference in New Issue
Block a user