Skip to content

Bug: ADC throws "Error: undefined" during sync after successful conversion of valid OpenAPI document #261

@Yayabtw

Description

@Yayabtw

Current Behavior

When running adc sync after successfully converting a valid OpenAPI 3.0 document (based on the example given in the docs), ADC reaches the end of the sync process, performs all operations (deleting and recreating services/routes), but throws a fatal Error: undefined.

The configuration is still applied, but ADC crashes and reports failure.

Exxpected Behavior

ADC should complete the sync cleanly without crashing, or at least return a meaningful error.
No crash should occur if all changes were successfully applied.

Steps to Reproduce

  1. Create this OpenAPI file (openapi.yaml):
openapi: 3.1.0
info:
  title: httpbin API
  description: httpbin API for the API7 Enterprise Getting Started guides.
  version: 1.0.0
servers:
  - url: 'http://httpbin.org:80'
x-adc-labels:
  server: production
  api: httpbin
x-adc-plugins:
  key-auth:
    _meta:
      disable: false
paths:
  /anything/*:
    get:
      summary: Returns anything that is passed into the request.
      x-adc-name: test
      x-adc-service-defaults:
        path_prefix: /api/
      x-adc-upstream-defaults:
        timeout:
          connect: 10
          send: 10
          read: 10
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: string
  1. Convert and sync:
adc convert openapi -f /adc/openapi.yaml -o /adc/adc.yaml
adc sync -f /adc/adc.yaml
  1. Observe that:
  • Route and service are deleted and recreated
  • Then Error: undefined is thrown at the end

Environment

  • APISIX version: 3.12.0
  • Operating system (run uname -a): Linux d97b6eacbe2e 5.15.167.4-microsoft-standard-WSL2 SMP Tue Nov 5 00:21:55 UTC 2024 x86_64 GNU/Linux

Logs :

# adc convert openapi -f /adc/openapi.yaml -o /adc/adc2.yaml
[9:57:59 AM] [ADC] › ▶  start     Convert OpenAPI document "/adc/openapi.yaml"
[9:57:59 AM] [ADC] › ▶  start     Validate OpenAPI document
[9:57:59 AM] [ADC] › ✔  success   Validate OpenAPI document
[9:57:59 AM] [ADC] › ▶  start     Generate main service
[9:57:59 AM] [ADC] › ✔  success   Generate main service
[9:57:59 AM] [ADC] › ▶  start     Generate routes
[9:57:59 AM] [ADC] › ✔  success   Generate routes
[9:57:59 AM] [ADC] › ✔  success   Convert OpenAPI document "/adc/openapi.yaml"
[9:57:59 AM] [ADC] › ▶  start     Write converted OpenAPI file
[9:57:59 AM] [ADC] › ✔  success   Converted OpenAPI file to "/adc/adc2.yaml" successfully
[9:57:59 AM] [ADC] › ★  star      All is well, see you next time!
# adc sync -f /adc/adc2.yaml
Apache APISIX backend is experimental!
[9:58:04 AM] [ADC] › ▶  start     Load local configuration
[9:58:04 AM] [ADC] › ▶  start     Load /adc/adc2.yaml
[9:58:04 AM] [ADC] › ✔  success   Load /adc/adc2.yaml
[9:58:04 AM] [ADC] › ▶  start     Merge local configurations
[9:58:04 AM] [ADC] › ✔  success   Merge local configurations
[9:58:04 AM] [ADC] › ▶  start     Resolve value variables
[9:58:04 AM] [ADC] › ✔  success   Resolve value variables
[9:58:04 AM] [ADC] › ✔  success   Load local configuration
[9:58:04 AM] [ADC] › ▶  start     Lint configuration
[9:58:04 AM] [ADC] › ✔  success   Lint configuration
[9:58:04 AM] [ADC] › ▶  start     Load remote configuration
[9:58:04 AM] [ADC] › ▶  start     Fetch all configuration
[9:58:04 AM] [APISIX] › ▶  start     Fetch services
[9:58:04 AM] [APISIX] › ✔  success   Fetch services
[9:58:04 AM] [APISIX] › ▶  start     Fetch stream_routes
[9:58:04 AM] [APISIX] › ✔  success   Fetch stream_routes
[9:58:04 AM] [APISIX] › ▶  start     Fetch routes
[9:58:04 AM] [APISIX] › ✔  success   Fetch routes
[9:58:04 AM] [APISIX] › ▶  start     Fetch consumers
[9:58:04 AM] [APISIX] › ✔  success   Fetch consumers
[9:58:04 AM] [APISIX] › ▶  start     Fetch ssls
[9:58:04 AM] [APISIX] › ✔  success   Fetch ssls
[9:58:04 AM] [APISIX] › ▶  start     Fetch global_rules
[9:58:04 AM] [APISIX] › ✔  success   Fetch global_rules
[9:58:04 AM] [APISIX] › ▶  start     Fetch upstreams
[9:58:04 AM] [APISIX] › ✔  success   Fetch upstreams
[9:58:04 AM] [APISIX] › ▶  start     Fetch plugin_configs
[9:58:04 AM] [APISIX] › ✔  success   Fetch plugin_configs
[9:58:04 AM] [APISIX] › ▶  start     Fetch plugin_metadata
[9:58:04 AM] [APISIX] › ✔  success   Fetch plugin_metadata
[9:58:04 AM] [ADC] › ✔  success   Fetch all configuration
[9:58:04 AM] [ADC] › ✔  success   Load remote configuration
[9:58:04 AM] [ADC] › ▶  start     Diff configuration
[9:58:04 AM] [ADC] › ✔  success   Diff configuration
[9:58:04 AM] [ADC] › ▶  start     Sync configuration
[9:58:04 AM] [APISIX] › ▶  start     Update route: "httpbin-anything"
[9:58:04 AM] [APISIX] › ✔  success   Update route: "httpbin-anything"
[9:58:04 AM] [APISIX] › ▶  start     Update service: "httpbin-API_anything*_get"
[9:58:04 AM] [APISIX] › ✔  success   Update service: "httpbin-API_anything*_get"
[9:58:04 AM] [ADC] › ✖  error     Sync configuration
[9:58:04 AM] [ADC] › ✖  fatal     Error: Error: undefined,
    at dist/apps/cli/main.js:101633:27
    at dist/apps/cli/main.js:27264:51
    at OperatorSubscriber._this._error (dist/apps/cli/main.js:23041:21)
    at OperatorSubscriber.Subscriber.error (dist/apps/cli/main.js:22217:18)
    at OperatorSubscriber.Subscriber._error (dist/apps/cli/main.js:22241:30)
    at OperatorSubscriber.Subscriber.error (dist/apps/cli/main.js:22217:18)
    at dist/apps/cli/main.js:29759:28
    at OperatorSubscriber._this._error (dist/apps/cli/main.js:23041:21)
    at OperatorSubscriber.Subscriber.error (dist/apps/cli/main.js:22217:18)
    at dist/apps/cli/main.js:24881:47

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions