aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2023-04-18 12:14:13 +0200
committerAlex Auvolat <alex@adnab.me>2023-10-18 12:03:11 +0200
commit7011b71fbd782e199417ce9afa44a8c220885b4a (patch)
tree4fc1acd135f3fbc415259f5fb6499afa78030934
parenta5e8ffeb63a193e5b0e020e4c014687e57f85c23 (diff)
downloadgarage-7011b71fbd782e199417ce9afa44a8c220885b4a.tar.gz
garage-7011b71fbd782e199417ce9afa44a8c220885b4a.zip
jepsen: wip
-rw-r--r--script/jepsen.garage/.envrc1
-rw-r--r--script/jepsen.garage/.gitignore15
-rw-r--r--script/jepsen.garage/CHANGELOG.md24
-rw-r--r--script/jepsen.garage/LICENSE280
-rw-r--r--script/jepsen.garage/README.md22
-rw-r--r--script/jepsen.garage/doc/intro.md3
-rw-r--r--script/jepsen.garage/flake.nix22
-rw-r--r--script/jepsen.garage/garage-cluster.nix64
-rw-r--r--script/jepsen.garage/project.clj9
-rw-r--r--script/jepsen.garage/shell.nix6
-rw-r--r--script/jepsen.garage/src/jepsen/garage.clj18
-rw-r--r--script/jepsen.garage/test/jepsen/garage_test.clj7
12 files changed, 471 insertions, 0 deletions
diff --git a/script/jepsen.garage/.envrc b/script/jepsen.garage/.envrc
new file mode 100644
index 00000000..1d953f4b
--- /dev/null
+++ b/script/jepsen.garage/.envrc
@@ -0,0 +1 @@
+use nix
diff --git a/script/jepsen.garage/.gitignore b/script/jepsen.garage/.gitignore
new file mode 100644
index 00000000..44e41749
--- /dev/null
+++ b/script/jepsen.garage/.gitignore
@@ -0,0 +1,15 @@
+/target
+/classes
+/checkouts
+profiles.clj
+pom.xml
+pom.xml.asc
+*.jar
+*.class
+/.lein-*
+/.nrepl-port
+/.prepl-port
+.hgignore
+.hg/
+.direnv
+/store
diff --git a/script/jepsen.garage/CHANGELOG.md b/script/jepsen.garage/CHANGELOG.md
new file mode 100644
index 00000000..c1abdb4d
--- /dev/null
+++ b/script/jepsen.garage/CHANGELOG.md
@@ -0,0 +1,24 @@
+# Change Log
+All notable changes to this project will be documented in this file. This change log follows the conventions of [keepachangelog.com](http://keepachangelog.com/).
+
+## [Unreleased]
+### Changed
+- Add a new arity to `make-widget-async` to provide a different widget shape.
+
+## [0.1.1] - 2023-04-18
+### Changed
+- Documentation on how to make the widgets.
+
+### Removed
+- `make-widget-sync` - we're all async, all the time.
+
+### Fixed
+- Fixed widget maker to keep working when daylight savings switches over.
+
+## 0.1.0 - 2023-04-18
+### Added
+- Files from the new template.
+- Widget maker public API - `make-widget-sync`.
+
+[Unreleased]: https://sourcehost.site/your-name/jepsen.garage/compare/0.1.1...HEAD
+[0.1.1]: https://sourcehost.site/your-name/jepsen.garage/compare/0.1.0...0.1.1
diff --git a/script/jepsen.garage/LICENSE b/script/jepsen.garage/LICENSE
new file mode 100644
index 00000000..23151265
--- /dev/null
+++ b/script/jepsen.garage/LICENSE
@@ -0,0 +1,280 @@
+Eclipse Public License - v 2.0
+
+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+ PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+ OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+ a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+
+ b) in the case of each subsequent Contributor:
+ i) changes to the Program, and
+ ii) additions to the Program;
+ where such changes and/or additions to the Program originate from
+ and are Distributed by that particular Contributor. A Contribution
+ "originates" from a Contributor if it was added to the Program by
+ such Contributor itself or anyone acting on such Contributor's behalf.
+ Contributions do not include changes or additions to the Program that
+ are not Modified Works.
+
+"Contributor" means any person or entity that Distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
+
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
+
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
+
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
+
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
+
+2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
+ license to reproduce, prepare Derivative Works of, publicly display,
+ publicly perform, Distribute and sublicense the Contribution of such
+ Contributor, if any, and such Derivative Works.
+
+ b) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
+ license under Licensed Patents to make, use, sell, offer to sell,
+ import and otherwise transfer the Contribution of such Contributor,
+ if any, in Source Code or other form. This patent license shall
+ apply to the combination of the Contribution and the Program if, at
+ the time the Contribution is added by the Contributor, such addition
+ of the Contribution causes such combination to be covered by the
+ Licensed Patents. The patent license shall not apply to any other
+ combinations which include the Contribution. No hardware per se is
+ licensed hereunder.
+
+ c) Recipient understands that although each Contributor grants the
+ licenses to its Contributions set forth herein, no assurances are
+ provided by any Contributor that the Program does not infringe the
+ patent or other intellectual property rights of any other entity.
+ Each Contributor disclaims any liability to Recipient for claims
+ brought by any other entity based on infringement of intellectual
+ property rights or otherwise. As a condition to exercising the
+ rights and licenses granted hereunder, each Recipient hereby
+ assumes sole responsibility to secure any other intellectual
+ property rights needed, if any. For example, if a third party
+ patent license is required to allow Recipient to Distribute the
+ Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+
+ d) Each Contributor represents that to its knowledge it has
+ sufficient copyright rights in its Contribution, if any, to grant
+ the copyright license set forth in this Agreement.
+
+ e) Notwithstanding the terms of any Secondary License, no
+ Contributor makes additional grants to any Recipient (other than
+ those set forth in this Agreement) as a result of such Recipient's
+ receipt of the Program under the terms of a Secondary License
+ (if permitted under the terms of Section 3).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+ a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ i) effectively disclaims on behalf of all other Contributors all
+ warranties and conditions, express and implied, including
+ warranties or conditions of title and non-infringement, and
+ implied warranties or conditions of merchantability and fitness
+ for a particular purpose;
+
+ ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special,
+ incidental and consequential damages, such as lost profits;
+
+ iii) does not attempt to limit or alter the recipients' rights
+ in the Source Code under section 3.2; and
+
+ iv) requires any subsequent distribution of the Program by any
+ party to be under a license that satisfies the requirements
+ of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+ a) it must be made available under this Agreement, or if the
+ Program (i) is combined with other material in a separate file or
+ files made available under a Secondary License, and (ii) the initial
+ Contributor attached to the Source Code the notice described in
+ Exhibit A of this Agreement, then the Program may be made available
+ under the terms of such Secondary Licenses, and
+
+ b) a copy of this Agreement must be included with each copy of
+ the Program.
+
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program,
+the Contributor who includes the Program in a commercial product
+offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes
+the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every
+other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits
+and other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program
+in a commercial product offering. The obligations in this section do not
+apply to any claims or Losses relating to any actual or alleged
+intellectual property infringement. In order to qualify, an Indemnified
+Contributor must: a) promptly notify the Commercial Contributor in
+writing of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those performance
+claims and warranties, and if a court requires any other Contributor to
+pay any damages as a result, the Commercial Contributor must pay
+those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE. Each Recipient is solely responsible for determining the
+appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs
+or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software
+or hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+Distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to Distribute the Program (including its
+Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+receives no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted
+under this Agreement are reserved. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
+
+Exhibit A - Form of Secondary Licenses Notice
+
+"This Source Code may also be made available under the following
+Secondary Licenses when the conditions for such availability set forth
+in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public
+License as published by the Free Software Foundation, either version 2
+of the License, or (at your option) any later version, with the GNU
+Classpath Exception which is available at
+https://www.gnu.org/software/classpath/license.html."
+
+ Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+
+ If it is not possible or desirable to put the notice in a particular
+ file, then You may include the notice in a location (such as a LICENSE
+ file in a relevant directory) where a recipient would be likely to
+ look for such a notice.
+
+ You may add additional accurate notices of copyright ownership.
diff --git a/script/jepsen.garage/README.md b/script/jepsen.garage/README.md
new file mode 100644
index 00000000..e1d1a555
--- /dev/null
+++ b/script/jepsen.garage/README.md
@@ -0,0 +1,22 @@
+# jepsen.garage
+
+A Clojure library designed to ... well, that part is up to you.
+
+## Usage
+
+FIXME
+
+## License
+
+Copyright © 2023 FIXME
+
+This program and the accompanying materials are made available under the
+terms of the Eclipse Public License 2.0 which is available at
+http://www.eclipse.org/legal/epl-2.0.
+
+This Source Code may also be made available under the following Secondary
+Licenses when the conditions for such availability set forth in the Eclipse
+Public License, v. 2.0 are satisfied: GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or (at your
+option) any later version, with the GNU Classpath Exception which is available
+at https://www.gnu.org/software/classpath/license.html.
diff --git a/script/jepsen.garage/doc/intro.md b/script/jepsen.garage/doc/intro.md
new file mode 100644
index 00000000..ee727bbc
--- /dev/null
+++ b/script/jepsen.garage/doc/intro.md
@@ -0,0 +1,3 @@
+# Introduction to jepsen.garage
+
+TODO: write [great documentation](http://jacobian.org/writing/what-to-write/)
diff --git a/script/jepsen.garage/flake.nix b/script/jepsen.garage/flake.nix
new file mode 100644
index 00000000..76ee8ebf
--- /dev/null
+++ b/script/jepsen.garage/flake.nix
@@ -0,0 +1,22 @@
+# Example flake.nix
+{
+ inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+ inputs.microvm.url = "github:astro/microvm.nix";
+ inputs.microvm.inputs.nixpkgs.follows = "nixpkgs";
+
+ outputs = { self, nixpkgs, microvm }: {
+ # Example nixosConfigurations entry
+ nixosConfigurations.my-microvm = nixpkgs.lib.nixosSystem {
+ system = "x86_64-linux";
+ modules = [
+ # Include the microvm module
+ microvm.nixosModules.microvm
+ # Add more modules here
+ {
+ networking.hostName = "my-microvm";
+ microvm.hypervisor = "cloud-hypervisor";
+ }
+ ];
+ };
+ };
+}
diff --git a/script/jepsen.garage/garage-cluster.nix b/script/jepsen.garage/garage-cluster.nix
new file mode 100644
index 00000000..32fedc04
--- /dev/null
+++ b/script/jepsen.garage/garage-cluster.nix
@@ -0,0 +1,64 @@
+{ config, lib, pkgs, ... }:
+let
+ unstable = import ./unstable.nix;
+ addressMap =
+ {
+ "n1" = { localAddress = "10.233.0.101"; hostAddress = "10.233.1.101"; };
+ "n2" = { localAddress = "10.233.0.102"; hostAddress = "10.233.1.102"; };
+ "n3" = { localAddress = "10.233.0.103"; hostAddress = "10.233.1.103"; };
+ "n4" = { localAddress = "10.233.0.104"; hostAddress = "10.233.1.104"; };
+ "n5" = { localAddress = "10.233.0.105"; hostAddress = "10.233.1.105"; };
+ };
+ toHostsEntry = name: { localAddress, ... }: "${localAddress} ${name}";
+ extraHosts =
+ builtins.concatStringsSep "\n"
+ (lib.attrsets.mapAttrsToList toHostsEntry addressMap);
+ nodeConfig = hostName: { localAddress, hostAddress }: {
+ inherit localAddress hostAddress;
+
+ ephemeral = true;
+ autoStart = true;
+ privateNetwork = true;
+
+ config = { config, pkgs, ... }:
+ {
+ networking = {
+ inherit hostName extraHosts;
+ };
+
+ services.openssh = {
+ enable = true;
+ permitRootLogin = "yes";
+ };
+ users.users.root.initialPassword = "root";
+
+ system.stateVersion = "22.11";
+
+ services.garage = {
+ enable = true;
+ logLevel = "debug";
+ settings.replication_mode = "3";
+ };
+
+ # Workaround for nixos-container issue
+ # (see https://github.com/NixOS/nixpkgs/issues/67265 and
+ # https://github.com/NixOS/nixpkgs/pull/81371#issuecomment-605526099).
+ # The etcd service is of type "notify", which means that
+ # etcd would not be considered started until etcd is fully online;
+ # however, since NixOS container networking only works sometime *after*
+ # multi-user.target, we forgo etcd's notification entirely.
+ systemd.services.etcd.serviceConfig.Type = lib.mkForce "exec";
+
+ systemd.services.etcd.serviceConfig.StandardOutput = "file:/var/log/etcd.log";
+ systemd.services.etcd.serviceConfig.StandardError = "file:/var/log/etcd.log";
+
+ networking.firewall.allowedTCPPorts = [ 2379 2380 ];
+ };
+ };
+in
+{
+ containers = lib.attrsets.mapAttrs nodeConfig addressMap;
+ networking = {
+ inherit extraHosts;
+ };
+}
diff --git a/script/jepsen.garage/project.clj b/script/jepsen.garage/project.clj
new file mode 100644
index 00000000..ac3df57e
--- /dev/null
+++ b/script/jepsen.garage/project.clj
@@ -0,0 +1,9 @@
+(defproject jepsen.garage "0.1.0-SNAPSHOT"
+ :description "Jepsen testing for Garage"
+ :url "https://git.deuxfleurs.fr/Deuxfleurs/garage"
+ :license {:name "GPLv3"
+ :url "https://www.gnu.org/licenses/gpl-3.0.en.html"}
+ :main jepsen.garage
+ :dependencies [[org.clojure/clojure "1.11.1"]
+ [jepsen "0.2.1-SNAPSHOT"]]
+ :repl-options {:init-ns jepsen.garage})
diff --git a/script/jepsen.garage/shell.nix b/script/jepsen.garage/shell.nix
new file mode 100644
index 00000000..4f0af839
--- /dev/null
+++ b/script/jepsen.garage/shell.nix
@@ -0,0 +1,6 @@
+{ pkgs ? import <nixpkgs> {} }:
+ pkgs.mkShell {
+ nativeBuildInputs = [
+ pkgs.leiningen
+ ];
+}
diff --git a/script/jepsen.garage/src/jepsen/garage.clj b/script/jepsen.garage/src/jepsen/garage.clj
new file mode 100644
index 00000000..1351c4a7
--- /dev/null
+++ b/script/jepsen.garage/src/jepsen/garage.clj
@@ -0,0 +1,18 @@
+(ns jepsen.garage
+ (:require [jepsen.cli :as cli]
+ [jepsen.tests :as tests]))
+
+(defn garage-test
+ "Given an options map from the command line runner (e.g. :nodes, :ssh,
+ :concurrency, ...), constructs a test map."
+ [opts]
+ (merge tests/noop-test
+ {:pure-generators true}
+ opts))
+
+(defn -main
+ "Handles command line arguments. Can either run a test, or a web server for
+ browsing results."
+ [& args]
+ (cli/run! (cli/single-test-cmd {:test-fn garage-test})
+ args))
diff --git a/script/jepsen.garage/test/jepsen/garage_test.clj b/script/jepsen.garage/test/jepsen/garage_test.clj
new file mode 100644
index 00000000..055392a1
--- /dev/null
+++ b/script/jepsen.garage/test/jepsen/garage_test.clj
@@ -0,0 +1,7 @@
+(ns jepsen.garage-test
+ (:require [clojure.test :refer :all]
+ [jepsen.garage :refer :all]))
+
+(deftest a-test
+ (testing "FIXME, I fail."
+ (is (= 0 1))))