public void run(ClientWithLoad client) { try { StdErrorOut.Instance.StdOut(LogLevel.debug, "Kinesistask.run"); if (!started_) { started_ = true; kinesisClient_ = client.ActualClient; start_ = DateTime.Now; end_deadline_ = start_.AddMilliseconds(timeout_); StdErrorOut.Instance.StdOut(LogLevel.debug, "Kinesistask.run before Execute();"); Execute(); Interlocked.Decrement(ref client.Load); } else { Interlocked.Decrement(ref client.Load); throw new Exception("The same task cannot be run more than once"); } } catch (Exception e) { StdErrorOut.Instance.StdError("Error in Kinesis Task run", e); } }
public ClientWithLoad GetNextLeastUsedClient() { ClientWithLoad retVal = null; lock (clients) retVal = clients.Min((clientWL) => clientWL); Interlocked.Increment(ref retVal.Load); return(retVal); }
void CreateClients(int maxConnections) { try { clients = new ClientWithLoad[maxConnections]; for (int i = 0; i < maxConnections; i++) { clients[i] = new ClientWithLoad() { ActualClient = string.IsNullOrEmpty(cred_.SessionToken) ? new AmazonKinesisClient(cred_.Akid, cred_.SecretKey, region_) : new AmazonKinesisClient(cred_.Akid, cred_.SecretKey, cred_.SessionToken, region_) } } ; } catch (Exception ex) { StdErrorOut.Instance.StdOut(LogLevel.error, ex.ToString()); throw ex; } }