locking

package
v0.10.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 28, 2019 License: Apache-2.0 Imports: 5 Imported by: 0

Documentation

Overview

Copyright 2017 HootSuite Media Inc.

Licensed under the Apache License, Version 2.0 (the License); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Modified hereafter by contributors to runatlantis/atlantis.

Package locking handles locking projects when they have in-progress runs.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Backend

type Backend interface {
	TryLock(lock models.ProjectLock) (bool, models.ProjectLock, error)
	Unlock(project models.Project, workspace string) (*models.ProjectLock, error)
	List() ([]models.ProjectLock, error)
	GetLock(project models.Project, workspace string) (*models.ProjectLock, error)
	UnlockByPull(repoFullName string, pullNum int) ([]models.ProjectLock, error)
}

Backend is an implementation of the locking API we require.

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client is used to perform locking actions.

func NewClient

func NewClient(backend Backend) *Client

NewClient returns a new locking client.

func (*Client) GetLock

func (c *Client) GetLock(key string) (*models.ProjectLock, error)

GetLock attempts to get the lock stored at key. If successful, a pointer to the lock will be returned. Else, the pointer will be nil. An error will only be returned if there was an error getting the lock (i.e. not if there was no lock).

func (*Client) List

func (c *Client) List() (map[string]models.ProjectLock, error)

List returns a map of all locks with their lock key as the map key. The lock key can be used in GetLock() and Unlock().

func (*Client) TryLock

func (c *Client) TryLock(p models.Project, workspace string, pull models.PullRequest, user models.User) (TryLockResponse, error)

TryLock attempts to acquire a lock to a project and workspace.

func (*Client) Unlock

func (c *Client) Unlock(key string) (*models.ProjectLock, error)

Unlock attempts to unlock a project and workspace. If successful, a pointer to the now deleted lock will be returned. Else, that pointer will be nil. An error will only be returned if there was an error deleting the lock (i.e. not if there was no lock).

func (*Client) UnlockByPull

func (c *Client) UnlockByPull(repoFullName string, pullNum int) ([]models.ProjectLock, error)

UnlockByPull deletes all locks associated with that pull request.

type Locker

type Locker interface {
	TryLock(p models.Project, workspace string, pull models.PullRequest, user models.User) (TryLockResponse, error)
	Unlock(key string) (*models.ProjectLock, error)
	List() (map[string]models.ProjectLock, error)
	UnlockByPull(repoFullName string, pullNum int) ([]models.ProjectLock, error)
	GetLock(key string) (*models.ProjectLock, error)
}

type TryLockResponse

type TryLockResponse struct {
	// LockAcquired is true if the lock was acquired from this call.
	LockAcquired bool
	// CurrLock is what project is currently holding the lock.
	CurrLock models.ProjectLock
	// LockKey is an identified by which to lookup and delete this lock.
	LockKey string
}

TryLockResponse results from an attempted lock.

Directories

Path Synopsis
matchers
Code generated by pegomock.
Code generated by pegomock.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL