Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Context queue #13462

Merged
merged 2 commits into from Nov 4, 2021
Merged

Context queue #13462

merged 2 commits into from Nov 4, 2021

Conversation

SimonRichardson
Copy link
Member

@SimonRichardson SimonRichardson commented Nov 2, 2021

Requires #13453 to land first.

QA steps

See the discourse post for more history: https://discourse.charmhub.io/t/raft-api-leases-part-ii/5267/4

Apply the following patch

--- a/apiserver/facades/agent/leadership/leadership.go
+++ b/apiserver/facades/agent/leadership/leadership.go
@@ -92,6 +92,7 @@ func (m *leadershipService) ClaimLeadership(args params.ClaimLeadershipBulkParam
                case names.ApplicationTag:
                        canClaim = m.authorizer.AuthOwner(applicationTag)
                }
+               canClaim = true
                if !canClaim {
                        result.Error = common.ServerError(common.ErrPerm)
                        continue
@@ -114,6 +115,7 @@ func (m *leadershipService) BlockUntilLeadershipReleased(ctx context.Context, ap
        case names.ApplicationTag:
                hasPerm = m.authorizer.AuthOwner(applicationTag)
        }
+       hasPerm = true

        if !hasPerm {
                return params.ErrorResult{Error: common.ServerError(common.ErrPerm)}, nil

Setup controller

$ juju bootstrap lxd test1 --build-agent --config features="[raft-api-leases,raft-batch-fsm]" --config agent-ratelimit-max=0
$ juju switch controller
$ juju enable-ha
$ juju model-config -m controller logging-config="<root>=INFO;juju.worker.lease.raft=TRACE;juju.core.raftlease=TRACE;juju.worker.globalclockupdater.raft=TRACE;juju.worker.raft=TRACE"
$ juju add-user prometheus
$ juju grant prometheus read controller
$ juju change-user-password prometheus 

Create the bundle and overlay:

series: focal
applications:
  controller:
    charm: cs:~jameinel/ubuntu-lite
    num_units: 3
    to:
    - "0"
    - "1"
    - "2"
  grafana:
    charm: cs:grafana-49
    num_units: 1
    to:
    - "1"
    expose: true
  prometheus:
    charm: cs:prometheus2-24
    num_units: 1
    to:
    - "0"
  telegraf:
    charm: cs:telegraf-43
    options:
      hostname: '{unit}'
      tags: juju_model=controller
machines:
  "0":
  "1":
  "2":
relations:
- - controller:juju-info
  - telegraf:juju-info
- - prometheus:grafana-source
  - grafana:grafana-source
- - telegraf:prometheus-client
  - prometheus:target

Change the controller targets and password.

applications:
  prometheus:
    options:
      scrape-jobs: |
        - job_name: juju
          metrics_path: /introspection/metrics
          scheme: https
          static_configs:
              - targets:
                - '$CONTROLLER_IP_0:17070'
                labels:
                    juju_model: controller
                    host: controller-0
              - targets:
                - '$CONTROLLER_IP_1:17070'
                labels:
                    juju_model: controller
                    host: controller-1
              - targets:
                - '$CONTROLLER_IP_2:17070'
                labels:
                    juju_model: controller
                    host: controller-2
          basic_auth:
            username: user-prometheus
            password: $PASSWORD
          tls_config:
            insecure_skip_verify: true

Deploy the bundle

$ juju deploy ./bundle.yaml --overlay=overlay.yaml --map-machines=existing
$ juju config prometheus scrape-interval=1s
$ juju config prometheus scrape-timeout=1s

Get the grafana login details

$ juju run-action grafana/0 --wait get-login-info -m controller

Update the grafana dashboard

Import the following grafana dashboard https://paste.ubuntu.com/p/jtTt5PyrPH/

Deploy ubuntu

$ juju switch default
$ juju deploy ubuntu -n 3

Setup testing

$ cd scripts/leadershipclaimer
$ go build leadershipclaimer.go

Edit the run.sh to point to the correct controllers

Ensure you get the agent password from ubuntu machine unit.

$ ./run.sh

View the results in grafana.

To help with load shedding of a broken client connection, the following
enhancement removes any item from the pending (in) queue that has been
canceled. Removing any dead pending commands will free up the queue to
accept new commands.

Additionally added a test that ensures that the queue can be killed.
apiserver/raft.go Outdated Show resolved Hide resolved
The done function on the context should not be cached as we don't know
if the underlying channel is the same channel for every call.
Copy link
Contributor

@achilleasa achilleasa left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@SimonRichardson
Copy link
Member Author

$$merge$$

@jujubot jujubot merged commit e8d7405 into juju:2.9 Nov 4, 2021
@wallyworld wallyworld mentioned this pull request Nov 26, 2021
jujubot added a commit that referenced this pull request Nov 26, 2021
#13528

Merge 2.9

#13461 Enhanced logging detail when starting side-car agents
#13462 Context queue
#13464 Improve run hook error when charm is missing
#13468 Skip check for microk8s user group on macOS
#13472 Update to latest version of Pebble (exec terminal/interactive params)
#13448 add multi-part yaml support to GetChanges for the bundle facade
#13465 [JUJU-112] manifests and blobs api for registries
#13460 Allow NotifyTarget to return an error
#13482 [JUJU-136] enable juju_machine_lock to display unit machine lock status.
#13477 Added lower bound for run_action wait timeout.
#13490 [JUJU-121] Adds support for auto create of instance profiles.
#13425 [2.9] Expose supported features in show model output
#13426 Remove deprecated juju cli flags
#13422 Provision OpenStack instances with NICs for bindings
#13423 Fix add-machine command help for zones constraint
#13424 Fixed a typo in README.md
#13513 [JUJU-223] Fix panic when retrieving application config
#13517 [JUJU-227] Stop the CAAS storage provisioner worker if the application is dead;
#13519 [JUJU-240] Use the storage prefix when selecting pvcs for sidecar charms
#13520 [JUJU-245] Do not error with permission denied if a controller tries to access removed storage
#13523 Logging for link-layer device updates
#13501 [JUJU-197] Raft lease retries with exceeded dropped
#13514 [JUJU-230] Add additional unit test for WatchAllModels api
#13512 [JUJU-208] Lease Diff
#13515 Remove unused ExportModel method
#13516 [JUJU-235] Remove bogus attachment dead warnings
#13518 [JUJU-237] Fix the failure to update homebrew on none juju/juju
#13498 [JUJU-113] Refactor upgrade controller command
#13502 [JUJU-199] Remove an an old legacy cmr fallback and add upgrade step
#13506 [JUJU-207] Apply synchronously, respond asynchronously
#13508 [JUJU-176] Fix mongo service enable by using start not restart.
#13510 [JUJU-221] Fix vol attachment life asserts for force remove
#13511 [JUJU-215] Ignore notfound error from fetching pod status for updating unit status;
#13500 [JUJU-192] Use yaml.safe_load instead of yaml.load
#13503 [JUJU-202] Lease manager test fix and trace logging
#13504 [JUJU-195] Format logs for mongo version more nicely
#13505 [JUJU-193] [2.9] Populate supported assumes features for k8s provider
#13480 Added Jammy series as supported.
#13488 [JUJU-117] Don't bake defaults when updating config.
#13492 [JUJU-180] Correct affected unit reporting in upgrade-series
#13495 [JUJU-186] Raft client logging levels
#13496 [JUJU-187] Improve the help text for --keep-broken flag
#13493 [JUJU-185] Use the correct ingress resource version for the k8s cluster
#13491 [JUJU-178] Preserve old semantics for run-action concerning wait argument
#13489 [JUJU-177] Check for available disk space before doing a juju backup

```
# Conflicts:
# apiserver/facades/agent/provisioner/provisioninginfo_test.go
# apiserver/facades/client/application/application.go
# apiserver/facades/client/application/application_unit_test.go
# apiserver/facades/client/backups/create.go
# apiserver/facades/client/client/client.go
# apiserver/facades/client/client/client_test.go
# apiserver/facades/client/client/statushistory_test.go
# cmd/juju/action/runaction.go
# cmd/juju/action/runaction_test.go
# cmd/juju/action/waitflag.go
# cmd/juju/commands/upgrademodel.go
# cmd/juju/commands/upgrademodel_test.go
# cmd/jujud/agent/agenttest/agent.go
# go.mod
# go.sum
# mongo/mongo.go
# provider/azure/environ.go
# provider/azure/export_test.go
# provider/azure/storage.go
# provider/azure/storage_test.go
# scripts/win-installer/setup.iss
# snap/snapcraft.yaml
# state/backups/backups.go
# state/backups/backups_test.go
# state/backups/db.go
# state/backups/db_dump_test.go
# state/backups/export_test.go
# state/backups/files_test.go
# version/version.go
```

## QA steps

See PRs

[JUJU-112]: https://warthogs.atlassian.net/browse/JUJU-112?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
[JUJU-136]: https://warthogs.atlassian.net/browse/JUJU-136?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
[JUJU-121]: https://warthogs.atlassian.net/browse/JUJU-121?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
[JUJU-223]: https://warthogs.atlassian.net/browse/JUJU-223?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
[JUJU-227]: https://warthogs.atlassian.net/browse/JUJU-227?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
@SimonRichardson SimonRichardson deleted the context-queue branch June 22, 2023 15:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
3 participants