// allocateNodeID increments the node id generator key to allocate // a new, unique node id. func allocateNodeID(db storage.DB) (int32, error) { ir := <-db.Increment(&proto.IncrementRequest{ RequestHeader: proto.RequestHeader{ Key: engine.KeyNodeIDGenerator, User: storage.UserRoot, }, Increment: 1, }) if ir.Error != nil { return 0, util.Errorf("unable to allocate node ID: %v", ir.Error) } return int32(ir.NewValue), nil }
// 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 storage.DB) (int32, error) { ir := <-db.Increment(&proto.IncrementRequest{ // The Key is a concatenation of StoreIDGeneratorPrefix and this node's ID. RequestHeader: proto.RequestHeader{ Key: engine.MakeKey(engine.KeyStoreIDGeneratorPrefix, []byte(strconv.Itoa(int(nodeID)))), User: storage.UserRoot, }, 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 }