Dedicated Game Server Hosting and Scaling for Multiplayer Games on Kubernetes

Overview

Agones logo

go.dev reference GoDoc Go Report Card GitHub release Follow on Twitter

Agones is a library for hosting, running and scaling dedicated game servers on Kubernetes.

Agones, is derived from the Greek word agōn which roughly translates to “contest”, “competition at games” and “gathering”. (source)

Why does this project exist?

Agones replaces usual bespoke or proprietary cluster management and game server scaling solutions with a Kubernetes cluster that includes the Agones custom Kubernetes Controller and matching Custom Resource Definitions for GameServers, Fleets and more.

With Agones, Kubernetes gets native abilities to create, run, manage and scale dedicated game server processes within Kubernetes clusters using standard Kubernetes tooling and APIs. This model also allows any matchmaker to interact directly with Agones via the Kubernetes API to provision a dedicated game server.

For more details on why this project was written, read the announcement blog post.

Major Features

  • Define a single GameServer, and/or large game server Fleets within Kubernetes - either through yaml or via the API
  • Manage GameServer lifecycles - including health checking and connection information.
  • Fleet Autoscaling capabilities that integrate with Kubernetes' native cluster autoscaling
  • Gameserver specific metric exports and dashboards for ops teams

Usage

Documentation can be found on the Agones website.

Get involved

Code of Conduct

Participation in this project comes under the Contributor Covenant Code of Conduct

Reporting Security Issues

To report a security issue for this project, please follow the instructions in the Project Security Policy

Development and Contribution

Please read the contributing guide for directions on submitting Pull Requests to Agones, and community membership governance.

See the Developing, Testing and Building Agones documentation for developing, testing and building Agones from source.

The Release Process documentation displays the project's upcoming release calendar and release process.

Agones is in active development - we would love your help in shaping its future!

This all sounds great, but can you explain Docker and/or Kubernetes to me?

Docker

Kubernetes

Licence

Apache 2.0

Comments
  • sdk arm64 images

    sdk arm64 images

    What type of PR is this?

    Uncomment only one /kind <> line, press enter to put that in a new line, and remove leading whitespace from that line:

    /kind breaking /kind bug /kind cleanup /kind documentation

    /kind feature

    /kind hotfix

    What this PR does / Why we need it: Build sdk image for arm64 hosts Which issue(s) this PR fixes:

    Work on https://github.com/googleforgames/agones/issues/2216

    Special notes for your reviewer:

    kind/feature size/M lgtm approved 
    opened by Ludea 135
  • Adds the first e2e test

    Adds the first e2e test

    This is a sample of one e2e tests for #37 . This first test create a gameserver, waits for readiness, assert some values then finally ping it (send/receive).

    The idea of this PR is to see if the direction is correct, but also I'd like to plug it to cloud builder to see if we can make it works @markmandel I'll need your help on this. ( Can we use your account to provision a cluster for e2e ? How should we proceed ?)

    I would like that we list all tests for gameservers/fleets/allocation, so I can tackled them one by one. (Let's use the ticket #37 )

    Locally with a GKE cluster it works. (I'm having sometimes some timeout with the k8s api, might be from my connection Post https://35.185.224.168/apis/stable.agones.dev/v1alpha1/namespaces/default/gameservers: dial tcp 35.185.224.168:443: i/o timeout)

    Have a spin, I hope you like it.

    kind/feature area/build-tools 
    opened by cyriltovena 77
  • Fix Network Security Group Gameserver rule not applied on AKS cluster

    Fix Network Security Group Gameserver rule not applied on AKS cluster

    /kind cleanup

    What this PR does / Why we need it: Hello

    This PR fixes AKS gameserver network security rule not added to the effective AKS node pool network security group.

    AKS install terraform included a network security group and two network security rules which were not used. This PR follows AKS create cluster documentation by adding the incoming gameserver security rule to the aks-agentpool-******-nsg network security group

    Regards

    kind/cleanup area/operations lgtm size/L approved cla: yes 
    opened by WeetA34 68
  • Fix Fleets RollingUpdate

    Fix Fleets RollingUpdate

    Make sure that GameServers actually are Ready before scaling down inactive GameServerSet.

    What type of PR is this?

    Uncomment only one /kind <> line, hit enter to put that in a new line, and remove leading whitespace from that line:

    /kind breaking

    /kind bug

    /kind cleanup /kind documentation /kind feature /kind hotfix

    What this PR does / Why we need it: If creating new GameServers take more than 30 seconds there is a situation when all GameServers would go down to 0 and all new GameServers would be in a Scheduled state.

    Which issue(s) this PR fixes:

    Closes #1625

    Special notes for your reviewer:

    There are steps to reproduce inline with a ticket. Will create a simple E2E test to make sure this functionality is covered.

    kind/feature lgtm size/L approved cla: yes 
    opened by aLekSer 64
  • Update the GameServerAllocation Specification to remove required/pref…

    Update the GameServerAllocation Specification to remove required/pref…

    What type of PR is this?

    Uncomment only one /kind <> line, press enter to put that in a new line, and remove leading whitespace from that line:

    /kind breaking /kind bug

    /kind cleanup

    /kind documentation /kind feature /kind hotfix

    What this PR does / Why we need it: details can be found here #2146

    Which issue(s) this PR fixes:

    Closes #2146

    Special notes for your reviewer:

    kind/feature size/XXL lgtm approved cla: yes 
    opened by cindy52 62
  • Support graceful termination

    Support graceful termination

    What type of PR is this? /kind feature

    What this PR does / Why we need it: To support terminationGracePeriodSeconds. Terminate only when SIGKILL is received. Currently when terminationGracePeriodSeconds is defined for a gameserver, the agones SDK sidecar terminates immediately when it receives a SIGTERM.

    Which issue(s) this PR fixes:

    Closes #

    Special notes for your reviewer:

    kind/feature size/L approved cla: yes 
    opened by bennetty 62
  • Initial version of EKS terraform config

    Initial version of EKS terraform config

    Add module for EKS cluster. Add documentation and example which uses submodules.

    Disabled agones-system/agones-ping-udp-service for now as it breaks the helm_agones deployment. There is a need to add two more Node Pools ( Worker Groups) for metrics and system with taints.

    Closes #966 .

    kind/feature area/operations lgtm size/L approved 
    opened by aLekSer 59
  • Custom fleet autoscaler resync interval

    Custom fleet autoscaler resync interval

    What type of PR is this? /kind feature

    What this PR does / Why we need it: Add a new property sync to FleetAutoScaler for supporting custom sync interval. See more details in: #1955

    Which issue(s) this PR fixes:

    Closes #1955

    Special notes for your reviewer: None

    kind/feature lgtm size/XL approved cla: yes 
    opened by jie-bao 56
  • Cpp sdk cmake

    Cpp sdk cmake

    This changeset provides CMake scripts for building C++ SDK that works across Windows, Linux and macOS. Old Makefile will be removed after migrating examples/cpp-simple to CMake. Issue: #134

    kind/feature area/build-tools area/user-experience 
    opened by dsazonoff 56
  • SDK Conformance testing

    SDK Conformance testing

    Add test mode for SDK-server. Local SDK server (Sidecar) now could record client requests. Added test clients and make targets to test Golang and NodeJS SDKs.

    For #672.

    kind/feature area/tests 
    opened by aLekSer 50
  • Add allocator service example and documentation

    Add allocator service example and documentation

    This is a service that allocates a game server from a fleet using the Agones API. It then returns the IP address and port of the allocated game server. I cleaned up the notes I took while making it, and maybe they might provide some useful documentation for people who are looking to programmatically allocate game servers.

    Some things I'm not sure about:

    Is the document create_allocator_service.md more of a Quickstart or a Guide?
    The service in the example uses a container in my public Docker registry...I don't mind, but it might be better off in a repo controlled by this project.
    Step 12 and onward of create_allocator_service might be out of scope.
    The error handling in main.go seem inadequate to me...but maybe it is ok?
    

    Please let me know if this would be useful, and if so, what changes should be made.

    kind/documentation area/examples 
    opened by slartibaartfast 50
  • Shows missing

    Shows missing "/usr/local/bin/locust" after building container

    What happened: After building container, when I run this command "docker run --rm --network="host" -e "LOCUST_FILE=gameserver_allocation.py" -e "TARGET_HOST=http://127.0.0.1:8001" -p 8089:8089 locust-files:latest", it is showing "missing /usr/local/bin/locust"

    What you expected to happen: I expect locust tests running on game server allocation.

    How to reproduce it (as minimally and precisely as possible): These is the output of all commands I run on Windows: `PS D:\Projects<PROJECT>\git\test-load-agones\agones\test\load> docker build -t locust-files . [+] Building 2.4s (12/12) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 32B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/hopsoft/graphite-statsd:latest 2.2s => [auth] hopsoft/graphite-statsd:pull token for registry-1.docker.io 0.0s => [internal] load build context 0.0s => => transferring context: 170B 0.0s => [1/6] FROM docker.io/hopsoft/[email protected]:40d36394594e4d0a6d0497e6609c48b652b0a3e230b735dcd5b140fe76daa 0.0s => CACHED [2/6] RUN pip install locust 0.0s => CACHED [3/6] RUN mkdir /etc/service/locust 0.0s => CACHED [4/6] COPY /locust-files ./ 0.0s => CACHED [5/6] COPY /run.sh /etc/service/locust/run 0.0s => CACHED [6/6] RUN chmod +x /etc/service/locust/run 0.0s => exporting to image 0.1s => => exporting layers 0.0s => => writing image sha256:b788dd11d570472ecdbc8be25c61e11454790e0c4c2ca642412b9f263000e477 0.0s => => naming to docker.io/library/locust-files 0.0s PS D:\Projects\PROJECT\git\test-load-agones\agones\test\load> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES PS D:\Projects\PROJECT\git\test-load-agones\agones\test\load> docker ps --all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 41df2a23f4da docker/getting-started "/docker-entrypoint.…" 7 days ago Exited (0) 6 hours ago compassionate_greider PS D:\Projects\PROJECT\git\test-load-agones\agones\test\load> docker build -t locust-files . [+] Building 1.2s (11/11) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 32B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/hopsoft/graphite-statsd:latest 1.1s => [1/6] FROM docker.io/hopsoft/[email protected]:40d36394594e4d0a6d0497e6609c48b652b0a3e230b735dcd5b140fe76daa 0.0s => [internal] load build context 0.0s => => transferring context: 170B 0.0s => CACHED [2/6] RUN pip install locust 0.0s => CACHED [3/6] RUN mkdir /etc/service/locust 0.0s => CACHED [4/6] COPY /locust-files ./ 0.0s => CACHED [5/6] COPY /run.sh /etc/service/locust/run 0.0s => CACHED [6/6] RUN chmod +x /etc/service/locust/run 0.0s => exporting to image 0.1s => => exporting layers 0.0s => => writing image sha256:b788dd11d570472ecdbc8be25c61e11454790e0c4c2ca642412b9f263000e477 0.0s => => naming to docker.io/library/locust-files 0.0s PS D:\Projects\PROJECT\git\test-load-agones\agones\test\load> docker ps --all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES PS D:\Projects\PROJECT\git\test-load-agones\agones\test\load> docker images REPOSITORY TAG IMAGE ID CREATED SIZE locust-files latest b788dd11d570 6 hours ago 1.26GB docker/getting-started latest cb90f98fd791 5 months ago 28.8MB PS D:\Projects\PROJECT\git\test-load-agones\agones\test\load> docker run --rm --network="host" -e "LOCUST_FILE=gameserver_allocation.py" -e "TARGET_HOST=http://127.0.0.1:8001" -p 8089:8089 locust-files:latest WARNING: Published ports are discarded when using host network mode *** Running /etc/my_init.d/00_regen_ssh_host_keys.sh... *** Running /etc/my_init.d/01_conf_init.sh... *** Running /etc/rc.local... *** Booting runit daemon... *** Runit started as PID 15 /usr/local/bin/locust -f gameserver_allocation.py --host=http://127.0.0.1:8001 ./run: line 17: /usr/local/bin/locust: No such file or directory Sep 21 10:46:10 docker-desktop syslog-ng[20]: syslog-ng starting up; version='3.5.6' 2022/09/21 10:46:10 [I] Starting Grafana 2022/09/21 10:46:10 [I] Version: master, Commit: NA, Build date: 1970-01-01 00:00:00 +0000 UTC 2022/09/21 10:46:10 [I] Configuration Info Config files: [0]: /usr/share/grafana/conf/defaults.ini [1]: /etc/grafana/grafana.ini Paths: home: /usr/share/grafana data: /usr/share/grafana/data logs: /var/log/grafana

    2022/09/21 10:46:10 [I] Database: sqlite3 2022/09/21 10:46:10 [I] Migrator: Starting DB migration 2022/09/21 10:46:10 [I] Migrator: exec migration id: create migration_log table 2022/09/21 10:46:10 [I] Migrator: exec migration id: create user table 2022/09/21 10:46:10 [I] Migrator: exec migration id: add unique index user.login 2022/09/21 10:46:10 [I] Migrator: exec migration id: add unique index user.email 2022/09/21 10:46:10 [I] Migrator: exec migration id: drop index UQE_user_login - v1 2022/09/21 10:46:10 [I] Migrator: exec migration id: drop index UQE_user_email - v1 2022/09/21 10:46:10 [I] Migrator: exec migration id: Rename table user to user_v1 - v1 2022/09/21 10:46:10 [I] Migrator: exec migration id: create user table v2 2022/09/21 10:46:10 [I] Migrator: exec migration id: create index UQE_user_login - v2 2022/09/21 10:46:10 [I] Migrator: exec migration id: create index UQE_user_email - v2 2022/09/21 10:46:10 [I] Migrator: exec migration id: copy data_source v1 to v2 2022/09/21 10:46:10 [I] Migrator: exec migration id: Drop old table user_v1 2022/09/21 10:46:10 [I] Migrator: exec migration id: create temp user table v1-7 2022/09/21 10:46:10 [I] Migrator: exec migration id: create index IDX_temp_user_email - v1-7 2022/09/21 10:46:10 [I] Migrator: exec migration id: create index IDX_temp_user_org_id - v1-7 2022/09/21 10:46:10 [I] Migrator: exec migration id: create index IDX_temp_user_code - v1-7 2022/09/21 10:46:10 [I] Migrator: exec migration id: create index IDX_temp_user_status - v1-7 2022/09/21 10:46:10 [I] Migrator: exec migration id: create star table 2022/09/21 10:46:10 [I] Migrator: exec migration id: add unique index star.user_id_dashboard_id 2022/09/21 10:46:10 [I] Migrator: exec migration id: create org table v1 2022/09/21 10:46:10 [I] Migrator: exec migration id: create index UQE_org_name - v1 2022/09/21 10:46:10 [I] Migrator: exec migration id: create org_user table v1 2022/09/21 10:46:10 [I] Migrator: exec migration id: create index IDX_org_user_org_id - v1 2022/09/21 10:46:10 [I] Migrator: exec migration id: create index UQE_org_user_org_id_user_id - v1 2022/09/21 10:46:10 [I] Migrator: exec migration id: copy data account to org 2022/09/21 10:46:10 [I] Migrator: skipping migration id: copy data account to org, condition not fulfilled 2022/09/21 10:46:10 [I] Migrator: exec migration id: copy data account_user to org_user 2022/09/21 10:46:10 [I] Migrator: skipping migration id: copy data account_user to org_user, condition not fulfilled 2022/09/21 10:46:10 [I] Migrator: exec migration id: Drop old table account 2022/09/21 10:46:10 [I] Migrator: exec migration id: Drop old table account_user 2022/09/21 10:46:10 [I] Migrator: exec migration id: create dashboard table 2022/09/21 10:46:11 [I] Migrator: exec migration id: add index dashboard.account_id 2022/09/21 10:46:11 [I] Migrator: exec migration id: add unique index dashboard_account_id_slug 2022/09/21 10:46:11 [I] Migrator: exec migration id: create dashboard_tag table 2022/09/21 10:46:11 [I] Migrator: exec migration id: add unique index dashboard_tag.dasboard_id_term 2022/09/21 10:46:11 [I] Migrator: exec migration id: drop index UQE_dashboard_tag_dashboard_id_term - v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: Rename table dashboard to dashboard_v1 - v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: create dashboard v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: create index IDX_dashboard_org_id - v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: create index UQE_dashboard_org_id_slug - v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: copy dashboard v1 to v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: drop table dashboard_v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: alter dashboard.data to mediumtext v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: create data_source table 2022/09/21 10:46:11 [I] Migrator: exec migration id: add index data_source.account_id 2022/09/21 10:46:11 [I] Migrator: exec migration id: add unique index data_source.account_id_name 2022/09/21 10:46:11 [I] Migrator: exec migration id: drop index IDX_data_source_account_id - v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: drop index UQE_data_source_account_id_name - v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: Rename table data_source to data_source_v1 - v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: create data_source table v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: create index IDX_data_source_org_id - v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: create index UQE_data_source_org_id_name - v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: copy data_source v1 to v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: Drop old table data_source_v1 #2 2022/09/21 10:46:11 [I] Migrator: exec migration id: Add column with_credentials 2022/09/21 10:46:11 [I] Migrator: exec migration id: create api_key table 2022/09/21 10:46:11 [I] Migrator: exec migration id: add index api_key.account_id 2022/09/21 10:46:11 [I] Migrator: exec migration id: add index api_key.key 2022/09/21 10:46:11 [I] Migrator: exec migration id: add index api_key.account_id_name 2022/09/21 10:46:11 [I] Migrator: exec migration id: drop index IDX_api_key_account_id - v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: drop index UQE_api_key_key - v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: drop index UQE_api_key_account_id_name - v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: Rename table api_key to api_key_v1 - v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: create api_key table v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: create index IDX_api_key_org_id - v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: create index UQE_api_key_key - v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: create index UQE_api_key_org_id_name - v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: copy api_key v1 to v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: Drop old table api_key_v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: create dashboard_snapshot table v4 2022/09/21 10:46:11 [I] Migrator: exec migration id: drop table dashboard_snapshot_v4 #1 2022/09/21 10:46:11 [I] Migrator: exec migration id: create dashboard_snapshot table v5 #2 2022/09/21 10:46:11 [I] Migrator: exec migration id: create index UQE_dashboard_snapshot_key - v5 2022/09/21 10:46:11 [I] Migrator: exec migration id: create index UQE_dashboard_snapshot_delete_key - v5 2022/09/21 10:46:11 [I] Migrator: exec migration id: create index IDX_dashboard_snapshot_user_id - v5 2022/09/21 10:46:11 [I] Migrator: exec migration id: alter dashboard_snapshot to mediumtext v2 2022/09/21 10:46:11 [I] Migrator: exec migration id: create quota table v1 2022/09/21 10:46:11 [I] Migrator: exec migration id: create index UQE_quota_org_id_user_id_target - v1 2022/09/21 10:46:11 [I] Created default admin user: admin 2022/09/21 10:46:11 [I] Listen: http://0.0.0.0:3000 /usr/local/bin/locust -f gameserver_allocation.py --host=http://127.0.0.1:8001 ./run: line 17: /usr/local/bin/locust: No such file or directory /usr/local/bin/locust -f gameserver_allocation.py --host=http://127.0.0.1:8001 ./run: line 17: /usr/local/bin/locust: No such file or directory /usr/local/bin/locust -f gameserver_allocation.py --host=http://127.0.0.1:8001 ./run: line 17: /usr/local/bin/locust: No such file or directory`

    Anything else we need to know?:

    Environment: WINDOWS

    • Agones version:
    • Kubernetes version (use kubectl version):{ "clientVersion": { "major": "1", "minor": "25", "gitVersion": "v1.25.0", "gitCommit": "a866cbe2e5bbaa01cfd5e969aa3e033f3282a8a2", "gitTreeState": "clean", "buildDate": "2022-08-23T17:44:59Z", "goVersion": "go1.19", "compiler": "gc", "platform": "windows/amd64" }, "kustomizeVersion": "v4.5.7", "serverVersion": { "major": "1", "minor": "22+", "gitVersion": "v1.22.11-eks-18ef993", "gitCommit": "b9628d6d3867ffd84c704af0befd31c7451cdc37", "gitTreeState": "clean", "buildDate": "2022-07-06T18:06:23Z", "goVersion": "go1.16.15", "compiler": "gc", "platform": "linux/amd64" } }
    • Cloud provider or hardware configuration: AWS
    • Install method (yaml/helm): yaml
    • Troubleshooting guide log(s):
    • Others:
    kind/bug 
    opened by satishdsb 0
  • Upgrade Go version to 1.19.1

    Upgrade Go version to 1.19.1

    What type of PR is this?

    Uncomment only one /kind <> line, press enter to put that in a new line, and remove leading whitespace from that line:

    /kind breaking /kind bug

    kind cleanup

    /kind documentation /kind feature /kind hotfix

    What this PR does / Why we need it: Upgrade go version to 1.19.1 and bump the example images version

    Which issue(s) this PR fixes:

    Closes #

    Special notes for your reviewer:

    size/XXL do-not-merge/work-in-progress 
    opened by gongmax 2
  • Implemented PodDisruptionBudget on relevant deployments

    Implemented PodDisruptionBudget on relevant deployments

    What type of PR is this?

    Uncomment only one /kind <> line, press enter to put that in a new line, and remove leading whitespace from that line:

    /kind breaking /kind bug /kind cleanup /kind documentation

    /kind feature

    /kind hotfix

    What this PR does / Why we need it: Added (optional) PodDisruptionBudget creation for the ping and allocator deployment. Disabled by default. Will allow for better management of voluntary disruptions.

    Which issue(s) this PR fixes: N/A

    Special notes for your reviewer: N/A

    kind/feature size/M 
    opened by valentintorikian 8
  • Have a configurable restart threshold for CrashLoopBackOff Pods backing a GS

    Have a configurable restart threshold for CrashLoopBackOff Pods backing a GS

    Is your feature request related to a problem? Please describe. We are running into an interesting issue where when a GS backing Pod is provisioned the container sandbox is not properly initialized (IPAM because of an IPAM failure for example). This cause our GameServer to crash because of various network related issues (eg: DNS resolution failure, liveness/readiness proble failures).

    The solution we currently employ is that we manually go in the cluster, and terminate the CrashLoopBackOff Pods, this trigger a recreation of the Pods by agones and solves the sandbox initialization issue.

    Describe the solution you'd like Have the GameServer controller have a configurable threshold for amount of time a GS backing Pod has restarted before recreating a brand new Pod.

    Describe alternatives you've considered N/A

    Additional context N/A

    kind/feature 
    opened by valentintorikian 0
  • Context has canceled bug Allocate will retry

    Context has canceled bug Allocate will retry

    pkg/gameserverallocations/allocator.go 442 lines

    func (c *Allocator) allocate(ctx context.Context, gsa *allocationv1.GameServerAllocation) (*agonesv1.GameServer, error) {
    	// creates an allocation request. This contains the requested GameServerAllocation, as well as the
    	// channel we expect the return values to come back for this GameServerAllocation
    	req := request{gsa: gsa, response: make(chan response)}
    
    	// this pushes the request into the batching process
    	c.pendingRequests <- req
    
    	select {
    	case res := <-req.response: // wait for the batch to be completed
    		return res.gs, res.err
    	case <-ctx.Done():
    -               return nil, errors.New("shutting down")
    +               return nil, ErrTotalTimeoutExceeded // or new error state to stop retry
    	}
    }
    

    What happened: the context is canceled by kill signal, but allocateFromLocalCluster still retry.

    What you expected to happen: return ErrTotalTimeoutExceeded when context is canceled.

    How to reproduce it (as minimally and precisely as possible):

    Anything else we need to know?:

    Environment:

    • Agones version: latest
    • Kubernetes version (use kubectl version): N/A
    • Cloud provider or hardware configuration:N/A
    • Install method (yaml/helm):N/A
    • Troubleshooting guide log(s):N/A
    • Others:N/A
    kind/bug 
    opened by alvin-7 0
Releases(v1.26.0)
Owner
GoogleForGames
GoogleForGames
RPC Network Library for Multiplayer Games

Game NET - A Simple RPC Network Library (C++11) Write a simple server / client RPC system in just 10+20 lines of code. Write a multiplayer game with c

Spacerat 74 Aug 23, 2022
Multiplayer ludo game made in Unity

LUDO Multiplayer ludo game made in Unity This a multi-plaayer game. But due to lack of budget I am not able to make it online multi-player. So users h

Soumavo Dey 25 Aug 20, 2022
This is a list of different open-source video games and commercial video games open-source remakes.

This is a list of different open-source video games and commercial video games open-source remakes.

Ivan Bobev 103 Sep 12, 2022
Multiplayer Voxel Survival in C99, includes a badly written implementation of LISP

Imagine a mix between Minecraft, Quake ]I[ and Emacs. Apart from that there is no clear plan for this game, just a bunch of ideas that hopefully will turn out to be fun. Some of these are stored here in this repo, others have been talked about on Twitch during dev streams.

Ben 75 Sep 11, 2022
Advanced modding framework for multiplayer modifications

A suite of tools and libraries to accelerate multi-player modification development.

MafiaHub 26 Sep 2, 2022
Mod that adds multiplayer to Tales of Arise

Tales of Arise: Local Co-Op Mod Mod that adds multiplayer to Tales of Arise For progress, see Milestones. Installing Extract files to the game data fo

Eusthron 42 Sep 10, 2022
Multiplayer experience for Mafia: Definitive Edition

Mafia: Definitive Edition Multiplayer! Brought to you by @Segfault, @zaklaus, @DavoSK, and other contributors! Introduction This is a multiplayer mod

MafiaHub 27 Sep 8, 2022
Distributed server for social and realtime games and apps.

Distributed server for social and realtime games and apps. Features Users - Register/login new users via social networks, email, or device ID. Storage

Heroic Labs 6.3k Sep 19, 2022
Game engine behind Sea Dogs, Pirates of the Caribbean and Age of Pirates games.

Game engine behind Sea Dogs, Pirates of the Caribbean and Age of Pirates games.

Storm Devs 647 Sep 15, 2022
Open-source, cross-platform, C++ game engine for creating 2D/3D games.

GamePlay v3.0.0 GamePlay is an open-source, cross-platform, C++ game framework/engine for creating 2D/3D mobile and desktop games. Website Wiki API De

gameplay3d 3.8k Sep 21, 2022
A flutter package for making game levels map like candy crush or similar games using flutter with ability to be horizontal or vertical

Game Levels Scrolling Map A package for making game levels map like candy crush or similar games using flutter with ability to be horizontal or vertic

Mohamed Sayed 11 Aug 6, 2022
C++ Library to connect games with Game Jolt

Game Jolt API C++ Library Game Jolt is a host for free independently developed computer games. As a gamer you are able to play every game on this site

Martin Mauersics 8 Jun 18, 2022
Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve external game process read/write with minimum footprint.

Launcher Abuser Stealthy way to hijack the existing game process handle within the game launcher (currently supports Steam and Battle.net). Achieve ex

Ricardo Nacif 78 Aug 22, 2022
Game Boy, Game Boy Color, and Game Boy Advanced Emulator

SkyEmu SkyEmu is low level cycle accurate GameBoy, GameBoy Color and Game Boy Advance emulator that I have been developing in my spare time. Its prima

Sky 207 Sep 19, 2022
Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World.

OpenXRay OpenXRay is an improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World. S

null 2.1k Sep 20, 2022
An open source implementation of the dark souls 3 game server.

What is this project? An open source implementation of the dark souls 3 game server. Idealistically made for the purpose of allow better alternatives

Tim Leonard 522 Sep 12, 2022
A repo of game server configuration files used by LinuxGSM

Game Server Config Files Note: This repo is very new and currently missing most config files. More will be added over time. This is a repo of config f

Game Server Managers 227 Sep 20, 2022
An open source implementation of the dark souls 2 game server.

WARNING: This is non-functional, its an initial branch from ds3os. What is this project? An open source implementation of the dark souls 2 game server

Tim Leonard 38 Sep 18, 2022
OGRE is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware.

OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware. The class library abstracts all the details of using the underlying system libraries like Direct3D and OpenGL and provides an interface based on world objects and other intuitive classes.

null 3k Sep 24, 2022