示例#1
0
// allocateNodeID increments the node id generator key to allocate
// a new, unique node id.
func allocateNodeID(db kv.DB) (int32, error) {
	ir := <-db.Increment(&storage.IncrementRequest{
		Key:       storage.KeyNodeIDGenerator,
		Increment: 1,
	})
	if ir.Error != nil {
		return 0, util.Errorf("unable to allocate node ID: %v", ir.Error)
	}
	return int32(ir.NewValue), nil
}
示例#2
0
// allocateStoreIDs increments the store id generator key for the
// specified node to allocate "inc" new, unique store ids. The
// first ID in a contiguous range is returned on success.
func allocateStoreIDs(nodeID int32, inc int64, db kv.DB) (int32, error) {
	ir := <-db.Increment(&storage.IncrementRequest{
		// The Key is a concatenation of StoreIDGeneratorPrefix and this node's ID.
		Key: storage.MakeKey(storage.KeyStoreIDGeneratorPrefix,
			[]byte(strconv.Itoa(int(nodeID)))),
		Increment: inc,
	})
	if ir.Error != nil {
		return 0, util.Errorf("unable to allocate %d store IDs for node %d: %v", inc, nodeID, ir.Error)
	}
	return int32(ir.NewValue - inc + 1), nil
}