package
0.0.0-20240621172328-9750751a5335
Repository: https://github.com/paypal/junodb.git
Documentation: pkg.go.dev
# README
Juno Golang SDK
Sample Code
package main
import (
"crypto/tls"
"fmt"
"time"
"github.com/paypal/junodb/pkg/client"
cal "github.com/paypal/junodb/pkg/logging/cal/config"
"github.com/paypal/junodb/pkg/util"
)
// addr is a Juno server endpoint in the form "ip:port".
// getTLSConfig is a func to get *tls.Config.
func createClient(addr string, getTLSConfig func() *tls.Config) (client.IClient, error) {
cfg := client.Config{
Appname: "example",
Namespace: "example_namespace",
DefaultTimeToLive: 60, // seconds
ConnectTimeout: util.Duration{1000 * time.Millisecond},
ResponseTimeout: util.Duration{500 * time.Millisecond},
}
cfg.Server.Addr = addr
cfg.Server.SSLEnabled = true // Set to true if addr has an SSL port.
client, err := client.NewWithTLS(cfg, getTLSConfig)
return client, err
}
// Show metadata.
func showInfo(ctx client.IContext) {
fmt.Printf("v=%d ct=%d ttl=%d\n", ctx.GetVersion(), ctx.GetCreationTime(),
ctx.GetTimeToLive())
}
func basicAPI(cli client.IClient) {
key := []byte("test_key")
val := []byte("test_payload")
ctx, err := cli.Create(key, val)
if err != nil {
// log error
}
// Update val slice before call Update
ctx, err = cli.Update(key, val)
if err == nil {
showInfo(ctx)
} else if err != client.ErrNoKey {
// log error
}
_, err = cli.Set(key, val)
if err != nil {
// log error
}
val, _, err = cli.Get(key)
if err != nil && err != client.ErrNoKey {
// log error
}
err = cli.Destroy(key)
if err != nil {
// log error
}
}
// Extend TTL if the value of WithTTL is greater than the current.
func basicAPIwithTTL(cli client.IClient) {
key := []byte("test_key")
val := []byte("test_Payload")
ctx, err := cli.Create(key, val, client.WithTTL(uint32(100)))
if err == nil {
showInfo(ctx)
}
// Update val slice before call Update
ctx, err = cli.Update(key, val, client.WithTTL(uint32(150)))
if err == nil {
showInfo(ctx)
}
ctx, err = cli.Set(key, val, client.WithTTL(uint32(200)))
if err == nil {
showInfo(ctx)
}
val, ctx, err = cli.Get(key, client.WithTTL(uint32(500)))
if err == nil {
showInfo(ctx)
}
err = cli.Destroy(key)
if err != nil {
// log error
}
}
// Test conditional update based on record version.
func condUpdate(cli client.IClient) error {
key := []byte("new_key")
val := []byte("new_payload")
ctx, err := cli.Create(key, val)
if err != nil {
return err
}
ctx, err = cli.Update(key, val)
if err != nil {
return err
}
// Update succeeds if current record version is equal to ctx.GetVersion().
// After the update, record version is incremented.
_, err = cli.Update(key, val, client.WithCond(ctx))
if err != nil {
return err
}
// Expect ErrConditionViolation
// because current record version is not equal to ctx.GetVersion().
_, err = cli.Update(key, val, client.WithCond(ctx))
if err != client.ErrConditionViolation {
return err
}
err = cli.Destroy(key)
if err != nil {
return err
}
return nil
}
func main() {
// Init variables
var addr string // = ...
var getTLSConfig func() *tls.Config // = ...
// A client object should be created only once per unique addr.
cli, err := createClient(addr, getTLSConfig)
if err != nil {
// log error
return
}
basicAPI(cli)
basicAPIwithTTL(cli)
if err := condUpdate(cli); err != nil {
// log error
}
}
# Functions
No description provided by the author
No description provided by the author
WithCond function returns an IOption that sets a context.
WithCorrelationId function returns an IOption that sets a correlationId.
WithTTL function returns an IOption that sets a TTL value.
# Variables
Error when a bad message is encountered.
Error variables for different scenarios in the application.
Error when the server is busy.
Error variables for different scenarios in the application.
Error variables for different scenarios in the application.
Error when an internal problem occurs.
Error variables for different scenarios in the application.
Error when no storage is available.
Error when the operation is not supported.
Error when a record is locked.
Error variables for different scenarios in the application.
Error when TTL extension fails.
Error variables for different scenarios in the application.
Error when a write operation fails.