Merge branch 'master' into pql-keys

This commit is contained in:
Matthew Jaffee 2018-07-10 07:29:42 -05:00 committed by GitHub
commit cc5e4393e9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 55 additions and 50 deletions

View file

@ -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

View file

@ -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/

View file

@ -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:

View file

@ -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

View file

@ -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()),