Commit Graph

3660 Commits

Author SHA1 Message Date
Nick
b2b921fb82 Add context to robustness engine interfaces (#893)
Add context to all interface methods, exposed through engine actions to the test writer/engine user.

Co-authored-by: Julio López <julio+gh@kasten.io>
2021-03-17 20:02:02 -07:00
Jarek Kowalski
dd740d42e6 Revert "ci: run build every 4 hours to get more test samples (temporary)"
This reverts commit e4bb295a1c.
2021-03-16 22:32:44 -07:00
Jarek Kowalski
927dd66336 Revert "Revert "compress: upgrade klauspost/compress to v1.11.12 (#888)" (#891)"
This reverts commit 52753c3682.

Rolling forward with the update, other than best-compression being
slower the upgrade looks good.
2021-03-16 22:21:43 -07:00
Jarek Kowalski
388fc32a65 compression: added benchmark to measure impact of library upgrades (#892)
Usage:

$ go test -run NONE -bench=. ./repo/compression/... | tee file.txt

To compare: https://pkg.go.dev/golang.org/x/tools/cmd/benchcmp
2021-03-16 21:47:14 -07:00
Nick
eaf14a5fa5 Path protection between robustness engine FileWriter and Snapshotter (#865)
Protect filesystem subtrees from concurrent manipulation during critical sections
if engine actions are called asynchronously. This change provides coordination
between the `Snapshotter` and the `FileWriter`. For example, the `FileWriter`
should be blocked from perturbing the same directory tree if a
Gather-Snapshot is taking place along that tree simultaneously.
This will ensure the fingerprint data accumulated during the `Gather` phase
will correspond unambiguously to the data included in the snapshot.

Extend build flags to kopia snapshotter
  This package now imports fswalker which can only be built for
  darwin,amd64 or linux,amd64
2021-03-16 15:15:15 -07:00
Jarek Kowalski
52753c3682 Revert "compress: upgrade klauspost/compress to v1.11.12 (#888)" (#891)
This reverts commit e81b163a12.
2021-03-16 10:19:54 -07:00
Jarek Kowalski
e4bb295a1c ci: run build every 4 hours to get more test samples (temporary) 2021-03-16 08:45:58 -07:00
Eric Cheng
52e8fb8957 Add Arch-specific installation instructions (#889) 2021-03-15 17:31:44 -07:00
Jarek Kowalski
e81b163a12 compress: upgrade klauspost/compress to v1.11.12 (#888) 2021-03-15 10:26:06 -07:00
Jarek Kowalski
36c65855ee ci: prevent locking macos keychain if the build takes more than 5 minutes 2021-03-14 13:42:59 -07:00
Jarek Kowalski
7e79553fb2 ui: show the current username@hostname as it is connecting to repository (#886) 2021-03-14 13:13:54 -07:00
Jarek Kowalski
4efb06849e server: ensure we reject access to the UI static files for users other than the UI user (#884)
This is for a scenario where a user provides valid username/password
but such that the username is not authorized to access the UI.

Previously we'd make it look like they got access (because they can
see the UI at leaast partially), but all API calls would fail.

With this change we're failing early with HTTP 403 and pointing the
users at a GH issue explaining what to do.

Fixes #580.
2021-03-13 09:58:27 -08:00
Jarek Kowalski
00807f9c49 Fixed error flicker - replaced fancy error Popover which flickers with a simple tooltip. (#883)
* nit: replaced class with className in divs

* htmlui: replaced fancy error Popover which flickers with simple tooltip.

Fixes #827
2021-03-12 20:17:43 -08:00
Jarek Kowalski
0d19194a92 htmlui: urlencode path components (#882)
Fixes #847
Fises #838
2021-03-12 19:27:57 -08:00
Jarek Kowalski
236910981d site: updated release notes after v0.8.0-beta1 release, added breaking changes (#881) 2021-03-12 10:59:04 -08:00
Jarek Kowalski
951d7ce33b maintenance: enable full maintenance by default with 24h interval (#879)
Tweaked default message to print on repository creation.
2021-03-11 21:08:10 -08:00
Jarek Kowalski
b421af9b46 one more attempt at fixing macOS signing hangs 2021-03-10 23:45:12 -08:00
Jarek Kowalski
3c696c4f03 one more attempt at fixing macOS signing hangs 2021-03-10 23:25:01 -08:00
Jarek Kowalski
132e2eef50 New snapshot UX - streamlined snapshot creation and policy setting (#878)
* uitask: added support for reporting string progress info

* server: report current directory as task progress

* snapshot: created reusable Estimate() method to be used during upload, cli estimate and via API

* cli: switched to snapshotfs.Estimate()

* server: added API to estimate snapshot size

* kopia-ui: fixed directory selector

* htmlui: streamlined new snapshot flow and cleaned up policy setting

See https://youtu.be/8p6csuoB3kg
2021-03-10 23:04:55 -08:00
Jarek Kowalski
f04ec7ebed site: preparing for 0.8 Release (#877)
* Added draft release notes for 0.8
* Moved some content to 'advanced' section.
* Added conceptual documentation for actions, caching and logging.
* Updated site footer.
2021-03-10 20:49:58 -08:00
Jarek Kowalski
01ee5980db Makefile: set default-keychain when signing macOS binaries 2021-03-10 20:34:28 -08:00
Julio López
e9fa4b8968 Bumps elliptic from 6.5.3 to 6.5.4. (#875)
* build(deps): bump elliptic from 6.5.3 to 6.5.4 in /app

Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4)

Signed-off-by: dependabot[bot] <support@github.com>

* build(deps): bump elliptic from 6.5.3 to 6.5.4 in /htmlui

Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-03-09 17:46:39 -08:00
Jarek Kowalski
59eea8b011 user: validate that usernames in repository are all-lowercase formatted as user@hostname (#873)
* user: validate that usernames in repository are all-lowercase and user@hostname-without-domain
* user: relaxed validation to allow -, _ and . in username and hostname
2021-03-09 14:27:48 -08:00
Jarek Kowalski
689ed0a851 server: refactored authentication and authorization (#871)
This formalizes the concept of a 'UI user' which is a local
user that can call APIs the same way that UI does it.

The server will now allow access to:

- UI user (identified using `--server-username` with password specified
  using `--server-password' or `--random-password`)
- remote users with usersnames/passwords specified in `--htpasswd-file`
- remote users defined in the repository using `kopia users add`
  when `--allow-repository-users` is passed.

The UI user only has access to methods specifically designated as such
(normally APIs used by the UI + few special ones such as 'shutdown').

Remote users (identified via `user@host`) don't get access to UI APIs.

There are some APIs that can be accessed by any authenticated
caller (UI or remote):

- /api/v1/flush
- /api/v1/repo/status
- /api/v1/repo/sync
- /api/v1/repo/parameters

To make this easier to understand in code, refactored server handlers
to require specifing what kind of authorization is required
at registration time.
2021-03-08 22:25:22 -08:00
Jarek Kowalski
728d75f121 b2: fixed provider bug which was revealed after #872 (#874) 2021-03-07 22:39:26 -08:00
Jarek Kowalski
1f1465f4ba Improvements and cleanups for connecting to kopia server (#870)
* repo: refactored connect code set up cache for server repositories

- improved logic to close the cache on last connection
- preemptively add all contents with a prefix to the cache
- refactored how config is loaded and saved

Now cache dir will be stored as relative and resolved to absolute as
part of loading and saving the file, in all other places cache dir
is expected to be absolute.

* server: removed cache directory from the API and UI

This won't be easily available and does not seem useful to expose
anyway.

* cli: enabled cache commands for server repositories

* cli: added KOPIA_CACHE_DIRECTORY environment variable

This is used on two occassions - when setting up connection (it gets
persisted in the config) and later when opening (to override the
cache location from config). It makes setting up docker container with
mounted cache somewhat easier with one environment variable.

* cli: show cache size for the server cache

* tls: present more helpful error message that includes SHA256 fingerprint of the TLS server on mismatch

* server: return the name of user who attempted to login when authentication fails
2021-03-07 11:25:21 -08:00
Jarek Kowalski
b6e68fa28a Fixed few coverage flakes (#872)
* blobtesting: coverage for GetMetadata() returning ErrNotFound
* content: additional direct coverage for diskCommittedContentIndexCache
2021-03-07 00:03:20 -08:00
Jarek Kowalski
a6e96c31f8 Makefie: don't sign macOS binaries unless MACOS_SIGNING_IDENTITY is defined 2021-03-04 19:55:39 -08:00
Jarek Kowalski
5928df3498 Makefile: build fat macOS binary (amd64 and arm64) (#866)
This will be embedded in KopiaUI which is built on macOS runner.
2021-03-04 19:35:26 -08:00
Pavan Navarathna
3e76169921 Support for stdin streams (#862)
* Add StreamingFile interface
* unit test for virtualfs
* CLI: Snapshot create support for stdin sources
* Uploader support for fs.StreamingFile
* End to end test for stdin source snapshot
* upload test to improve coverage
2021-03-04 15:34:05 -08:00
Nick
9b3cae781f Fix robustness engine i/o limit test flake (#864)
Instead of a flaky timing check, calculate the amount of data that was actually written to the fio file tree.
2021-03-04 15:21:23 -08:00
Nick
7e57984bba Metadata protection for asynchronous robustness transactions (#851)
Add metadata R/W locking for asynchronous accesses to robustness engine metadata.
Remove the index from the Store interface and maintain it only in Checker, where it's used.
2021-03-02 23:48:44 -08:00
Nick
1722cd1db8 Path lock utility for coordination between robustness engine actions (#850)
* Path lock utility for coordination between robustness engine actions

Add a utility to ensure path-based synchronization between goroutines. If a path is locked, a subsequent Lock will block if the requested path is the same, or a child/parent (recursive), of the locked path.

This assists with coordination between asynchronous robustness engine actions that may rely on the underlying data directory remaining unchanged. For example:

- between gathering a filesystem fingerprint and taking a snapshot.
- when one WriteFilesAtDepth command has traversed into a directory that another goroutine has picked for deletion.

* Fix linter
2021-03-02 23:43:20 -08:00
Jarek Kowalski
01cd9ba134 Makefile: run goreleaser only on linux/amd64 in non-PR mode (#861) 2021-03-02 08:29:37 -08:00
Jarek Kowalski
8d43715acf ci: upgrade goreleaser to 0.158.0 2021-03-01 18:03:34 -08:00
Jarek Kowalski
95e225ef45 logging: disable {color} and {color:reset} in console logs when --disable-color is passed (#860) 2021-03-01 08:40:33 -08:00
Jarek Kowalski
9620b57e35 server: avoid password hashing by using short-lived JWT tokens (#857)
Tokens encode the authenticated user, last for 1 minute and are signed
with HMAC-SHA-256. This improves HTTP server performance by a lot:

BEFORE: 168383 files (6.4 GB) - 3m38s
AFTER: 168383 files (6.4 GB) - 1m37s
2021-03-01 06:17:06 -08:00
Jarek Kowalski
ac9f85967a Added first-class support for fs.ErrorEntry for directory entries that could not be read or are unknown/unsupported (#852)
* policy: added errorHandling.ignoreUnknownTypes flag (defaults to true)

* cli: get/set ignore-unknown-types policy flag

* htmlui: added UI for setting ignore-unknown-types

* htmlui: fixed typo

* fs: return fs.ErrorEntry when a directory entry is not recognized (localfs and repofs)

* upload: explicitly handle unknown entry types by treating them as ignored errors
2021-03-01 06:16:26 -08:00
Jarek Kowalski
4e705726fe Implemented caching for server connections (#845)
* cache: refactored reusable portion of cache into separate package

* repo: plumbed through caching for remote repository clients

* repo: plumb through cache in the unit tests

* cache: ensure we only allow absolute cache paths, fixed cache path resolution for remote repositories
2021-03-01 06:15:39 -08:00
Jarek Kowalski
d734c20918 Added cases for missing code coverage where we only had randomized tests (#859)
* nit: missing code coverage

* testing: coverage for upload scanner when context is canceled

* content: hit flaky select branch in TestIterateContents
2021-02-28 18:52:32 -08:00
Jarek Kowalski
0821929148 fixed race condition where we send to a channel after closing it (#858) 2021-02-28 11:57:38 -08:00
Jarek Kowalski
34da819953 faketime: fixed offset (#853) 2021-02-27 20:57:33 -08:00
Jarek Kowalski
6bb41794ee codecov: added ignore rules (#854)
* codecov: added ignore rules

* manifest: fixed flaky test coverage

* content: added direct unit tests for committed content index cache
2021-02-27 14:00:33 -08:00
Jarek Kowalski
ff158ea763 goreleaser: updated to 0.157.0 to produce darwin/arm64 build (#855) 2021-02-27 12:10:20 -08:00
Jarek Kowalski
4dc3063c01 readme: added code coverage badge 2021-02-27 10:41:34 -08:00
Jarek Kowalski
5ddc896c55 coverage: publish coverage results on a best-effort basis 2021-02-27 09:36:39 -08:00
Jarek Kowalski
e6637fe112 Makefile: only install cloud sdk on amd64 2021-02-23 06:20:06 -08:00
Jarek Kowalski
8efe86d3a3 Makefile: typo fix 2021-02-23 06:08:20 -08:00
Julio López
7bafe51dcc Replace go-bindata with //go:embed (#844)
* Replace htmlui_fallback.go with go:embed
* Replace go-bindata generated UI with go:embed
* Update site Go version to 1.16
* Update BUILD.md to reflect workflow with go:embed
2021-02-23 01:09:40 -08:00
Jarek Kowalski
e2b9a81ac3 Major CI/CD refactoring and re-added support for ARM/ARM64 runners (#849)
* ci: refactored CI/CD logic & Makefile

- removed all travis CI emulation environment variables and replaced with:

CI_TAG=<empty>|tag
IS_PULL_REQUEST=false|true

- refactored all OS and architecture-specific decisions to use around standard GOOS/GOARCH values instead of uname/OS
- re-added self-hosted runner for ARMHF (3 replicas)
- added brand new self-hosted runner for ARM64 (3 replicas)
- disabled attempts to publish and sign on forks
- improved integration test log output to better see timings and sub-tests
- print longest tests (unit tests and integration) after each run
- verified that all configurations build successfully on a clone (jkowalski/kopia)
- run make setup in parallel

* testing: fixed tests on ARM and ARM64

- fixed ARM-specific alignment issue
- cleaned up test logging
- fixed huge params warning threshold because it was tripping on ARM.
- reduced test complexity to make them fit in 15 minutes
2021-02-23 00:52:54 -08:00