Commit Graph

92 Commits

Author SHA1 Message Date
Adrian Lanzafame
7e1e98d582 lock file location printed in log
License: MIT
Signed-off-by: Adrian Lanzafame <adrianlanzafame92@gmail.com>
2018-03-08 16:47:58 +10:00
Hector Sanjuan
5ba746a9ca Fix: official builds panic on start
Since the commit variable is not set in these builds :(

License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2018-02-20 17:55:18 +01:00
Hector Sanjuan
a371fa409f
Merge pull request #307 from ipfs/feat/auto-migration
Three small state features
2018-02-08 21:52:26 +01:00
Wyatt Daviau
cf6712ffcc making allocation flag global
License: MIT
Signed-off-by: Wyatt Daviau <wdaviau@cs.stanford.edu>
2018-02-08 14:47:44 -05:00
Wyatt Daviau
0784802abb moving upgrade flag to daemon
License: MIT
Signed-off-by: Wyatt Daviau <wdaviau@cs.stanford.edu>
2018-02-08 14:27:43 -05:00
Wyatt Daviau
2262adf33f state version command added
License: MIT
Signed-off-by: Wyatt Daviau <wdaviau@cs.stanford.edu>
2018-01-28 21:25:52 -05:00
Wyatt Daviau
36ab79eb01 upgrade skips upgrading from current state format
License: MIT
Signed-off-by: Wyatt Daviau <wdaviau@cs.stanford.edu>
2018-01-28 21:25:40 -05:00
Wyatt Daviau
4da9d9a94b upgrade flag runs upgrades on service launch
License: MIT
Signed-off-by: Wyatt Daviau <wdaviau@cs.stanford.edu>
2018-01-26 18:16:47 -05:00
Wyatt Daviau
eafc747305 fix/297 Resolve the lack of snapshot pushes:
Snapshot saving state commands (upgrade and import)
now save raft config peers as consensus peers in snapshot.
Snapshot index 1 -> 2 when saving from a fresh import to force
replication when bootstrapping.

License: MIT
Signed-off-by: Wyatt Daviau <wdaviau@cs.stanford.edu>
2018-01-25 16:47:12 -05:00
Hector Sanjuan
7ea011f35a
Merge pull request #290 from ipfs/fix/240-logging
Fix #240: Avoid duplicated list of facilities
2018-01-16 15:10:50 +01:00
Hector Sanjuan
bfdd59735c Fix #240: Add test flags. Remove build tags for logging control.
License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2018-01-16 09:28:40 +01:00
Hector Sanjuan
5b3be2df7f Fix: validateState does not detect different state versions
It was comparing state.GetVersion() against state.Version, which
is the same, instead of against, mapstate.Version, which is the
constant for the current Version.

It was also returning a nil error, as the scope of the variable
assigned was not that of the outer level.

License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2018-01-15 20:03:14 +01:00
Hector Sanjuan
2a6f91cd35 Fix #240: Avoid duplicated list of facilities
This puts some sanity in this. It's not super correct (name of facilities
depend of the component and the main cluster component should not hard
code them), but it's clear enough. Imho, better than over-engineering
a more elegant approach.

License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2018-01-15 16:50:40 +01:00
Wyatt Daviau
8361b8afe4 Add and refine cli interface for cluster state
Added import, export, cleanup.
Changed state interface.
New sharness tests.

License: MIT
Signed-off-by: Wyatt Daviau <wdaviau@cs.stanford.edu>
2017-12-28 09:06:28 -05:00
Hector Sanjuan
2b6dfa45cd cluster-service: add version subcommand and change some startup logging
The --version flag is default from our cli library so I left that. The
version subcommand prints only the version number + the short commit
so it's a bit more easy to parse.

I have additionally reduced the amount of output on start up by converting
some messages to debug. I wish there was a level between INFO and DEBUG
though.

License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2017-12-13 10:25:01 +01:00
Hector Sanjuan
6bf24ccca7 migrate.go: gofmt
License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2017-12-08 01:05:49 +01:00
Hector Sanjuan
6a243df4da api: Support /ws/ and /dns/ multiaddresses parsing. Log all errors
The multiaddresses protocols for websockets and dns are only registered
with init() function when loading the modules. ipfs-cluster-ctl
uses just the api, which did not load these modules so converting
from serialized types caused bad panics.

We have also ignored errors in the api library under the thinking that it
would only parse things serialized by us, but this has made parsing errors
to go unnoticed. From now, all errors are logged and some precautions
are taking to better handle the possibility of nil objects.

License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2017-12-08 01:05:49 +01:00
Hector Sanjuan
e0e32025de cluster-service: Do not export Locker. Fix golint.
License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2017-12-06 20:12:55 +01:00
Hector Sanjuan
bde7b4e3d9
Merge pull request #264 from ipfs/feat/code_quality
Feat/code quality
2017-12-06 18:46:53 +01:00
Wyatt
ad492d20ae fix #254, execution locking:
ipfs-cluster-service now locks before running the daemon and state
upgrade commands.  Locking mechanism heavily inspired by ipfs, see
go-ipfs fsrepo.  Unlock called on exit to free up repo.  one lockfile
per repo. A very simple sharness test checks that two service
invocations cannot occur.

A longstanding sharness/ci logging issue is addressed by exporting
verbose=t into the travis environment.  Now output of commands from
within sharness test strings are displayed during travis runs.

License: MIT
Signed-off-by: Wyatt Daviau <wdaviau@cs.stanford.edu>
2017-12-06 11:14:53 -05:00
Hector Sanjuan
0693ff429e fix spelling: Fix spelling errors
License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2017-12-06 15:15:54 +01:00
Hector Sanjuan
9a246a237d fix go vet: address go vet warnings
License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2017-12-06 15:15:41 +01:00
Hector Sanjuan
c0628e43ff fix golint: Address a few golint warnings
License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2017-12-06 15:15:38 +01:00
Hector Sanjuan
11a8926236 MapPinTracker: support configuration section
This also generates a default configuration section when it
doesn't exist, so it's backwards compatible.

License: MIT
Signed-off-by: Hector Sanjuan <code@hector.link>
2017-11-29 14:42:50 +01:00
Wyatt
47b744f1c0 ipfs-cluster-service state upgrade cli command
ipfs-cluster-service now has a migration subcommand that upgrades
    persistant state snapshots with an out-of-date format version to the
    newest version of raft state. If all cluster members shutdown with
    consistent state, upgrade ipfs-cluster, and run the state upgrade command,
    the new version of cluster will be compatible with persistent storage.
    ipfs-cluster now validates its persistent state upon loading it and exits
    with a clear error in the case the state format version is not up to date.

    Raft snapshotting is enforced on all shutdowns and the json backup is no
    longer run.  This commit makes use of recent changes to libp2p-raft
    allowing raft states to implement their own marshaling strategies. Now
    mapstate handles the logic for its (de)serialization.  In the interest of
    supporting various potential upgrade formats the state serialization
    begins with a varint (right now one byte) describing the version.

    Some go tests are modified and a go test is added to cover new ipfs-cluster
    raft snapshot reading functions.  Sharness tests are added to cover the
    state upgrade command.
2017-11-28 22:35:48 -05:00
Hector Sanjuan
a1f1ef15d8
Merge pull request #236 from ipfs/fix/minor-fixes
Fix/minor fixes
2017-11-15 12:09:30 +01:00
Hector Sanjuan
0525403f8c cluster-service: make sure we wait for configuration to be saved on init.
License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-11-14 21:06:10 +01:00
Hector Sanjuan
2c3085586c Documentation: bring in line to 0.3.0
Review documentation to be in line with latest updates to Raft and
any other feature introduced since 0.12.0.

License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-11-14 19:26:49 +01:00
Hector Sanjuan
09cd86e183
Merge pull request #234 from ipfs/feat/snap-travis-ci
Enable travis for snapcraft builds
2017-11-14 18:24:32 +01:00
Hector Sanjuan
33c325b865 cluster-service: Fix too many arguments for panic
License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-11-14 18:01:32 +01:00
Hector Sanjuan
18ff7a79cc cluster-service: Upstream snap patch
Snaps set a custom $HOME, but we were using /etc/passwd.
There might be other cases were using a custom $HOME might be
handy.

In UNIX systems, $HOME should be always set. For all the rest,
we fall back to the original os/user.HomeDir method.

License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-11-14 13:23:43 +01:00
Hector Sanjuan
d1473fd3be Issue #219: Fix waiting for save on shutdown
Improve the logic

License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-11-10 16:55:39 +01:00
Hector Sanjuan
d21cc2b32f Issue #213: Always wait for configuration to be saved
Even when cluster dies

License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-11-01 12:17:33 +01:00
Hector Sanjuan
828236dcc0 Issue #213: Make sure we wait for configuration to be saved
There might be a case where the program is terminated before
configuration is saved.

Also, avoid calling save() multiple times on shutdowns.

License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-10-27 21:44:02 +02:00
Hector Sanjuan
eca012b9fe ipfs-cluster-service: Do not run with unknown subcommands
Shows an error when running cluster with an unknown subcommand.

Renames "ipfs-cluster-service run" to "ipfs-cluster-service daemon" which
is consistent with go-ipfs and paves ground for #153.

License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-10-20 18:57:15 +02:00
Hector Sanjuan
8f06baa1bf Issue #162: Rework configuration format
The following commit reimplements ipfs-cluster configuration under
the following premises:

  * Each component is initialized with a configuration object
  defined by its module
  * Each component decides how the JSON representation of its
  configuration looks like
  * Each component parses and validates its own configuration
  * Each component exposes its own defaults
  * Component configurations are make the sections of a
  central JSON configuration file (which replaces the current
  JSON format)
  * Component configurations implement a common interface
  (config.ComponentConfig) with a set of common operations
  * The central configuration file is managed by a
  config.ConfigManager which:
    * Registers ComponentConfigs
    * Assigns the correspondent sections from the JSON file to each
    component and delegates the parsing
    * Delegates the JSON generation for each section
    * Can be notified when the configuration is updated and must be
    saved to disk

The new service.json would then look as follows:

```json
{
  "cluster": {
    "id": "QmTVW8NoRxC5wBhV7WtAYtRn7itipEESfozWN5KmXUQnk2",
    "private_key": "<...>",
    "secret": "00224102ae6aaf94f2606abf69a0e278251ecc1d64815b617ff19d6d2841f786",
    "peers": [],
    "bootstrap": [],
    "leave_on_shutdown": false,
    "listen_multiaddress": "/ip4/0.0.0.0/tcp/9096",
    "state_sync_interval": "1m0s",
    "ipfs_sync_interval": "2m10s",
    "replication_factor": -1,
    "monitor_ping_interval": "15s"
  },
  "consensus": {
    "raft": {
      "heartbeat_timeout": "1s",
      "election_timeout": "1s",
      "commit_timeout": "50ms",
      "max_append_entries": 64,
      "trailing_logs": 10240,
      "snapshot_interval": "2m0s",
      "snapshot_threshold": 8192,
      "leader_lease_timeout": "500ms"
    }
  },
  "api": {
    "restapi": {
      "listen_multiaddress": "/ip4/127.0.0.1/tcp/9094",
      "read_timeout": "30s",
      "read_header_timeout": "5s",
      "write_timeout": "1m0s",
      "idle_timeout": "2m0s"
    }
  },
  "ipfs_connector": {
    "ipfshttp": {
      "proxy_listen_multiaddress": "/ip4/127.0.0.1/tcp/9095",
      "node_multiaddress": "/ip4/127.0.0.1/tcp/5001",
      "connect_swarms_delay": "7s",
      "proxy_read_timeout": "10m0s",
      "proxy_read_header_timeout": "5s",
      "proxy_write_timeout": "10m0s",
      "proxy_idle_timeout": "1m0s"
    }
  },
  "monitor": {
    "monbasic": {
      "check_interval": "15s"
    }
  },
  "informer": {
    "disk": {
      "metric_ttl": "30s",
      "metric_type": "freespace"
    },
    "numpin": {
      "metric_ttl": "10s"
    }
  }
}
```

This new format aims to be easily extensible per component. As such,
it already surfaces quite a few new options which were hardcoded
before.

Additionally, since Go API have changed, some redundant methods have been
removed and small refactoring has happened to take advantage of the new
way.

License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-10-18 00:00:12 +02:00
dgrisham
25a910faad BasicAuth implementation -- CLI, server, and tests. 2017-10-14 15:55:21 -06:00
dgrisham
456603f7a8 adding error output to NewInformerWithMetric 2017-09-01 09:48:15 -06:00
dgrisham
407fd9f68a Informer impl refactored; SortNumeric added for allocators. 2017-08-28 08:51:01 -06:00
dgrisham
2d2a9da793 FreeSpace metric impl (including descendalloc) refactored and tested. 2017-08-11 13:57:42 -06:00
dgrisham
a46ab3dda9 freespace metric partial impl 2017-08-03 11:24:19 -06:00
dgrisham
c0f3fde409 Refactored checks for user-provided secret 2017-07-28 13:10:52 -06:00
dgrisham
5e0863da46 Rename generateSecret -> customSecret 2017-07-28 09:36:56 -06:00
dgrisham
73d4b1ffec Refactor to distinguish empty and unset CLUSTER_SECRET env var 2017-07-28 09:23:34 -06:00
Hector Sanjuan
7f2b18c705 Merge pull request #129 from ipfs/ssl-params
Rename TLS configuration options and set JSON key
2017-07-27 17:38:40 +02:00
Hector Sanjuan
0d9c7ddc0c Make sure dist READMEs are up to date (#137)
License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-07-27 14:42:23 +02:00
Hector Sanjuan
bcbaea2655 Rename TLS configuration options and set JSON key
Also, omit these keys in JSON generation when they are empty.

License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-07-25 13:20:24 +02:00
Hector Sanjuan
46bda442b5 Merge pull request #127 from ipfs/release-fixes
Release fixes
2017-07-25 12:11:29 +02:00
Hector Sanjuan
bf7ed938fe Address review comments
License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-07-25 00:21:20 +02:00
Hector Sanjuan
69ffd20dbf Generate secret by default.
This:

* Takes CLUSTER_SECRET as the secret whenever it is defined
* Generates the secret by default in other cases
* Only prompts with -s, -custom-secret.

License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
2017-07-25 00:16:07 +02:00