Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
422
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.84 KB | None | 0 0
  1. CREATE PROCEDURE vpn_assign_nodes(IN node __NODENAME_T__, IN node_count INT)
  2. BEGIN
  3. DROP TABLE IF EXISTS vpn_assign_tmp;
  4. CREATE TEMPORARY TABLE vpn_assign_tmp
  5. SELECT p.vpn_id, p.vpn_type, p.vpn_data, c.cred_id, c.credentials
  6. FROM vpn_pool p JOIN vpn_cred_pool c USING (vpn_type)
  7. WHERE 0;
  8.  
  9. SET @nodes_needed = node_count;
  10. SET @done = 0;
  11. SET @my_vpn_id = NULL;
  12. SET @my_cred_id = NULL;
  13.  
  14. WHILE (@nodes_needed > 0 AND @done != 1) DO
  15.  
  16. START TRANSACTION;
  17.  
  18. SET @my_vpn_id = NULL;
  19.  
  20. SELECT
  21. vpn_pool.vpn_id, vpn_pool.vpn_type, vpn_pool.vpn_data,
  22. cpool.credentials, cpool.cred_id
  23. FROM vpn_pool
  24. JOIN vpn_provider_common AS prov
  25. ON vpn_pool.vpn_type = prov.vpn_type
  26. JOIN vpn_cred_pool cpool
  27. ON (cpool.vpn_type = vpn_pool.vpn_type AND
  28. -- Only select those credentials which haven't been exhausted in full yet
  29. (cpool.cred_busy < prov.semaphore_needed
  30. OR prov.semaphore_needed = 0)
  31. )
  32. WHERE
  33. vpn_pool.vpn_node IS NULL
  34.  
  35. -- No need for randomization, is there?
  36. ORDER BY RAND()
  37. LIMIT 1
  38. INTO @my_vpn_id, @my_vpn_type, @my_vpn_data, @my_credentials, @my_cred_id
  39. FOR UPDATE;
  40.  
  41. IF (@my_vpn_id IS NULL) THEN
  42. SET @done = 1;
  43. COMMIT;
  44. ELSE
  45. INSERT INTO vpn_assign_tmp (vpn_id, vpn_type, vpn_data,
  46. cred_id, credentials)
  47. VALUES(@my_vpn_id, @my_vpn_type, @my_vpn_data, @my_cred_id,
  48. @my_credentials);
  49.  
  50. UPDATE vpn_pool
  51. JOIN vpn_provider_common prov
  52. ON vpn_pool.vpn_type = prov.vpn_type
  53. LEFT OUTER JOIN vpn_cred_pool cpool
  54. ON cpool.cred_id = @my_cred_id
  55. SET vpn_pool.vpn_node = node,
  56. vpn_pool.vpn_conn_id = CONNECTION_ID(),
  57. vpn_pool.last_updated = UNIX_TIMESTAMP(NOW()),
  58. vpn_pool.cred_id = @my_cred_id,
  59. cpool.cred_busy = cpool.cred_busy + 1
  60. WHERE vpn_id = @my_vpn_id;
  61.  
  62. SET @nodes_needed = @nodes_needed - 1;
  63. END IF;
  64. COMMIT;
  65. END WHILE;
  66. SELECT vpn_id, vpn_type, vpn_data, credentials FROM vpn_assign_tmp;
  67. END $$
  68.  
  69. +---------+------+-----------------------------------------------------+
  70. | Level | Code | Message |
  71. +---------+------+-----------------------------------------------------+
  72. | Warning | 1329 | No data - zero rows fetched, selected, or processed |
  73. +---------+------+-----------------------------------------------------+
  74. 1 row in set (0.00 sec)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement