You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@whimsical.apache.org by sebb AT ASF <se...@apache.org> on 2016/01/27 23:41:03 UTC

Re: [whimsy.git] [1/1] Commit 6c30425: Add Service preload

On 27 January 2016 at 22:35, Sebastian Bazley <se...@apache.org> wrote:
> Commit 6c30425b44a9b9bc3a25312b4c8afda20ec412e2:
>     Add Service preload
>
>
> Branch: refs/heads/master
> Author: Sebb <se...@apache.org>
> Committer: Sebb <se...@apache.org>
> Pusher: sebb <se...@apache.org>
>
> ------------------------------------------------------------
> lib/whimsy/asf/ldap.rb                                       | +++++++++++ -
> ------------------------------------------------------------
> 24 changes: 22 additions, 2 deletions.
> ------------------------------------------------------------
>
>
> diff --git a/lib/whimsy/asf/ldap.rb b/lib/whimsy/asf/ldap.rb
> index a9e2503..11686f0 100644
> --- a/lib/whimsy/asf/ldap.rb
> +++ b/lib/whimsy/asf/ldap.rb
> @@ -456,9 +456,29 @@ def dn
>        "cn=#{id},#{self.class.base}"
>      end
>
> +    def self.preload
> +      Hash[ASF.search_one(base, "cn=*", %w(dn member modifyTimestamp)).map do |results|
> +        cn = results['dn'].first[/^cn=(.*?),/, 1]
> +        service = ASF::Service.find(cn)
> +        service.modifyTimestamp = results['modifyTimestamp'].first # it is returned as an array of 1 entry
> +        members = results['member'] || []
> +        service.members = members

Note that Group does this instead:

        members = results['memberUid']
        group.members = members || []

However it seemed to me that one would want members to be the same as
group.members, so the alternate should be on the previous line
 - or have I misunderstood?

Note that Committee.preload does not currently check for null -
perhaps it should ?

> +        [service, members]
> +      end]
> +    end
> +
> +    attr_accessor :modifyTimestamp
> +
> +    def members=(members)
> +      @members = WeakRef.new(members)
> +    end
> +
>      def members
> -      ASF.search_one(base, "cn=#{name}", 'member').flatten.
> -        map {|uid| Person.find uid[/uid=(.*?),/,1]}
> +      members = weakref(:members) do
> +        ASF.search_one(base, "cn=#{name}", 'member').flatten
> +      end
> +
> +      members.map {|uid| Person.find uid[/uid=(.*?),/,1]}
>      end
>
>      def remove(people)

Re: [whimsy.git] [1/1] Commit 6c30425: Add Service preload

Posted by sebb AT ASF <se...@apache.org>.
On 27 January 2016 at 22:41, sebb AT ASF <se...@apache.org> wrote:
> On 27 January 2016 at 22:35, Sebastian Bazley <se...@apache.org> wrote:
>> Commit 6c30425b44a9b9bc3a25312b4c8afda20ec412e2:
>>     Add Service preload
>>
>>
>> Branch: refs/heads/master
>> Author: Sebb <se...@apache.org>
>> Committer: Sebb <se...@apache.org>
>> Pusher: sebb <se...@apache.org>
>>
>> ------------------------------------------------------------
>> lib/whimsy/asf/ldap.rb                                       | +++++++++++ -
>> ------------------------------------------------------------
>> 24 changes: 22 additions, 2 deletions.
>> ------------------------------------------------------------
>>
>>
>> diff --git a/lib/whimsy/asf/ldap.rb b/lib/whimsy/asf/ldap.rb
>> index a9e2503..11686f0 100644
>> --- a/lib/whimsy/asf/ldap.rb
>> +++ b/lib/whimsy/asf/ldap.rb
>> @@ -456,9 +456,29 @@ def dn
>>        "cn=#{id},#{self.class.base}"
>>      end
>>
>> +    def self.preload
>> +      Hash[ASF.search_one(base, "cn=*", %w(dn member modifyTimestamp)).map do |results|
>> +        cn = results['dn'].first[/^cn=(.*?),/, 1]
>> +        service = ASF::Service.find(cn)
>> +        service.modifyTimestamp = results['modifyTimestamp'].first # it is returned as an array of 1 entry
>> +        members = results['member'] || []
>> +        service.members = members
>
> Note that Group does this instead:
>
>         members = results['memberUid']
>         group.members = members || []
>
> However it seemed to me that one would want members to be the same as
> group.members, so the alternate should be on the previous line
>  - or have I misunderstood?
>
> Note that Committee.preload does not currently check for null -
> perhaps it should ?

See commit

90ca560

Turned out it is necessary to set members to the empty array,
otherwise we don't cache groups with no members.
This is because LDAP search returns no data for empty groups.

>> +        [service, members]
>> +      end]
>> +    end
>> +
>> +    attr_accessor :modifyTimestamp
>> +
>> +    def members=(members)
>> +      @members = WeakRef.new(members)
>> +    end
>> +
>>      def members
>> -      ASF.search_one(base, "cn=#{name}", 'member').flatten.
>> -        map {|uid| Person.find uid[/uid=(.*?),/,1]}
>> +      members = weakref(:members) do
>> +        ASF.search_one(base, "cn=#{name}", 'member').flatten
>> +      end
>> +
>> +      members.map {|uid| Person.find uid[/uid=(.*?),/,1]}
>>      end
>>
>>      def remove(people)