Skip to content

Server stops if contacted too early #54

Open
@fdcds

Description

I am using this script to start swagger-converter locally:

#!/bin/sh

port=6767

onexit() {
        podman stop "${ctid}"
}
trap onexit EXIT

ctid="$(podman run -d -p "${port}":8080 docker.io/swaggerapi/swagger-converter:v1.0.2@sha256:90a122587733a0b802e6c9a7cda33c35115c38694912cce4678c66dff312d6b1)"

# FIXME: swagger-converter stops when connected too early
sleep 5

while ! http --print= HEAD http://localhost:"${port}"/ ; do
        sleep 1
done

xdg-open http://localhost:"${port}"/

sleep infinity

If I remove the sleep 5, swagger-converter will stop the server immediately when receiving the first connection:

http: error: ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')) while doing HEAD request to URL: http://localhost:6767/

http: error: ConnectionError: HTTPConnectionPool(host='localhost', port=6767): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fdcbbe9c810>: Failed to establish a new connection: [Errno 111] Connection refused')) while doing HEAD request to URL: http://localhost:6767/

http: error: ConnectionError: HTTPConnectionPool(host='localhost', port=6767): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f63fb15e6d0>: Failed to establish a new connection: [Errno 111] Connection refused')) while doing HEAD request to URL: http://localhost:6767/

I would expect swagger-converter to gracefully handle also early connection attempts.

Pod logs:

2020-04-08 08:36:26.476:INFO::main: Logging initialized @122ms to org.eclipse.jetty.util.log.StdErrLog
2020-04-08 08:36:26.483:INFO:oejr.Runner:main: Runner
2020-04-08 08:36:26.630:INFO:oejs.Server:main: jetty-9.4.9.v20180320; built: 2018-03-20T12:21:10Z; git: 1f8159b1e4a42d3f79997021ea1609f2fbac6de5; jvm 1.8.0_212-b04
2020-04-08 08:36:27.513:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0
2020-04-08 08:36:27.513:INFO:oejs.session:main: No SessionScavenger set, using defaults
2020-04-08 08:36:27.516:INFO:oejs.session:main: Scavenging every 600000ms
loading inflector config from inflector.yaml
08:36:28.160 [main] DEBUG io.swagger.v3.parser.OpenAPIV3Parser - Loaded raw data: ---
openapi: 3.0.0
info:
  title: Swagger Converter
  description: Converts a 1.x or 2.x Swagger definition to the OpenAPI 3.0.1 format
  version: 1.0.2
servers:
- url: "/"
paths:
  "/convert":
    get:
      tags:
      - Converter
      summary: Convert a swagger definition
      description: |
        Converts the supplied payload to a 3.0 specification
        based on a `url` parameter, which points to a older
        specification version
      operationId: convertByUrl
      parameters:
      - name: url
        in: query
        description: A URL to the swagger definition
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successfully converted schema
          content:
            "application/json":
              schema:
                type: object
                properties: {}
            "application/yaml":
              schema:
                type: object
                properties: {}
        '400':
          description: 'invaild input schema, or could not be converted'
          content:
            "*/*":
              schema:
                type: array
                description: error messages
                items:
                  type: string
    post:
      tags:
      - Converter
      summary: Convert a swagger definition
      description: |
        Converts the supplied payload to a 3.0 specification
        based on an input specification
      operationId: convertByContent
      requestBody:
        description: the specification to convert
        content:
          "application/json":
            schema:
              type: object
              properties: {}
          "application/yaml":
            schema:
              type: object
              properties: {}
        required: true
      responses:
        '200':
          description: successfully converted schema
          content:
            "application/json":
              schema:
                type: object
                properties: {}
            "application/yaml":
              schema:
                type: object
                properties: {}
        '400':
          description: 'invaild input schema, or could not be converted'
          content:
            "*/*":
              schema:
                type: array
                description: error messages
                items:
                  type: string
components: {}
08:36:28.172 [main] DEBUG io.swagger.v3.parser.OpenAPIV3Parser - Parsed rootNode: {"openapi":"3.0.0","info":{"title":"Swagger Converter","description":"Converts a 1.x or 2.x Swagger definition to the OpenAPI 3.0.1 format","version":"1.0.2"},"servers":[{"url":"/"}],"paths":{"/convert":{"get":{"tags":["Converter"],"summary":"Convert a swagger definition","description":"Converts the supplied payload to a 3.0 specification\nbased on a `url` parameter, which points to a older\nspecification version\n","operationId":"convertByUrl","parameters":[{"name":"url","in":"query","description":"A URL to the swagger definition","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successfully converted schema","content":{"application/json":{"schema":{"type":"object","properties":{}}},"application/yaml":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"invaild input schema, or could not be converted","content":{"*/*":{"schema":{"type":"array","description":"error messages","items":{"type":"string"}}}}}}},"post":{"tags":["Converter"],"summary":"Convert a swagger definition","description":"Converts the supplied payload to a 3.0 specification\nbased on an input specification\n","operationId":"convertByContent","requestBody":{"description":"the specification to convert","content":{"application/json":{"schema":{"type":"object","properties":{}}},"application/yaml":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"description":"successfully converted schema","content":{"application/json":{"schema":{"type":"object","properties":{}}},"application/yaml":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"invaild input schema, or could not be converted","content":{"*/*":{"schema":{"type":"array","description":"error messages","items":{"type":"string"}}}}}}}}},"components":{}}
08:36:28.197 [main] DEBUG io.swagger.v3.parser.OpenAPIV3Parser - Loaded raw data: ---
openapi: 3.0.0
info:
  title: Swagger Converter
  description: Converts a 1.x or 2.x Swagger definition to the OpenAPI 3.0.1 format
  version: 1.0.2
servers:
- url: "/"
paths:
  "/convert":
    get:
      tags:
      - Converter
      summary: Convert a swagger definition
      description: |
        Converts the supplied payload to a 3.0 specification
        based on a `url` parameter, which points to a older
        specification version
      operationId: convertByUrl
      parameters:
      - name: url
        in: query
        description: A URL to the swagger definition
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successfully converted schema
          content:
            "application/json":
              schema:
                type: object
                properties: {}
            "application/yaml":
              schema:
                type: object
                properties: {}
        '400':
          description: 'invaild input schema, or could not be converted'
          content:
            "*/*":
              schema:
                type: array
                description: error messages
                items:
                  type: string
    post:
      tags:
      - Converter
      summary: Convert a swagger definition
      description: |
        Converts the supplied payload to a 3.0 specification
        based on an input specification
      operationId: convertByContent
      requestBody:
        description: the specification to convert
        content:
          "application/json":
            schema:
              type: object
              properties: {}
          "application/yaml":
            schema:
              type: object
              properties: {}
        required: true
      responses:
        '200':
          description: successfully converted schema
          content:
            "application/json":
              schema:
                type: object
                properties: {}
            "application/yaml":
              schema:
                type: object
                properties: {}
        '400':
          description: 'invaild input schema, or could not be converted'
          content:
            "*/*":
              schema:
                type: array
                description: error messages
                items:
                  type: string
components: {}
08:36:28.201 [main] DEBUG io.swagger.v3.parser.OpenAPIV3Parser - Parsed rootNode: {"openapi":"3.0.0","info":{"title":"Swagger Converter","description":"Converts a 1.x or 2.x Swagger definition to the OpenAPI 3.0.1 format","version":"1.0.2"},"servers":[{"url":"/"}],"paths":{"/convert":{"get":{"tags":["Converter"],"summary":"Convert a swagger definition","description":"Converts the supplied payload to a 3.0 specification\nbased on a `url` parameter, which points to a older\nspecification version\n","operationId":"convertByUrl","parameters":[{"name":"url","in":"query","description":"A URL to the swagger definition","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successfully converted schema","content":{"application/json":{"schema":{"type":"object","properties":{}}},"application/yaml":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"invaild input schema, or could not be converted","content":{"*/*":{"schema":{"type":"array","description":"error messages","items":{"type":"string"}}}}}}},"post":{"tags":["Converter"],"summary":"Convert a swagger definition","description":"Converts the supplied payload to a 3.0 specification\nbased on an input specification\n","operationId":"convertByContent","requestBody":{"description":"the specification to convert","content":{"application/json":{"schema":{"type":"object","properties":{}}},"application/yaml":{"schema":{"type":"object","properties":{}}}},"required":true},"responses":{"200":{"description":"successfully converted schema","content":{"application/json":{"schema":{"type":"object","properties":{}}},"application/yaml":{"schema":{"type":"object","properties":{}}}}},"400":{"description":"invaild input schema, or could not be converted","content":{"*/*":{"schema":{"type":"array","description":"error messages","items":{"type":"string"}}}}}}}}},"components":{}}
08:36:28.205 [main] DEBUG i.s.oas.inflector.OpenAPIInflector - adding operation for `/convert` GET
08:36:28.210 [main] WARN  i.s.o.i.utils.ReflectionUtils - Failed to find class [io.swagger.handler.Converter]
08:36:28.212 [main] INFO  i.s.o.i.c.OpenAPIOperationController - looking for method: `public ResponseContext convertByUrl(io.swagger.oas.inflector.models.RequestContext request, String [simple type, class java.lang.String])` in class `io.swagger.handler.ConverterController`
08:36:28.213 [main] DEBUG i.s.o.i.c.OpenAPIOperationController - found class `io.swagger.handler.ConverterController`
08:36:28.215 [main] DEBUG i.s.oas.inflector.OpenAPIInflector - adding operation for `/convert` POST
08:36:28.215 [main] WARN  i.s.o.i.utils.ReflectionUtils - Failed to find class [io.swagger.handler.Converter]
08:36:28.216 [main] INFO  i.s.o.i.c.OpenAPIOperationController - looking for method: `public ResponseContext convertByContent(io.swagger.oas.inflector.models.RequestContext request, com.fasterxml.jackson.databind.JsonNode [simple type, class com.fasterxml.jackson.databind.JsonNode])` in class `io.swagger.handler.ConverterController`
08:36:28.216 [main] DEBUG i.s.o.i.c.OpenAPIOperationController - found class `io.swagger.handler.ConverterController`
08:36:28.238 [main] WARN  i.s.o.i.utils.ReflectionUtils - Failed to find class [io.swagger.handler.Converter]
08:36:28.238 [main] INFO  i.s.o.i.c.OpenAPIOperationController - looking for method: `public ResponseContext convertByContent(io.swagger.oas.inflector.models.RequestContext request, com.fasterxml.jackson.databind.JsonNode [simple type, class com.fasterxml.jackson.databind.JsonNode])` in class `io.swagger.handler.ConverterController`
08:36:28.238 [main] DEBUG i.s.o.i.c.OpenAPIOperationController - found class `io.swagger.handler.ConverterController`
2020-04-08 08:36:28.498:INFO:oejsh.ContextHandler:main: Started o.e.j.w.WebAppContext@33a10788{/,file:///tmp/jetty-0.0.0.0-8080-server.war-_-any-8582308719230484926.dir/webapp/,AVAILABLE}{file:///swagger-converter/server.war}
2020-04-08 08:36:28.510:INFO:oejs.AbstractConnector:main: Started ServerConnector@433ffad1{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
2020-04-08 08:36:28.511:INFO:oejs.Server:main: Started @2162ms
2020-04-08 08:36:54.169:INFO:oejs.AbstractConnector:Thread-0: Stopped ServerConnector@433ffad1{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
2020-04-08 08:36:54.170:INFO:oejs.session:Thread-0: Stopped scavenging
2020-04-08 08:36:54.186:INFO:oejsh.ContextHandler:Thread-0: Stopped o.e.j.w.WebAppContext@33a10788{/,null,UNAVAILABLE}{file:///swagger-converter/server.war}

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions