Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DELIMITER $$
- CREATE PROCEDURE mk_on_es_pair(IN oaddr VARCHAR(24), IN stealth_min INT, IN stealth_max INT, IN pri INT)
- BEGIN
- CREATE TEMPORARY TABLE IF NOT EXISTS en_tmp ENGINE = MEMORY SELECT * FROM en_tbl WHERE 0;
- SET @oid = (SELECT os_id FROM os_tbl WHERE os_addr = oaddr);
- IF (@oid is NULL) THEN
- INSERT INTO os_tbl(os_addr) VALUES (oaddr);
- SET @oid = LAST_INSERT_ID();
- END IF;
- -- Select an EN that doesn't already have our OS paired with it..
- -- If this is a high-priority route (e.g. something that we use for an API, and must absolutely use)
- -- Then ignore restrictions, but still use the same selection algorithm
- INSERT INTO en_tmp
- SELECT * from en_tbl
- WHERE
- NOT EXISTS (
- SELECT os_id, en_id FROM pairing_tbl
- WHERE pairing_tbl.os_id = @oid
- AND pairing_tbl.en_id = en_tbl.en_id
- AND pri=0
- )
- AND (en_tbl.rs_free > 0 OR pri > 0)
- AND (en_tbl.rs_count < __RS_MAX_COUNT__ OR pri > 0)
- AND en_tbl.stealth BETWEEN stealth_min AND stealth_max
- AND en_tbl.route_expires > UNIX_TIMESTAMP(NOW())
- ORDER BY en_bw DESC, rs_count ASC, route_create_time ASC, route_expires ASC
- LIMIT 1;
- IF (ROW_COUNT()) THEN
- SET @uuid = MyUUID();
- UPDATE en_tbl SET
- rs_count = (rs_count +1),
- rs_busy = (rs_busy + 1),
- rs_free = (rs_free - 1)
- WHERE en_id = (SELECT en_id FROM en_tmp);
- INSERT INTO pairing_tbl(os_id, en_id, cr_time, pair_assigned, pair_uuid)
- VALUES(@oid, (SELECT en_id FROM en_tmp LIMIT 1),
- UNIX_TIMESTAMP(NOW()), 1, @uuid);
- END IF;
- SELECT *, @uuid AS pair_uuid FROM en_tmp;
- DROP TABLE IF EXISTS en_tmp;
- COMMIT;
- END $$
- DELIMITER ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement