An open API service indexing awesome lists of open source software.

https://github.com/libopenstorage/gossip

Go implementation of the Gossip protocol
https://github.com/libopenstorage/gossip

Last synced: about 1 year ago
JSON representation

Go implementation of the Gossip protocol

Awesome Lists containing this project

README

          

# gossip

[![Travis branch](https://img.shields.io/travis/libopenstorage/gossip/master.svg)](https://travis-ci.org/libopenstorage/gossip)
[![Code Coverage](https://codecov.io/gh/libopenstorage/gossip/branch/master/graph/badge.svg)](https://codecov.io/gh/libopenstorage/gossip)

Go implementation of the Gossip protocol.

## Overview

This package provides an implementation of an eventually consistent in-memory
data store. The data store values are exchanged using a push-pull gossip protocol.

```
// Create a gossiper
g := NewGossiper(":", "", "")
// Add peer nodes with whom you want to gossip
g.AddNode(":")
...
// update self values
g.UpdateSelf("", "")
// start gossip
g.Start()
```

These values are exchanged using the gossip protocol between the configured
peers.

```
// Get the current view of the world
storeKeys = g.GetStoreKeys()
for _, key := range storeKeys.List {
nodeInfoMap := g.GetStoreKeyValue(key)
for id, nodeInfo := nodeInfoList.List {
// if nodeInfo.Status != types.NODE_STATUS_INVALID
// then nodeInfo has valid data.
}
}

// Stop gossiping
g.Stop()
```

## Contributing

### Testing

To test, run `make test`. This will run the unit tests

### Vendoring

For vendoring, we use [dep](https://golang.github.io/dep/). Some useful dep commands are:
- `dep ensure`: install the project's dependencies
- `dep ensure -update`: update the locked versions of all dependencies
- `dep ensure -add github.com/pkg/errors`: add a dependency to the project