blob: 022e2bb8938e4e36f423a3f1d1d6e92dca0583ce [file] [log] [blame]
// Copyright 2016 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package internal
import (
"bytes"
"encoding/binary"
"google.golang.org/cloud/bigtable"
"v.io/v23/context"
"v.io/v23/verror"
)
func incrementCounter(ctx *context.T, bt *BigTable, name string, delta int64) (int64, error) {
bctx, cancel := btctx(ctx)
defer cancel()
m := bigtable.NewReadModifyWrite()
m.Increment(metadataFamily, "c", delta)
row, err := bt.counterTbl.ApplyReadModifyWrite(bctx, name, m)
if err != nil {
return 0, err
}
return decodeCounterValue(ctx, row)
}
func decodeCounterValue(ctx *context.T, row bigtable.Row) (c int64, err error) {
if len(row[metadataFamily]) != 1 {
return 0, verror.NewErrInternal(ctx)
}
b := row[metadataFamily][0].Value
err = binary.Read(bytes.NewReader(b), binary.BigEndian, &c)
return
}
func incrementCreatorNodeCount(ctx *context.T, bt *BigTable, creator string, delta int64) error {
if delta == 0 {
return nil
}
_, err := incrementCounter(ctx, bt, "num-nodes-per-user:"+creator, delta)
return err
}
func incrementCreatorServerCount(ctx *context.T, bt *BigTable, creator string, delta int64) error {
if delta == 0 {
return nil
}
_, err := incrementCounter(ctx, bt, "num-servers-per-user:"+creator, delta)
return err
}