Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE PROCEDURE vpn_assign_nodes(IN node __NODENAME_T__, IN node_count INT)
- BEGIN
- DROP TABLE IF EXISTS vpn_assign_tmp;
- CREATE TEMPORARY TABLE vpn_assign_tmp
- SELECT p.vpn_id, p.vpn_type, p.vpn_data, c.cred_id, c.credentials
- FROM vpn_pool p JOIN vpn_cred_pool c USING (vpn_type)
- WHERE 0;
- SET @nodes_needed = node_count;
- SET @done = 0;
- SET @my_vpn_id = NULL;
- SET @my_cred_id = NULL;
- WHILE (@nodes_needed > 0 AND @done != 1) DO
- START TRANSACTION;
- SET @my_vpn_id = NULL;
- SELECT
- vpn_pool.vpn_id, vpn_pool.vpn_type, vpn_pool.vpn_data,
- cpool.credentials, cpool.cred_id
- FROM vpn_pool
- JOIN vpn_provider_common AS prov
- ON vpn_pool.vpn_type = prov.vpn_type
- JOIN vpn_cred_pool cpool
- ON (cpool.vpn_type = vpn_pool.vpn_type AND
- -- Only select those credentials which haven't been exhausted in full yet
- (cpool.cred_busy < prov.semaphore_needed
- OR prov.semaphore_needed = 0)
- )
- WHERE
- vpn_pool.vpn_node IS NULL
- -- No need for randomization, is there?
- ORDER BY RAND()
- LIMIT 1
- INTO @my_vpn_id, @my_vpn_type, @my_vpn_data, @my_credentials, @my_cred_id
- FOR UPDATE;
- IF (@my_vpn_id IS NULL) THEN
- SET @done = 1;
- COMMIT;
- ELSE
- INSERT INTO vpn_assign_tmp (vpn_id, vpn_type, vpn_data,
- cred_id, credentials)
- VALUES(@my_vpn_id, @my_vpn_type, @my_vpn_data, @my_cred_id,
- @my_credentials);
- UPDATE vpn_pool
- JOIN vpn_provider_common prov
- ON vpn_pool.vpn_type = prov.vpn_type
- LEFT OUTER JOIN vpn_cred_pool cpool
- ON cpool.cred_id = @my_cred_id
- SET vpn_pool.vpn_node = node,
- vpn_pool.vpn_conn_id = CONNECTION_ID(),
- vpn_pool.last_updated = UNIX_TIMESTAMP(NOW()),
- vpn_pool.cred_id = @my_cred_id,
- cpool.cred_busy = cpool.cred_busy + 1
- WHERE vpn_id = @my_vpn_id;
- SET @nodes_needed = @nodes_needed - 1;
- END IF;
- COMMIT;
- END WHILE;
- SELECT vpn_id, vpn_type, vpn_data, credentials FROM vpn_assign_tmp;
- END $$
- +---------+------+-----------------------------------------------------+
- | Level | Code | Message |
- +---------+------+-----------------------------------------------------+
- | Warning | 1329 | No data - zero rows fetched, selected, or processed |
- +---------+------+-----------------------------------------------------+
- 1 row in set (0.00 sec)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement