GitXplorerGitXplorer
m

etcd4s

public
31 stars
4 forks
13 issues

Commits

List of commits on branch master.
Verified
e8d1772a1b6d4d72d46ad8e66f0768097dd530ba

chore(deps): update dependency org.scalatest:scalatest to v3.2.11 (#44)

rrenovate[bot] committed 3 years ago
Verified
e45e51c7ec7d935999ded38e5577dd987c003b2c

chore(deps): update dependency scala to v2.13.8 (#45)

rrenovate[bot] committed 3 years ago
Verified
d5b51ef3e4acc1949048664065991335404bd14e

chore(deps): update dependency org.xerial.sbt:sbt-sonatype to v3.9.7 (#40)

rrenovate[bot] committed 4 years ago
Verified
b7de3131de66b9a9afc4c69aca9bf13261522733

chore(deps): update dependency com.jsuereth:sbt-pgp to v2.1.1 (#36)

rrenovate[bot] committed 4 years ago
Verified
08addc18829728b43b70b0a2ea83344e68aa9985

chore(deps): update akka_version for com.typesafe.akka to v2.6.14 (#35)

rrenovate[bot] committed 4 years ago
Verified
a71cf6da825c15fd4f3da65ad3b6d19d8a70569e

chore(deps): update dependency com.thesamet.scalapb:compilerplugin to v0.11.1 (#37)

rrenovate[bot] committed 4 years ago

README

The README file for this repository.

etcd4s

Build Status

A Scala etcd client implementing V3 API using gRPC and ScalaPB with optional Akka Stream support. This project is in beta stage with basic test coverage and usable APIs.

Overview

This repo is a client library of etcd implementing V3 APIs using gRPC under the hood with optional Akka Stream support for stream APIs. This library implement the complete set of the APIs in the V3 protoal. More information about the APIs can be found here:

Note that this library do not support gRPC json gateway and use raw gRPC call instead (underlying is java-grpc). This project cross build against Scala 2.12 and 2.13 and also tested against etcd 3.2.x, 3.3.x but fail under 3.4.x.

Getting Started

The core lib

libraryDependencies += "com.github.mingchuno" %% "etcd4s-core" % "0.4.0"

To include akka stream support for stream API

libraryDependencies += "com.github.mingchuno" %% "etcd4s-akka-stream" % "0.4.0"

Usage

import org.etcd4s.{Etcd4sClientConfig, Etcd4sClient}
import org.etcd4s.implicits._
import org.etcd4s.formats._
import org.etcd4s.pb.etcdserverpb._

import scala.concurrent.ExecutionContext.Implicits.global

// create the client
val config = Etcd4sClientConfig(
  address = "127.0.0.1",
  port = 2379
)
val client = Etcd4sClient.newClient(config)

// set a key
client.setKey("foo", "bar") // return a Future

// get a key
client.getKey("foo").foreach { result =>
  assert(result == Some("bar"))
}

// delete a key
client.deleteKey("foo").foreach { result =>
  assert(result == 1)
}

// set more key
client.setKey("foo/bar", "Hello")
client.setKey("foo/baz", "World")

// get keys with range
client.getRange("foo/").foreach { result =>
  assert(result.count == 2)
}

// remember to shutdown the client
client.shutdown()

The above is wrapper for simplified APIs. If you want to access all underlying APIs with full options. You can use the corresponding api instance to have more control.

client.kvApi.range(...)
client.kvApi.put(...)
client.leaseApi.leaseGrant(...)
client.electionApi.leader(...)

If you want the Akka Stream support for the stream APIs, you should add the etcd4s-akka-stream depns into your build.sbt

import org.etcd4s.akkasupport._
import org.etcd4s.implicits._
import org.etcd4s.pb.etcdserverpb._
import akka.NotUsed

// assume you have the implicit value and client needed in the scope
val flow: Flow[WatchRequest, WatchResponse, NotUsed] = client.watchApi.watchFlow
val request: WatchRequest = WatchRequest().withCreateRequest(WatchCreateRequest().withKey("foo"))
Source.single(request)
  .via(flow)
  .runForeach { resp =>
    println(resp)
  }

More example usage under the test dir in the repo.

Development

Requirment

  • Java 8+, Scala 12.12.X+, sbt and docker
# to start a background etcd for development
docker-compose up -d

How to start?

Simple! Just sbt test

Publish

This is to remind me how to publish and may switch to sbt-release later

  1. make sure you have ~/.sbt/gpg/ ready with pub/sec key paris
  2. make sure you have ~/.sbt/1.0/sonatype.sbt ready with credentials
  3. sbt "+clean" "+compile"
  4. sbt "+publishSigned"
  5. sbt sonatypeReleaseAll