From 073a47baa50e86b97545923801c2c7cf307e3ebb Mon Sep 17 00:00:00 2001 From: Cody Soyland Date: Mon, 9 Jul 2018 11:34:23 -0500 Subject: [PATCH 1/3] Update changelog for v1.0.0 --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e95e6013e..6c044dcc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,9 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## [v1.0.0] - 2018-07-06 +## [v1.0.0] - 2018-07-09 + +This version contains 218 contributions from 7 contributors. There are 184 files changed, 21,769 insertions, and 20,275 deletions. ### Added @@ -442,3 +444,6 @@ This version contains 53 contributions from 13 contributors (including 4 volunte [0.6.0]: https://github.com/pilosa/pilosa/compare/v0.5...v0.6 [0.7.0]: https://github.com/pilosa/pilosa/compare/v0.6...v0.7 [0.8.0]: https://github.com/pilosa/pilosa/compare/v0.7...v0.8 +[0.9.0]: https://github.com/pilosa/pilosa/compare/v0.8...v0.9 +[0.10.0]: https://github.com/pilosa/pilosa/compare/v0.9...v0.10 +[1.0.0]: https://github.com/pilosa/pilosa/compare/v0.10...v1.0 From 31970bb3c2282bd1a22dec201999f9b31956cd2e Mon Sep 17 00:00:00 2001 From: Cody Soyland Date: Mon, 9 Jul 2018 11:50:01 -0500 Subject: [PATCH 2/3] Update docs and Dockerfile for 1.0.0 release --- Dockerfile | 2 +- docs/installation.md | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2b83c71c1..12e25ce45 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.10.2 as builder +FROM golang:1.10.3 as builder COPY . /go/src/github.com/pilosa/pilosa/ diff --git a/docs/installation.md b/docs/installation.md index 639293338..dd4d89780 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -42,7 +42,7 @@ There are four ways to install Pilosa on MacOS: Use [Homebrew](https://brew.sh/) backing up, and more. Complete documentation is available at https://www.pilosa.com/docs/. - Version: v0.10.0-64-gf053d9a5 + Version: v1.0.0 Build Time: 2018-05-14T22:14:01+0000 Usage: @@ -71,19 +71,19 @@ There are four ways to install Pilosa on MacOS: Use [Homebrew](https://brew.sh/) 1. Download the latest release: ``` - curl -L -O https://github.com/pilosa/pilosa/releases/download/v0.10.0/pilosa-v0.10.0-darwin-amd64.tar.gz + curl -L -O https://github.com/pilosa/pilosa/releases/download/v1.0.0/pilosa-v1.0.0-darwin-amd64.tar.gz ``` Other releases can be downloaded from our Releases page on Github. 2. Extract the binary: ``` - tar xfz pilosa-v0.10.0-darwin-amd64.tar.gz + tar xfz pilosa-v1.0.0-darwin-amd64.tar.gz ``` 3. Move the binary into your PATH so you can run `pilosa` from any shell: ``` - cp -i pilosa-v0.10.0-darwin-amd64/pilosa /usr/local/bin + cp -i pilosa-v1.0.0-darwin-amd64/pilosa /usr/local/bin ``` 4. Make sure Pilosa is installed successfully: @@ -100,7 +100,7 @@ There are four ways to install Pilosa on MacOS: Use [Homebrew](https://brew.sh/) backing up, and more. Complete documentation is available at https://www.pilosa.com/docs/. - Version: v0.10.0-64-gf053d9a5 + Version: v1.0.0 Build Time: 2018-05-14T22:14:01+0000 Usage: @@ -163,7 +163,7 @@ There are four ways to install Pilosa on MacOS: Use [Homebrew](https://brew.sh/) backing up, and more. Complete documentation is available at https://www.pilosa.com/docs/. - Version: v0.10.0-64-gf053d9a5 + Version: v1.0.0 Build Time: 2018-05-14T22:14:01+0000 Usage: @@ -222,19 +222,19 @@ There are three ways to install Pilosa on Linux: download the binary (recommende 1. To install the latest version of Pilosa, download the latest release: ``` - curl -L -O https://github.com/pilosa/pilosa/releases/download/v0.10.0/pilosa-v0.10.0-linux-amd64.tar.gz + curl -L -O https://github.com/pilosa/pilosa/releases/download/v1.0.0/pilosa-v1.0.0-linux-amd64.tar.gz ``` Note: This assumes you are using an `amd64` compatible architecture. Other releases can be downloaded from our Releases page on Github. 2. Extract the binary: ``` - tar xfz pilosa-v0.10.0-linux-amd64.tar.gz + tar xfz pilosa-v1.0.0-linux-amd64.tar.gz ``` 3. Move the binary into your PATH so you can run `pilosa` from any shell: ``` - cp -i pilosa-v0.10.0-linux-amd64/pilosa /usr/local/bin + cp -i pilosa-v1.0.0-linux-amd64/pilosa /usr/local/bin ``` 4. Make sure Pilosa is installed successfully: @@ -251,7 +251,7 @@ There are three ways to install Pilosa on Linux: download the binary (recommende backing up, and more. Complete documentation is available at https://www.pilosa.com/docs/. - Version: v0.10.0-64-gf053d9a5 + Version: v1.0.0 Build Time: 2018-05-14T22:14:01+0000 Usage: @@ -314,7 +314,7 @@ There are three ways to install Pilosa on Linux: download the binary (recommende backing up, and more. Complete documentation is available at https://www.pilosa.com/docs/. - Version: v0.10.0-64-gf053d9a5 + Version: v1.0.0 Build Time: 2018-05-14T22:14:01+0000 Usage: From d22507d36deecd873c1816b99e9e2a31bc161556 Mon Sep 17 00:00:00 2001 From: Travis Turner Date: Mon, 9 Jul 2018 17:05:58 -0500 Subject: [PATCH 3/3] rename gossip.NewGossipMemberSet to gossip.NewMemberSet --- gossip/gossip.go | 72 ++++++++++++++++++++++++------------------------ server/server.go | 2 +- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/gossip/gossip.go b/gossip/gossip.go index 7650cff86..2b983376f 100644 --- a/gossip/gossip.go +++ b/gossip/gossip.go @@ -33,28 +33,28 @@ import ( ) // Ensure GossipMemberSet implements interfaces. -var _ memberlist.Delegate = &gossipMemberSet{} +var _ memberlist.Delegate = &memberSet{} -// gossipMemberSet represents a gossip implementation of MemberSet using memberlist. -type gossipMemberSet struct { +// memberSet represents a gossip implementation of MemberSet using memberlist. +type memberSet struct { mu sync.RWMutex memberlist *memberlist.Memberlist broadcasts *memberlist.TransmitLimitedQueue papi *pilosa.API - config *gossipConfig + config *config Logger pilosa.Logger logger *log.Logger transport *Transport - gossipEventReceiver *gossipEventReceiver + eventReceiver *eventReceiver } // Open implements the MemberSet interface to start network activity. -func (g *gossipMemberSet) Open() (err error) { +func (g *memberSet) Open() (err error) { g.mu.Lock() g.memberlist, err = memberlist.Create(g.config.memberlistConfig) g.mu.Unlock() @@ -94,7 +94,7 @@ func (g *gossipMemberSet) Open() (err error) { } // joinWithRetry wraps the standard memberlist Join function in a retry. -func (g *gossipMemberSet) joinWithRetry(hosts []string) error { +func (g *memberSet) joinWithRetry(hosts []string) error { err := retry(60, 2*time.Second, func() error { _, err := g.memberlist.Join(hosts) return err @@ -120,34 +120,34 @@ func retry(attempts int, sleep time.Duration, fn func() error) (err error) { //////////////////////////////////////////////////////////////// -type gossipConfig struct { +type config struct { gossipSeeds []string memberlistConfig *memberlist.Config } -// gossipMemberSetOption describes a functional option for GossipMemberSet. -type gossipMemberSetOption func(*gossipMemberSet) error +// memberSetOption describes a functional option for GossipMemberSet. +type memberSetOption func(*memberSet) error -// WithTransport is a functional option for providing a transport to NewGossipMemberSet. -func WithTransport(transport *Transport) gossipMemberSetOption { - return func(g *gossipMemberSet) error { +// WithTransport is a functional option for providing a transport to NewMemberSet. +func WithTransport(transport *Transport) memberSetOption { + return func(g *memberSet) error { g.transport = transport return nil } } -// WithLogger is a functional option for providing a logger to NewGossipMemberSet. -func WithLogger(logger *log.Logger) gossipMemberSetOption { - return func(g *gossipMemberSet) error { +// WithLogger is a functional option for providing a logger to NewMemberSet. +func WithLogger(logger *log.Logger) memberSetOption { + return func(g *memberSet) error { g.logger = logger return nil } } -// NewGossipMemberSet returns a new instance of GossipMemberSet based on options. -func NewGossipMemberSet(cfg Config, api *pilosa.API, options ...gossipMemberSetOption) (*gossipMemberSet, error) { +// NewMemberSet returns a new instance of GossipMemberSet based on options. +func NewMemberSet(cfg Config, api *pilosa.API, options ...memberSetOption) (*memberSet, error) { host := api.Node().URI.Host - g := &gossipMemberSet{ + g := &memberSet{ papi: api, Logger: pilosa.NopLogger, } @@ -158,8 +158,8 @@ func NewGossipMemberSet(cfg Config, api *pilosa.API, options ...gossipMemberSetO return nil, errors.Wrap(err, "executing option") } } - ger := newGossipEventReceiver(g.logger, api) - g.gossipEventReceiver = ger + ger := newEventReceiver(g.logger, api) + g.eventReceiver = ger if g.transport == nil { port, err := strconv.Atoi(cfg.Port) @@ -210,7 +210,7 @@ func NewGossipMemberSet(cfg Config, api *pilosa.API, options ...gossipMemberSetO conf.Events = ger conf.Logger = g.logger - g.config = &gossipConfig{ + g.config = &config{ memberlistConfig: conf, gossipSeeds: cfg.Seeds, } @@ -219,7 +219,7 @@ func NewGossipMemberSet(cfg Config, api *pilosa.API, options ...gossipMemberSetO } // NodeMeta implementation of the memberlist.Delegate interface. -func (g *gossipMemberSet) NodeMeta(limit int) []byte { +func (g *memberSet) NodeMeta(limit int) []byte { buf, err := g.papi.Serializer.Marshal(g.papi.Node()) if err != nil { g.Logger.Printf("marshal message error: %s", err) @@ -230,7 +230,7 @@ func (g *gossipMemberSet) NodeMeta(limit int) []byte { // NotifyMsg implementation of the memberlist.Delegate interface // called when a user-data message is received. -func (g *gossipMemberSet) NotifyMsg(b []byte) { +func (g *memberSet) NotifyMsg(b []byte) { err := g.papi.ClusterMessage(context.Background(), bytes.NewBuffer(b)) if err != nil { g.Logger.Printf("cluster message error: %s", err) @@ -239,13 +239,13 @@ func (g *gossipMemberSet) NotifyMsg(b []byte) { // GetBroadcasts implementation of the memberlist.Delegate interface // called when user data messages can be broadcast. -func (g *gossipMemberSet) GetBroadcasts(overhead, limit int) [][]byte { +func (g *memberSet) GetBroadcasts(overhead, limit int) [][]byte { return g.broadcasts.GetBroadcasts(overhead, limit) } // LocalState implementation of the memberlist.Delegate interface // sends this Node's state data. -func (g *gossipMemberSet) LocalState(join bool) []byte { +func (g *memberSet) LocalState(join bool) []byte { m := &pilosa.NodeStatus{ Node: g.papi.Node(), MaxShards: g.papi.MaxShards(context.Background()), @@ -263,28 +263,28 @@ func (g *gossipMemberSet) LocalState(join bool) []byte { // MergeRemoteState implementation of the memberlist.Delegate interface // receive and process the remote side's LocalState. -func (g *gossipMemberSet) MergeRemoteState(buf []byte, join bool) { +func (g *memberSet) MergeRemoteState(buf []byte, join bool) { err := g.papi.ClusterMessage(context.Background(), bytes.NewBuffer(buf)) if err != nil { g.Logger.Printf("merge state error: %s", err) } } -// gossipEventReceiver is used to enable an application to receive +// eventReceiver is used to enable an application to receive // events about joins and leaves over a channel. // // Care must be taken that events are processed in a timely manner from // the channel, since this delegate will block until an event can be sent. -type gossipEventReceiver struct { +type eventReceiver struct { ch chan memberlist.NodeEvent papi *pilosa.API logger *log.Logger } -// newGossipEventReceiver returns a new instance of GossipEventReceiver. -func newGossipEventReceiver(logger *log.Logger, papi *pilosa.API) *gossipEventReceiver { - ger := &gossipEventReceiver{ +// newEventReceiver returns a new instance of GossipEventReceiver. +func newEventReceiver(logger *log.Logger, papi *pilosa.API) *eventReceiver { + ger := &eventReceiver{ ch: make(chan memberlist.NodeEvent, 1), logger: logger, papi: papi, @@ -293,19 +293,19 @@ func newGossipEventReceiver(logger *log.Logger, papi *pilosa.API) *gossipEventRe return ger } -func (g *gossipEventReceiver) NotifyJoin(n *memberlist.Node) { +func (g *eventReceiver) NotifyJoin(n *memberlist.Node) { g.ch <- memberlist.NodeEvent{memberlist.NodeJoin, n} } -func (g *gossipEventReceiver) NotifyLeave(n *memberlist.Node) { +func (g *eventReceiver) NotifyLeave(n *memberlist.Node) { g.ch <- memberlist.NodeEvent{memberlist.NodeLeave, n} } -func (g *gossipEventReceiver) NotifyUpdate(n *memberlist.Node) { +func (g *eventReceiver) NotifyUpdate(n *memberlist.Node) { g.ch <- memberlist.NodeEvent{memberlist.NodeUpdate, n} } -func (g *gossipEventReceiver) listen() { +func (g *eventReceiver) listen() { var nodeEventType pilosa.NodeEventType for { e := <-g.ch diff --git a/server/server.go b/server/server.go index d71139096..e83cc1c1c 100644 --- a/server/server.go +++ b/server/server.go @@ -317,7 +317,7 @@ func (m *Command) setupNetworking() error { return errors.Wrap(err, "getting transport") } - gossipMemberSet, err := gossip.NewGossipMemberSet( + gossipMemberSet, err := gossip.NewMemberSet( m.Config.Gossip, m.API, gossip.WithLogger(m.logger.Logger()),