Calling function within class.

Arafel er.krali at gmail.com
Fri Nov 20 08:04:54 UTC 2020


On 19/11/20 20:51, Vino wrote:
> Hi Ali,
> 
> Thank you very much, your solution works for my example, but it does not 
> work for the main goal, let me explain what we are trying to perform.
> 
> Nut shell: Try to execute an aws command on sever accounts in parallel 
> to get some data.
> 
> Noe: each account has as separate username and password store in a 
> database table(encrypted).
> 
> Cod Logic
> Fetch the username/ password from the table for each account.
> 
> Get the “awssecrete” key and “accesskey” for each account by calling an 
> aws api using the above username/password.
> 
> Set the fetched key’s as an environment variable.
> 
> Execute the aws command and get the data for each of the account
> 
>    As we have many accounts what we are trying is to get the data in 
> parallel(execute the aws command in parallel for each account and store 
> the result in a array). At present our code is working fine(without 
> parallel), the moment we enable parallelism, it is throwing an error on 
> the SQL part (Fetch the username/ password from the table for each 
> account), as it could not execute the SQL query in parallel for 
> different account. If there is any other logic please do let me know 
> will give it a try. Below is the SQL code.
> 
> @trusted public auto getAwsconf(immutable string account)
> {
>   auto con = new GetConnections();
>   Statement stmt = con.db.prepare("SELECT 
> username,AES_DECRYPT(b.userpass,b.key,b.vector) AS passwd FROM config 
> WHERE account = :account");
>   stmt.setParameter("account", account);
>   RowSet awsaccount = stmt.query();
>   scope(exit) con.db.close();
>   return awsaccount;
> }
> 
> From,
> Vino.B

Hi,

How does the `GetConnections()` constructor work? Is it creating a new 
connection to the DB each time it's called, or is it getting them from a 
pool? In any case it should probably return a different connection for 
each thread (so the pool size should be at least the same as the number 
of workers).

Otherwise one thread will try to start a new SQL operation while there 
is another already running. In the best case, if the library is 
thread-safe, it could enqueue them thus negating the benefit of 
parallelism... if not, then you'll likely get errors like the ones 
you're seeing.

Best,

A.


More information about the Digitalmars-d-learn mailing list