From: Jonathan Cruz Date: 2015-09-08T18:08:39+00:00 Subject: [ruby-core:70691] Queue enhancement - conditional pop --_004_D2148E5511707jcruztrustwavecom_ Content-Type: multipart/alternative; boundary="_000_D2148E5511707jcruztrustwavecom_" --_000_D2148E5511707jcruztrustwavecom_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I'm submitting a patch to enhance Queue#pop. This allows the caller to prov= ide a block that accepts data from the queue. Queue#pop will return the fir= st element for which the block returns a truthy value, and remove it from t= he queue. Without a block, Queue#pop will behave the same way it currently = does. The motivation for this enhancement: On our project, we have a queue of wor= k and several worker threads. Some work can incur a heavy load on the syste= m and should not be processed while another worker is processing 'heavy loa= d' work. We need a way for Queue#pop to skip over heavy load items while an= other thread is processing heavy load work. -Jonathan Cruz ________________________________ This transmission may contain information that is privileged, confidential,= and/or exempt from disclosure under applicable law. If you are not the int= ended recipient, you are hereby notified that any disclosure, copying, dist= ribution, or use of the information contained herein (including any relianc= e thereon) is strictly prohibited. If you received this transmission in err= or, please immediately contact the sender and destroy the material in its e= ntirety, whether in electronic or hard copy format. --_000_D2148E5511707jcruztrustwavecom_ Content-Type: text/html; charset="iso-8859-1" Content-ID: Content-Transfer-Encoding: quoted-printable
I’m submitting a patch to enhance Queue#pop. This allows the cal= ler to provide a block that accepts data from the queue. Queue#pop will ret= urn the first element for which the block returns a truthy value, and remov= e it from the queue. Without a block, Queue#pop will behave the same way it currently does.

The motivation for this enhancement: On our project, we have a queue o= f work and several worker threads. Some work can incur a heavy load on the = system and should not be processed while another worker is processing 'heav= y load' work. We need a way for Queue#pop to skip over heavy load items while another thread is processing= heavy load work.

-Jonathan Cruz



This transmission may contain information that is privileged, confidential,= and/or exempt from disclosure under applicable law. If you are not the int= ended recipient, you are hereby notified that any disclosure, copying, dist= ribution, or use of the information contained herein (including any reliance thereon) is strictly prohibited. = If you received this transmission in error, please immediately contact the = sender and destroy the material in its entirety, whether in electronic or h= ard copy format.
--_000_D2148E5511707jcruztrustwavecom_-- --_004_D2148E5511707jcruztrustwavecom_ Content-Type: application/octet-stream; name="ruby_queue_conditional_pop.patch" Content-Description: ruby_queue_conditional_pop.patch Content-Disposition: attachment; filename="ruby_queue_conditional_pop.patch"; size=3858; creation-date="Tue, 08 Sep 2015 18:08:39 GMT"; modification-date="Tue, 08 Sep 2015 18:08:39 GMT" Content-ID: Content-Transfer-Encoding: base64 SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDUxNzUy KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAgQEAKK1R1ZSBTZXAg IDkgMDI6MzM6NDUgMjAxNSAgSm9uYXRoYW4gQ3J1eiAgPGpjcnV6QHRydXN0d2F2ZS5jb20+CisK KwkqIHRocmVhZF9zeW5jLmM6IFVwZGF0ZSBRdWV1ZSNwb3Aoc2hvdWxkX2Jsb2NrPXRydWUpCisJ ICBBbGxvdyB0aGUgY2FsbGVyIHRvIHByb3ZpZGUgYSBibG9jayB0aGF0IGFjY2VwdHMgZGF0YSBm cm9tIHRoZQorCSAgcXVldWUuIFJldHVybiB0aGUgZmlyc3QgZWxlbWVudCBmb3Igd2hpY2ggdGhl IGJsb2NrIHJldHVybnMgYQorCSAgdHJ1dGh5IHZhbHVlLCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhl IHF1ZXVlLgorCiBUaHUgU2VwICAzIDIxOjEyOjEyIDIwMTUgIE5vYnV5b3NoaSBOYWthZGEgIDxu b2J1QHJ1YnktbGFuZy5vcmc+CiAKIAkqIGxpYi9jZ2kvc2Vzc2lvbi5yYiAoY3JlYXRlX25ld19p ZCk6IHVzZSBTSEE1MTIgaW5zdGVhZCBvZiBNRDUuCkluZGV4OiB0aHJlYWRfc3luYy5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHRocmVhZF9zeW5jLmMJKHJldmlzaW9uIDUxNzUyKQorKysgdGhyZWFkX3N5bmMu Ywkod29ya2luZyBjb3B5KQpAQCAtNzk0LDI3ICs3OTQsNDcgQEAKIHN0YXRpYyBWQUxVRQogcXVl dWVfZG9fcG9wKFZBTFVFIHNlbGYsIGludCBzaG91bGRfYmxvY2spCiB7CisgICAgVkFMVUUgcXVl ID0gR0VUX1FVRVVFX1FVRShzZWxmKTsKICAgICBzdHJ1Y3Qgd2FpdGluZ19kZWxldGUgYXJnczsK ICAgICBhcmdzLndhaXRpbmcgPSBHRVRfUVVFVUVfV0FJVEVSUyhzZWxmKTsKICAgICBhcmdzLnRo CSA9IHJiX3RocmVhZF9jdXJyZW50KCk7CiAKLSAgICB3aGlsZSAocXVldWVfbGVuZ3RoKHNlbGYp ID09IDApIHsKLQlpZiAoIXNob3VsZF9ibG9jaykgewotCSAgICByYl9yYWlzZShyYl9lVGhyZWFk RXJyb3IsICJxdWV1ZSBlbXB0eSIpOwotCX0KLQllbHNlIGlmIChxdWV1ZV9jbG9zZWRfcChzZWxm KSkgewotCSAgICByZXR1cm4gcXVldWVfY2xvc2VkX3Jlc3VsdChzZWxmKTsKLQl9Ci0JZWxzZSB7 Ci0JICAgIGFzc2VydChxdWV1ZV9sZW5ndGgoc2VsZikgPT0gMCk7Ci0JICAgIGFzc2VydChxdWV1 ZV9jbG9zZWRfcChzZWxmKSA9PSAwKTsKKyAgIGZvcig7OykgeworICAgICAgICBWQUxVRSBvYmog PSAwOworICAgICAgICBpbnQgb2JqX2luZGV4ID0gLTE7CiAKLQkgICAgcmJfYXJ5X3B1c2goYXJn cy53YWl0aW5nLCBhcmdzLnRoKTsKLQkgICAgcmJfZW5zdXJlKHF1ZXVlX3NsZWVwLCAoVkFMVUUp MCwgcXVldWVfZGVsZXRlX2Zyb21fd2FpdGluZywgKFZBTFVFKSZhcmdzKTsKLQl9CisgICAgICAg IGlmIChyYl9ibG9ja19naXZlbl9wKCkpIHsKKyAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgUkFS UkFZX0xFTihxdWUpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBvYmogPSBSQVJSQVlfQVJFRihx dWUsIGkpCisgICAgICAgICAgICAgICAgaWYgKHJiX3lpZWxkKG9iaikpIHsKKyAgICAgICAgICAg ICAgICAgICAgb2JqX2luZGV4ID0gaTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYg KFJBUlJBWV9MRU4ocXVlKSA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiByYl9hcnlfc2hpZnQo cXVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvYmpfaW5kZXggPj0gMCkgeworICAgICAg ICAgICAgcmJfYXJ5X2RlbGV0ZV9hdChxdWUsIG9ial9pbmRleCk7CisgICAgICAgICAgICByZXR1 cm4gb2JqOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzaG91bGRfYmxvY2spIHsKKyAgICAg ICAgICAgIHJiX3JhaXNlKHJiX2VUaHJlYWRFcnJvciwgInF1ZXVlIGVtcHR5Iik7CisgICAgICAg IH0KKyAgICAgICAgZWxzZSBpZiAocXVldWVfY2xvc2VkX3Aoc2VsZikpIHsKKyAgICAgICAgICAg IHJldHVybiBxdWV1ZV9jbG9zZWRfcmVzdWx0KHNlbGYpOworICAgICAgICB9CisgICAgICAgIGVs c2UgeworICAgICAgICAgICAgYXNzZXJ0KHF1ZXVlX2xlbmd0aChzZWxmKSA9PSAwKTsKKyAgICAg ICAgICAgIGFzc2VydChxdWV1ZV9jbG9zZWRfcChzZWxmKSA9PSAwKTsKKworICAgICAgICAgICAg cmJfYXJ5X3B1c2goYXJncy53YWl0aW5nLCBhcmdzLnRoKTsKKyAgICAgICAgICAgIHJiX2Vuc3Vy ZShxdWV1ZV9zbGVlcCwgKFZBTFVFKTAsIHF1ZXVlX2RlbGV0ZV9mcm9tX3dhaXRpbmcsIChWQUxV RSkmYXJncyk7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICByZXR1cm4gcmJfYXJ5X3NoaWZ0KEdF VF9RVUVVRV9RVUUoc2VsZikpOwogfQogCiBzdGF0aWMgaW50CkBAIC04MzUsMTEgKzg1NSwxMiBA QAogICogICBkZXEobm9uX2Jsb2NrPWZhbHNlKQogICogICBzaGlmdChub25fYmxvY2s9ZmFsc2Up CiAgKgotICogUmV0cmlldmVzIGRhdGEgZnJvbSB0aGUgcXVldWUuCisgKiBSZXRyaWV2ZXMgZGF0 YSBmcm9tIHRoZSBxdWV1ZS4gSWYgK2Jsb2NrKyBpcyBnaXZlbiwgcmV0cmlldmVzIGRhdGEgZnJv bSB0aGUKKyAqIHF1ZXVlIGZvciB3aGljaCB0aGUgZ2l2ZW4gK2Jsb2NrKyByZXR1cm5zIGEgdHJ1 ZSB2YWx1ZS4KICAqCi0gKiBJZiB0aGUgcXVldWUgaXMgZW1wdHksIHRoZSBjYWxsaW5nIHRocmVh ZCBpcyBzdXNwZW5kZWQgdW50aWwgZGF0YSBpcyBwdXNoZWQKLSAqIG9udG8gdGhlIHF1ZXVlLiBJ ZiArbm9uX2Jsb2NrKyBpcyB0cnVlLCB0aGUgdGhyZWFkIGlzbid0IHN1c3BlbmRlZCwgYW5kIGFu Ci0gKiBleGNlcHRpb24gaXMgcmFpc2VkLgorICogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IChvciAr YmxvY2srIG5ldmVyIHJldHVybnMgdHJ1ZSksIHRoZSBjYWxsaW5nIHRocmVhZCBpcworICogc3Vz cGVuZGVkIHVudGlsIGRhdGEgaXMgcHVzaGVkIG9udG8gdGhlIHF1ZXVlLiBJZiArbm9uX2Jsb2Nr KyBpcyB0cnVlLCB0aGUKKyAqIHRocmVhZCBpc24ndCBzdXNwZW5kZWQsIGFuZCBhbiBleGNlcHRp b24gaXMgcmFpc2VkLgogICovCiAKIHN0YXRpYyBWQUxVRQpAQCAtMTA2NywxMSArMTA4OCwxNCBA QAogICogICBkZXEobm9uX2Jsb2NrPWZhbHNlKQogICogICBzaGlmdChub25fYmxvY2s9ZmFsc2Up CiAgKgotICogUmV0cmlldmVzIGRhdGEgZnJvbSB0aGUgcXVldWUuCisgKiBSZXRyaWV2ZXMgZGF0 YSBmcm9tIHRoZSBxdWV1ZS4gSWYgK2Jsb2NrKyBpcyBnaXZlbiwgcmV0cmlldmVzIGRhdGEgZnJv bSB0aGUKKyAqIHF1ZXVlIGZvciB3aGljaCB0aGUgZ2l2ZW4gK2Jsb2NrKyByZXR1cm5zIGEgdHJ1 ZSB2YWx1ZS4KICAqCi0gKiBJZiB0aGUgcXVldWUgaXMgZW1wdHksIHRoZSBjYWxsaW5nIHRocmVh ZCBpcyBzdXNwZW5kZWQgdW50aWwgZGF0YSBpcyBwdXNoZWQKLSAqIG9udG8gdGhlIHF1ZXVlLiBJ ZiArbm9uX2Jsb2NrKyBpcyB0cnVlLCB0aGUgdGhyZWFkIGlzbid0IHN1c3BlbmRlZCwgYW5kIGFu Ci0gKiBleGNlcHRpb24gaXMgcmFpc2VkLgorICogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5IChvciAr YmxvY2srIG5ldmVyIHJldHVybnMgdHJ1ZSksIHRoZSBjYWxsaW5nIHRocmVhZCBpcworICogc3Vz cGVuZGVkIHVudGlsIGRhdGEgaXMgcHVzaGVkIG9udG8gdGhlIHF1ZXVlLiBJZiArbm9uX2Jsb2Nr KyBpcyB0cnVlLCB0aGUKKyAqIHRocmVhZCBpc24ndCBzdXNwZW5kZWQsIGFuZCBhbiBleGNlcHRp b24gaXMgcmFpc2VkLgorCisKICAqLwogCiBzdGF0aWMgVkFMVUUK --_004_D2148E5511707jcruztrustwavecom_--