tursodatabase / turso-cli

Command line interface to Turso.

Home Page:https://turso.tech

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Local dev mode returns "Recieved an invalid baton" when using transactions with v0.92.1

dengpeng opened this issue · comments

After upgrade to the latest v0.92.1 version of the turso cli, and when using local db started with

turso dev -p 8765 --db-file local.db

the following code using transaction will throw an exception: LibsqlError: SERVER_ERROR: Server returned HTTP status 400: Received an invalid baton

async function initDb() {
  faker.seed(123);

  await db.transaction(async (tx) => {
    await tx.delete(tasks);

    await tx.insert(tasks).values(
      Array.from({ length: 50 }, () => {
        const timestamp = faker.date.recent({ days: 60 });

        return {
          category: faker.helpers.arrayElement(taskCategory),
          status: faker.helpers.arrayElement(taskStatus),
          priority: faker.helpers.arrayElement(taskPriority),
          title: faker.hacker.phrase(),
          createdAt: timestamp,
          updatedAt: timestamp,
        };
      }),
    );
  });
}

StackTrace:

 GET /tasks/reset 500 in 278ms
 ⨯ LibsqlError: SERVER_ERROR: Server returned HTTP status 400: Received an invalid baton
    at mapHranaError (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/@libsql+client@0.6.0/node_modules/@libsql/client/lib-cjs/hrana.js:287:16)
    at HttpTransaction.batch (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/@libsql+client@0.6.0/node_modules/@libsql/client/lib-cjs/hrana.js:131:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async /Users/peng/Workspaces/playground/crud-demo/.next/server/chunks/src_2d0027._.js:324:9
    at async LibSQLSession.transaction (/Users/peng/Workspaces/playground/crud-demo/.next/server/chunks/0ab5b_drizzle-orm_d2b984._.js:5706:28)
    at async initDb (/Users/peng/Workspaces/playground/crud-demo/.next/server/chunks/src_2d0027._.js:322:5)
    at async GET (/Users/peng/Workspaces/playground/crud-demo/.next/server/chunks/src_2d0027._.js:315:5)
    at async /Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:53191
    at async e_.execute (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:44492)
    at async e_.handle (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:54445)
    at async doRender (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/base-server.js:1377:42)
    at async cacheEntry.responseCache.get.routeKind (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/base-server.js:1599:28)
    at async DevServer.renderToResponseWithComponentsImpl (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/base-server.js:1507:28)
    at async DevServer.renderPageComponent (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/base-server.js:1924:24)
    at async DevServer.renderToResponseImpl (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/base-server.js:1962:32)
    at async DevServer.pipeImpl (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/base-server.js:920:25)
    at async NextNodeServer.handleCatchallRenderRequest (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/next-server.js:272:17)
    at async DevServer.handleRequestImpl (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/base-server.js:816:17)
    at async /Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/dev/next-dev-server.js:339:20
    at async Span.traceAsyncFn (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/trace/trace.js:154:20)
    at async DevServer.handleRequest (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/dev/next-dev-server.js:336:24)
    at async invokeRender (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/lib/router-server.js:174:21)
    at async handleRequest (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/lib/router-server.js:353:24)
    at async requestHandlerImpl (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/lib/router-server.js:377:13)
    at async Server.requestListener (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/next@14.2.2_react-dom@18.2.0_react@18.2.0/node_modules/next/dist/server/lib/start-server.js:141:13) {
  code: 'SERVER_ERROR',
  rawCode: undefined,
  [cause]: HttpServerError: Server returned HTTP status 400: Received an invalid baton
      at errorFromResponse (/Users/peng/Workspaces/playground/crud-demo/node_modules/.pnpm/@libsql+hrana-client@0.6.0/node_modules/@libsql/hrana-client/lib-cjs/http/stream.js:367:12)
      at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
    status: 400
  }
}

turso-cli output:

2024-04-26T01:31:52.268947Z ERROR libsql_server::hrana::http: hrana server: Invalid MAC on baton

When the db operations are moved out of a transaction, no error will occur.

The code worked without any problem as of a few days ago where v0.91.x should have been used. The libsql-servers has not been upgraded since over two weeks ago.

 ~/W/p/crud-demo   *  ls -l /opt/homebrew/Cellar/libsql-server/                                                            2008ms  Fri Apr 26 09:33:35 2024
total 0
drwxr-xr-x@ 7 peng  admin  224 Apr  8 08:56 0.23.0/
 ~/W/p/crud-demo   *  ls -l /opt/homebrew/Cellar/turso/                                                                             Fri Apr 26 09:39:13 2024
total 0
drwxr-xr-x  7 peng  admin  224 Apr 25 22:48 0.92.1/

The code does not throws exceptions when connecting to the db from turso.