Skip to content

Releases: roadrunner-server/roadrunner

v2.12.1

01 Dec 12:41
ef1f315
Compare
Choose a tag to compare
tags: roadrunner v2.12.1

🚀 v2.12.1 🚀

👀 New:

  • RR: Automatically set the GOMAXPROCS to match the container CPU quota.
  • AMQP plugin: implement Status to check the AMQP connection PR.
  • SQS plugin: prefetch option now works as expected. RR will not consume new JOBS when it reaches the prefetch limit, until already accepted messages are not ACK/NACK-ed.
  • JOBS(memory) plugin: prefetch option now works as expected (see SQS). You can now emulate FIFO in memory by setting the prefetch option to 1.

🩹 Fixes:

  • 🐛 gRPC plugin: server options are applied only when TLS is set. Discussion.
  • 🐛 AMQP plugin: fix a few typos in the configuration.

Thanks to our awesome contributors: @wolfy-j , @butschster , @roxblnfk , @kastahov , @msmakouz, @lyt8384 ❤️

v2.12.0

24 Nov 16:15
33bebe5
Compare
Choose a tag to compare
tags: roadrunner v2.12.0

🚀 v2.12.0 🚀

⚠️ websocket and broadcast plugins were replaced by the new centrifuge plugin. How to build RR with these deprecated plugins -> link

⚠️ All plugins, sdk and api, updated to v3. There are no breaking changes; we moved all Go code from the api to sdk.

👀 New:

RPC PLUGIN

  • ✏ New API to get the RR version and configuration in the JSON format -> rpc.Version, rpc.Config.

SERVICES PLUGIN

  • ✏ New API to get the correct number of the running services, including statistics about the processes -> server.Statuses.

  • ✏ New option to show the service name in the logs:

    # Show the name of the service in logs (e.g. service.some_service_1)
    #
    # Default: false
    service_name_in_log: false

Birddog: link

METRICS PLUGIN

  • ✏ New API unregister previously added collector -> metrics.Unregister.

AMQP PLUGIN

  • ✏ New configuration options:
jobs:
  pipelines:
    example:
      driver: amqp
      config:
        # Durable exchange
        #
        # Default: true
        exchange_durable: true

        # Auto-deleted exchange
        #
        # Default: false
        exchange_auto_deleted: false

        # Auto-deleted queue
        #
        # Default: false
        queue_auto_deleted: false

GO-SDK

  • ✏ New option to control the reset_timeout:
pool:
  allocate_timeout: 10s
  reset_timeout: 10s
  destroy_timeout: 10s

CENTRIFUGO PLUGIN

  • ✏ New centrifugo plugin.
    Docs: PHP-lib

RoadRunner config:

version: "2.7"

centrifuge:
  # Centrifugo server proxy address (docs: https://centrifugal.dev/docs/server/proxy#grpc-proxy)
  #
  # Optional, default: tcp://127.0.0.1:30000
  proxy_address: "tcp://127.0.0.1:30000"

  # gRPC server API address (docs: https://centrifugal.dev/docs/server/server_api#grpc-api)
  #
  # Optional, default: tcp://127.0.0.1:30000. Centrifugo: `grpc_api` should be set to true and `grpc_port` should be the same as in the RR's config.
  grpc_api_address: tcp://127.0.0.1:30000

  # Use gRPC gzip compressor
  #
  # Optional, default: false
  use_compressor: true

  # Your application version
  #
  # Optional, default: v1.0.0
  version: "v1.0.0"

  # Your application name
  #
  # Optional, default: roadrunner
  name: "roadrunner"

  # TLS configuration
  #
  # Optional, default: null
  tls:
    # TLS key
    #
    # Required
    key: /path/to/key.pem

    # TLS certificate
    #
    # Required
    cert: /path/to/cert.pem


  # Workers pool settings. link: /~https://github.com/roadrunner-server/roadrunner/blob/master/.rr.yaml#L812
  #
  # Optional, default: null (see default values)
  pool: {}

APP-LOGGER PLUGIN

  • ✏ Application logger plugin.
    Docs: PHP-lib

🩹 Fixes:

  • 🐛 Headers middleware: Header size is too small
  • 🐛 gRPC plugin: Protobuf compiler plugin segfaults on import statements
  • 🐛 Service plugin: Get services list via RPC
  • 🐛 gRPC plugin: Remote protoc-gen-php-grpc plugin error
  • 🐛 HTTP plugin: Fail to upload files when RR's permissions are different from worker's

Thanks to our awesome contributors: @wolfy-j, @andrey-tech, @butschster, @masterjus, @phroggyy, @rapita, @egonbraun, @tungfinblox ❤️

v2.12.0-rc.1

12 Nov 18:06
f1a9fca
Compare
Choose a tag to compare
v2.12.0-rc.1 Pre-release
Pre-release

👀 New:

  • All plugins: update to v3. This is done not because of some breaking change but because of the internal update.
  • RPC plugin: add new API to provide a running RR version and configuration in JSON format.
  • AMQP plugin: new configuration options. FR, (thanks @andrey-tech)
jobs:
  pipelines:
    example:
      driver: amqp
      config:
        # Durable exchange
        #
        # Default: true
        exchange_durable: true

        # Auto-deleted exchange
        #
        # Default: false
        exchange_auto_deleted: false

        # Auto-deleted queue
        #
        # Default: false
        queue_auto_deleted: false
  • Workers pool (SDK): New option to control the reset_timeout. Note that the pool.Reset is protected by mutexes, meaning that if you have some requests already in the pool, you'll have to wait for these requests to be processed. The reset_timeout does not count this time.
pool:
  allocate_timeout: 10s
  reset_timeout: 10s
  destroy_timeout: 10s

v2.12.0-beta.1

03 Nov 13:49
e0f4452
Compare
Choose a tag to compare
v2.12.0-beta.1 Pre-release
Pre-release

⚠️ websocket and broadcast plugins were replaced by the new centrifuge plugin.

⚠️ All plugins, sdk and api updated to v3. There are no breaking changes except we moved all Go code from the api to sdk.

👀 New:

  • Centrifugo plugin: New centrifugo plugin. This will replace existing broadcast + websockets plugins. FR.
    Docs: PHP-lib

RoadRunner config:

version: "2.7"

centrifuge:
  # Centrifugo server proxy address (docs: https://centrifugal.dev/docs/server/proxy#grpc-proxy)
  #
  # Optional, default: tcp://127.0.0.1:30000
  proxy_address: "tcp://127.0.0.1:30000"

  # gRPC server API address (docs: https://centrifugal.dev/docs/server/server_api#grpc-api)
  #
  # Optional, default: 127.0.0.1:30000. Centrifugo: `grpc_api` should be set to true and `grpc_port` should be the same as in the RR's config.
  grpc_api_address: 127.0.0.1:30000

  # Use gRPC gzip compressor
  #
  # Optional, default: false
  use_compressor: true

  # Your application version
  #
  # Optional, default: v1.0.0
  version: "v1.0.0"

  # Your application name
  #
  # Optional, default: roadrunner
  name: "roadrunner"

  # TLS configuration
  #
  # Optional, default: null
  tls:
    # TLS key
    #
    # Required
    key: /path/to/key.pem

    # TLS certificate
    #
    # Required
    cert: /path/to/cert.pem


  # Workers pool settings. link: /~https://github.com/roadrunner-server/roadrunner/blob/master/.rr.yaml#L812
  #
  # Optional, default: null (see default values)
  pool: {}
  • App logger plugin: Application logger plugin, FR (thanks @wolfy-j)
    Docs: PHP-lib

🩹 Fixes:

  • 🐛 Headers middleware: Header size is too small, BUG (thanks @masterjus)
  • 🐛 gRPC plugin: Protobuf compiler plugin segfaults on import statements, BUG (thanks @phroggyy)
  • 🐛 Service plugin: Get services list via RPC, BUG (thanks @butschster)
  • 🐛 gRPC plugin: Remote protoc-gen-php-grpc plugin error, BUG (thanks @rapita)
  • 🐛 HTTP plugin: Fail to upload files when RR's permissions are different from worker's, BUG (thanks @egonbraun)

v2.12.0-alpha.1

14 Oct 10:12
4abde01
Compare
Choose a tag to compare
v2.12.0-alpha.1 Pre-release
Pre-release

👀 New:

  • API v3: remove ALL Go code from the API repository. Now, API contains only the RR protobuf API. You don't need to import an interface from the API (it's not a Go way) now. You may declare the interface where you use it (have a look at this PR for more info).
  • SDK v3: refactor all packages, merge worker + sync worker (since there were no differences), pool + sync pool - now, if a user uses supervisor, pool automatically turns on supervisor under the hood.

🩹 Fixes:

  • 🐛 http plugin: correctly set permissions for the uploads (multipart-form files), BUG, (thanks @egonbraun)

🔧 Maintenance:

  • 🔧 All plugins update to the v3. They don't use API interfaces anymore.

v2.11.4

06 Oct 14:42
bee07c0
Compare
Choose a tag to compare

👀 New:

  • Temporal plugin: Support for the SearchAttributes. FR, (thanks @cv65kr).

Docs: link
Samples: link

🔧 Maintenance:

  • roadrunner-temporal plugin updated to: 1.7.0
  • http plugin updated to: 2.23.5
  • sqs plugin updated to: 2.20.4
  • config plugin updated to: 2.16.5
  • grpc plugin updated to: 2.23.3
  • nats plugin updated to: 2.17.3
  • jobs plugin updated to: 2.18.4
  • server plugin updated to: 2.16.4
  • tcp plugin updated to: 2.15.4
  • websockets plugin updated to: 2.16.5
  • otel plugin updated to: 2.5.6
  • kafka plugin updated to: 2.2.3

v2.11.3

29 Sep 21:45
f851d4b
Compare
Choose a tag to compare

👀 New:

  • [ALPHA] gRPC plugin: buf remote plugins support for the protoc-gen-php-grpc plugin. FR, (thanks @rauanmayemir)
  • Temporal plugin: mTLS support. FR, (thanks @seregazhuk)

Configuration sample:

temporal:
  address: 127.0.0.1:7233
  cache_size: 100000
  activities:
    num_workers: 4

  tls:
    key: client.key
    cert: client.pem
    root_ca: ca.cert
    client_auth_type: require_and_verify_client_cert
    server_name: "tls-sample"

🩹 Fixes:

  • 🐛 Config plugin: properly replace environment variables for the array yaml values. BUG, (thanks @lyt8384)

🧹 Chore:

  • 🧑‍🏭: [ALPHA] gRPC plugin: base64 decoder for the google's ErrorProto structure. FR, (thanks @rauanmayemir)

v2.11.2

15 Sep 08:47
28b14c2
Compare
Choose a tag to compare

👀 New:

  • Kafka plugin: [ ⚠️ EXPERIMENTAL OPTION ⚠️ ] Kafka plugin now waits for 1 minute (automatically) for the broker to be available, FR, (thanks @Baiquette)

  • Internal: PHP Worker now uses an FSM to transition between states (working, ready, invalid, etc).

  • Internal: ./rr reset now works in parallel. All workers will be restarted simultaneously instead of a one-by-one sync approach.

  • Internal: ./rr reset and destroy (when stopping RR) now gracefully stop the workers (giving a chance for the finalizers to work). If the worker doesn't respond in 10 seconds, it'll be killed.

🩹 Fixes:

  • 🐛 SQS plugin: Incorrect detection of the AWS IMDSv2 instances, BUG (thanks @paulermo)
  • 🐛 Temporal plugin: Segmentation violation when using TLS, BUG, (thanks @seregazhuk)
  • 🐛 NATS plugin: Properly check the stream not found error from NATS, BUG, (thanks @pjtuxe)

🧹 Chore:

  • 🧑‍🏭: Temporal plugin: Support for the statsd daemon for stats aggregation, FR, (thanks @cv65kr)
    Configuration stays the same (no breaking changes), but additionally, you may specify a driver:

Prometheus:

temporal:
  address: "127.0.0.1:7233"
  metrics:
    driver: prometheus # <---- prometheus used by default (you may omit the driver in this case)
    address: "127.0.0.1:9095"
    prefix: "samples"
    type: "summary"
  activities:
    num_workers: 4

Statsd:

temporal:
  address: "127.0.0.1:7233"
  metrics:
    driver: statsd # <---- Should be specified to use a statsd driver
    host_port: "127.0.0.1:8125"
    prefix: "samples"
    flush_interval: 1s
    flush_bytes: 512
    tags:
      - foo: bar
  activities:
    num_workers: 4

Detailed description is here: link

v2.11.1

25 Aug 13:25
ff29b8b
Compare
Choose a tag to compare

👀 New:

  • http plugin: Send raw body (unescaped) to the PHP worker for the application/x-www-form-urlencoded content type. FR1, FR2, (thanks @ekisu, @rlantingmove4mobile)
    Configuration:
http:
  raw_body: true/false (by default)
  • temporal plugin: Overwrite client-name and client-version in Go client to represent PHP-SDK, FR, (thanks, @wolfy-j)

🧹 Chore:

  • 🧑‍🏭: Autocomplete .rr.yaml configuration for the cache plugin. link

v2.11.0

18 Aug 13:52
6a57268
Compare
Choose a tag to compare

⚠️ NewRelic middleware was removed. Please, use OTEL middleware instead

⚠️ In 2.12.0 we plan to replace websockets and broadcast plugins with the centrifuge plugin. However, if you still need a RR with these deprecated plugins, you may use Velox to build your custom build.

👀 New:

  • ✏️ [BETA]: RoadRunner: Can now be embedded in other go programs. PR, (thanks @khepin)
  • ✏️ gRPC Plugin: Implement Google's gRPC errors API. The exception might be passed as a Status structure in the Metadata (key - error) to be parsed and returned to the user w/o worker restart. NOTE: Status structure should be marshaled via proto marshaller, not json. FR
  • ✏️ Logger Plugin: Get rid of the context deadline exceeded error on worker's allocation. We updated the error message with the link to the docs with the most common causes for the worker allocation failed error: https://roadrunner.dev/docs/known-issues-allocate-timeout/2.x/en. Feel free to add your cases here :)
  • ✏️ CLI: New CLI command to pause, resume, destroy and list Jobs. FR, (thanks @hustlahusky)
  • ✏️ Velox: New configuration option: folder, which can be used to specify the folder with the plugin in the repository. (thanks, @darkweak)
  • ✏️ Velox: Velox now respects the plugin's replace directives. (thanks, @darkweak)
  • ✏️ Cache plugin: RR now uses a great cache (RFC 7234) plugin made by @darkweak
  • ✏️ [BETA] Kafka plugin: New Kafka driver for the Jobs plugin. FR, (thanks, @Smolevich, @Baiquette)
  • ✏️ Temporal plugin: Temporal now uses a new reset mechanism to prevent WF worker restarts on activity worker failure
  • ✏️ Temporal plugin: Temporal plugin now supports a TSL-based authentication with the key and certificate.

Configuration:

temporal:
  tls:
    key: path/to/key
    cert: path/to/cert
  # other options

🩹 Fixes:

  • 🐛 Server plugin: use the allocate_timeout from the pool to wait for the tcp/unix socket connection from the PHP worker. BUG, (thanks @Warxcell)
  • 🐛 Velox: Fix panic when no github option is specified in the configuration.
  • 🐛 SDK: Use pool.allocate_timeout for the sockets/tcp relays instead of silently used of relay_timeout.

🧹 Chore:

  • 🧽 Logger plugin: use the parsable timestamp format for the raw logger mode. CH, (thanks @ilsenem)

🔧 Maintenance:

  • Temporal GO-SDK and API updated to the latest versions.
  • All plugins, including RR, now use Go 1.19