Archive Policy not reflecting in Hyperkitty
So the issue I am seeing is that when I set a lists archive policy to prviate, it isn't reflecting that in Hyperkitty.
I am running the docker installation of Mailman, postorius and hyperkitty. So I go into the docker instance of mailman-core and run this:
python3 manage.py shell from hyperkitty.models.mailinglist import MailingList MailingList.objects.all().values_list('name', 'archive_policy')
And all my lists are showing '2', regardless of how I set the mailing list archive policy.
This might be a duplicate of https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/3...
Am I missing something in my install? Or is this a bug?
Many thanks for your attention,
--
*Nathan Dixon* MEng Senior Software Architect m: +44 (0)7402 690311
t: +44 (0)20 81231252 e: nathan.dixon@evadon.com w: www.evadon.com
This e-mail and any attachments are confidential and may be protected by legal, professional or other privilege. If you are not the intended recipient you should not store it, copy it, re-transmit it, use it or disclose its contents, but should return it to the sender immediately and delete your copy from your system. The views expressed are those of the sender and not necessarily those of Evadon. Please note that whilst we scan all e-mails for viruses we cannot guarantee that any e-mail is virus-free. Please be advised that we expressly reserve the right to monitor email content for the purposes of ensuring compliance with legal requirements and company policies and your sending to, or receiving from, us of any email constitutes your agreement to these terms.
Evadon Dynamics Limited, registered in England No. 09494097. Registered Office: Electric Works, Sheffield Digital Campus, 3 Concourse Way, Sheffield, S1 2BJ
On Fri, May 3, 2019, at 8:38 AM, Nathan Dixon wrote:
So the issue I am seeing is that when I set a lists archive policy to prviate, it isn't reflecting that in Hyperkitty.
I am running the docker installation of Mailman, postorius and hyperkitty. So I go into the docker instance of mailman-core and run this:
python3 manage.py shell from hyperkitty.models.mailinglist import MailingList MailingList.objects.all().values_list('name', 'archive_policy')
And all my lists are showing '2', regardless of how I set the mailing list archive policy.
This might be a duplicate of https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/3...
Am I missing something in my install? Or is this a bug?
It can take upto an hour for this change to reflect in Hyperkitty. Did you wait for that long?
This happens because Hyperkitty stores it's own data, and queries Mailman Core periodically to fetch updates every hour. In future, we might be able to do this in more realtime fashion by using an event based pub/sub model. But, we are not there yet.
Many thanks for your attention,
--
*Nathan Dixon* MEng Senior Software Architect m: +44 (0)7402 690311
t: +44 (0)20 81231252 e: nathan.dixon@evadon.com w: www.evadon.com
This e-mail and any attachments are confidential and may be protected by legal, professional or other privilege. If you are not the intended recipient you should not store it, copy it, re-transmit it, use it or disclose its contents, but should return it to the sender immediately and delete your copy from your system. The views expressed are those of the sender and not necessarily those of Evadon. Please note that whilst we scan all e-mails for viruses we cannot guarantee that any e-mail is virus-free. Please be advised that we expressly reserve the right to monitor email content for the purposes of ensuring compliance with legal requirements and company policies and your sending to, or receiving from, us of any email constitutes your agreement to these terms.
Evadon Dynamics Limited, registered in England No. 09494097. Registered Office: Electric Works, Sheffield Digital Campus, 3 Concourse Way, Sheffield, S1 2BJ
Mailman-users mailing list -- mailman-users@mailman3.org To unsubscribe send an email to mailman-users-leave@mailman3.org https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
-- thanks, Abhilash Raj (maxking)
The change to the archiving policy aren't reflected in Hyperkitty after many days for all the lists.
The only error that I am seeing in the /web/mailmanweb.log is: INFO 2019-05-02 14:16:55,062 38 hyperkitty.tasks AsyncTask task "<function unlock_and_call at 0x7f5d8851f048>" with args "(<function update_from_mailman at 0x7f5d88544a60>, 'task:status:%s:%s', '<list address>')" and kwargs "{}" finished with errors.
I'm not sure if that could be related? (I have changed the actual list address to <list address> for security reasons)
Thank you
On Sat, 4 May 2019 at 16:24, Abhilash Raj <maxking@asynchronous.in> wrote:
So the issue I am seeing is that when I set a lists archive policy to prviate, it isn't reflecting that in Hyperkitty.
I am running the docker installation of Mailman, postorius and hyperkitty. So I go into the docker instance of mailman-core and run this:
python3 manage.py shell from hyperkitty.models.mailinglist import MailingList MailingList.objects.all().values_list('name', 'archive_policy')
And all my lists are showing '2', regardless of how I set the mailing
On Fri, May 3, 2019, at 8:38 AM, Nathan Dixon wrote: list
archive policy.
This might be a duplicate of
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/3...
Am I missing something in my install? Or is this a bug?
It can take upto an hour for this change to reflect in Hyperkitty. Did you wait for that long?
This happens because Hyperkitty stores it's own data, and queries Mailman Core periodically to fetch updates every hour. In future, we might be able to do this in more realtime fashion by using an event based pub/sub model. But, we are not there yet.
Many thanks for your attention,
--
*Nathan Dixon* MEng Senior Software Architect m: +44 (0)7402 690311
t: +44 (0)20 81231252 e: nathan.dixon@evadon.com w: www.evadon.com
This e-mail and any attachments are confidential and may be protected by legal, professional or other privilege. If you are not the intended recipient you should not store it, copy it, re-transmit it, use it or disclose its contents, but should return it to the sender immediately and delete your copy from your system. The views expressed are those of the sender and not necessarily those of Evadon. Please note that whilst we
scan
all e-mails for viruses we cannot guarantee that any e-mail is virus-free. Please be advised that we expressly reserve the right to monitor email content for the purposes of ensuring compliance with legal requirements and company policies and your sending to, or receiving from, us of any email constitutes your agreement to these terms.
Evadon Dynamics Limited, registered in England No. 09494097. Registered Office: Electric Works, Sheffield Digital Campus, 3 Concourse Way, Sheffield, S1 2BJ
Mailman-users mailing list -- mailman-users@mailman3.org To unsubscribe send an email to mailman-users-leave@mailman3.org https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
-- thanks, Abhilash Raj (maxking)
Mailman-users mailing list -- mailman-users@mailman3.org To unsubscribe send an email to mailman-users-leave@mailman3.org https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
--
*Nathan Dixon* MEng Senior Software Architect m: +44 (0)7402 690311
t: +44 (0)20 81231252 e: nathan.dixon@evadon.com w: www.evadon.com
This e-mail and any attachments are confidential and may be protected by legal, professional or other privilege. If you are not the intended recipient you should not store it, copy it, re-transmit it, use it or disclose its contents, but should return it to the sender immediately and delete your copy from your system. The views expressed are those of the sender and not necessarily those of Evadon. Please note that whilst we scan all e-mails for viruses we cannot guarantee that any e-mail is virus-free. Please be advised that we expressly reserve the right to monitor email content for the purposes of ensuring compliance with legal requirements and company policies and your sending to, or receiving from, us of any email constitutes your agreement to these terms.
Evadon Dynamics Limited, registered in England No. 09494097. Registered Office: Electric Works, Sheffield Digital Campus, 3 Concourse Way, Sheffield, S1 2BJ
I'm not sure if it's also related, but within the mailman-web and mailman-core docker containers, crontab -e only shows these entries: # do daily/weekly/monthly maintenance # min hour day month weekday command */15 * * * * run-parts /etc/periodic/15min 0 * * * * run-parts /etc/periodic/hourly 0 2 * * * run-parts /etc/periodic/daily 0 3 * * 6 run-parts /etc/periodic/weekly 0 5 1 * * run-parts /etc/periodic/monthly
And all of those folders are empty.
I'm not sure where the synchronisation task for Hyperkitty should actually being run from?
Thank you
On Tue, 7 May 2019 at 10:20, Nathan Dixon <nathan.dixon@evadon.com> wrote:
The change to the archiving policy aren't reflected in Hyperkitty after many days for all the lists.
The only error that I am seeing in the /web/mailmanweb.log is: INFO 2019-05-02 14:16:55,062 38 hyperkitty.tasks AsyncTask task "<function unlock_and_call at 0x7f5d8851f048>" with args "(<function update_from_mailman at 0x7f5d88544a60>, 'task:status:%s:%s', '<list address>')" and kwargs "{}" finished with errors.
I'm not sure if that could be related? (I have changed the actual list address to <list address> for security reasons)
Thank you
On Sat, 4 May 2019 at 16:24, Abhilash Raj <maxking@asynchronous.in> wrote:
So the issue I am seeing is that when I set a lists archive policy to prviate, it isn't reflecting that in Hyperkitty.
I am running the docker installation of Mailman, postorius and hyperkitty. So I go into the docker instance of mailman-core and run this:
python3 manage.py shell from hyperkitty.models.mailinglist import MailingList MailingList.objects.all().values_list('name', 'archive_policy')
And all my lists are showing '2', regardless of how I set the mailing
On Fri, May 3, 2019, at 8:38 AM, Nathan Dixon wrote: list
archive policy.
This might be a duplicate of
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/3...
Am I missing something in my install? Or is this a bug?
It can take upto an hour for this change to reflect in Hyperkitty. Did you wait for that long?
This happens because Hyperkitty stores it's own data, and queries Mailman Core periodically to fetch updates every hour. In future, we might be able to do this in more realtime fashion by using an event based pub/sub model. But, we are not there yet.
Many thanks for your attention,
--
*Nathan Dixon* MEng Senior Software Architect m: +44 (0)7402 690311
t: +44 (0)20 81231252 e: nathan.dixon@evadon.com w: www.evadon.com
This e-mail and any attachments are confidential and may be protected by legal, professional or other privilege. If you are not the intended recipient you should not store it, copy it, re-transmit it, use it or disclose its contents, but should return it to the sender immediately
and
delete your copy from your system. The views expressed are those of the sender and not necessarily those of Evadon. Please note that whilst we scan all e-mails for viruses we cannot guarantee that any e-mail is virus-free. Please be advised that we expressly reserve the right to monitor email content for the purposes of ensuring compliance with legal requirements and company policies and your sending to, or receiving from, us of any email constitutes your agreement to these terms.
Evadon Dynamics Limited, registered in England No. 09494097. Registered Office: Electric Works, Sheffield Digital Campus, 3 Concourse Way, Sheffield, S1 2BJ
Mailman-users mailing list -- mailman-users@mailman3.org To unsubscribe send an email to mailman-users-leave@mailman3.org https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
-- thanks, Abhilash Raj (maxking)
Mailman-users mailing list -- mailman-users@mailman3.org To unsubscribe send an email to mailman-users-leave@mailman3.org https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
--
*Nathan Dixon* MEng Senior Software Architect m: +44 (0)7402 690311
t: +44 (0)20 81231252 e: nathan.dixon@evadon.com w: www.evadon.com
This e-mail and any attachments are confidential and may be protected by legal, professional or other privilege. If you are not the intended recipient you should not store it, copy it, re-transmit it, use it or disclose its contents, but should return it to the sender immediately and delete your copy from your system. The views expressed are those of the sender and not necessarily those of Evadon. Please note that whilst we scan all e-mails for viruses we cannot guarantee that any e-mail is virus-free. Please be advised that we expressly reserve the right to monitor email content for the purposes of ensuring compliance with legal requirements and company policies and your sending to, or receiving from, us of any email constitutes your agreement to these terms.
Evadon Dynamics Limited, registered in England No. 09494097. Registered Office: Electric Works, Sheffield Digital Campus, 3 Concourse Way, Sheffield, S1 2BJ
--
*Nathan Dixon* MEng Senior Software Architect m: +44 (0)7402 690311
t: +44 (0)20 81231252 e: nathan.dixon@evadon.com w: www.evadon.com
This e-mail and any attachments are confidential and may be protected by legal, professional or other privilege. If you are not the intended recipient you should not store it, copy it, re-transmit it, use it or disclose its contents, but should return it to the sender immediately and delete your copy from your system. The views expressed are those of the sender and not necessarily those of Evadon. Please note that whilst we scan all e-mails for viruses we cannot guarantee that any e-mail is virus-free. Please be advised that we expressly reserve the right to monitor email content for the purposes of ensuring compliance with legal requirements and company policies and your sending to, or receiving from, us of any email constitutes your agreement to these terms.
Evadon Dynamics Limited, registered in England No. 09494097. Registered Office: Electric Works, Sheffield Digital Campus, 3 Concourse Way, Sheffield, S1 2BJ
Ok, I've figured out how to run the job manually. And here's the error I'm getting (list name and domain has been changed to <listname> and <domain>.com for security reasons):
From within mailman-web container:
bash-4.4# python3 manage.py runjob sync_mailman
ERROR OCCURED IN JOB: sync_mailman (APP: None) START TRACEBACK: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute return self.cursor.execute(sql, params) psycopg2.IntegrityError: null value in column "description" violates not-null constraint DETAIL: Failing row contains (4, <listname>@<domain>.com, <LISTNAME>, null, [<LISTNAME>] , 1, 2019-03-12 10:23:20.293675+00, <listname>.<domain>.com).
The above exception was the direct cause of the following exception:
Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/django_extensions/management/commands/runjob.py", line 35, in runjob job().execute() File "/usr/lib/python3.6/site-packages/hyperkitty/jobs/sync_mailman.py", line 35, in execute sync_with_mailman() File "/usr/lib/python3.6/site-packages/hyperkitty/lib/mailman.py", line 131, in sync_with_mailman mlist.update_from_mailman() File "/usr/lib/python3.6/site-packages/hyperkitty/models/mailinglist.py", line 192, in update_from_mailman self.save() File "/usr/lib/python3.6/site-packages/django/db/models/base.py", line 718, in save force_update=force_update, update_fields=update_fields) File "/usr/lib/python3.6/site-packages/django/db/models/base.py", line 748, in save_base updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields) File "/usr/lib/python3.6/site-packages/django/db/models/base.py", line 812, in _save_table forced_update) File "/usr/lib/python3.6/site-packages/django/db/models/base.py", line 861, in _do_update return filtered._update(values) > 0 File "/usr/lib/python3.6/site-packages/django/db/models/query.py", line 712, in _update return query.get_compiler(self.db).execute_sql(CURSOR) File "/usr/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1383, in execute_sql cursor = super().execute_sql(result_type) File "/usr/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1065, in execute_sql cursor.execute(sql, params) File "/usr/lib/python3.6/site-packages/django/db/backends/utils.py", line 68, in execute return self._execute_with_wrappers(sql, params, many=False, executor=self._execute) File "/usr/lib/python3.6/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers return executor(sql, params, many, context) File "/usr/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute return self.cursor.execute(sql, params) File "/usr/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "/usr/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute return self.cursor.execute(sql, params) django.db.utils.IntegrityError: null value in column "description" violates not-null constraint DETAIL: Failing row contains (4, <listname>@<domain.com>, <LISTNAME>, null, [LISTNAME] , 1, 2019-03-12 10:23:20.293675+00, <listname>.<domain>.com).
END TRACEBACK
So it looks like there's a null in one of the columns.
This list was created using the Postorius interface. I had sent a couple of messages to the list while the archive attribute was set to public and then I changed it to private and sent some more test mails to it.
Hopefully this will help us find a solution to this.
Thanks
On Tue, 7 May 2019 at 10:40, Nathan Dixon <nathan.dixon@evadon.com> wrote:
I'm not sure if it's also related, but within the mailman-web and mailman-core docker containers, crontab -e only shows these entries: # do daily/weekly/monthly maintenance # min hour day month weekday command */15 * * * * run-parts /etc/periodic/15min 0 * * * * run-parts /etc/periodic/hourly 0 2 * * * run-parts /etc/periodic/daily 0 3 * * 6 run-parts /etc/periodic/weekly 0 5 1 * * run-parts /etc/periodic/monthly
And all of those folders are empty.
I'm not sure where the synchronisation task for Hyperkitty should actually being run from?
Thank you
On Tue, 7 May 2019 at 10:20, Nathan Dixon <nathan.dixon@evadon.com> wrote:
The change to the archiving policy aren't reflected in Hyperkitty after many days for all the lists.
The only error that I am seeing in the /web/mailmanweb.log is: INFO 2019-05-02 14:16:55,062 38 hyperkitty.tasks AsyncTask task "<function unlock_and_call at 0x7f5d8851f048>" with args "(<function update_from_mailman at 0x7f5d88544a60>, 'task:status:%s:%s', '<list address>')" and kwargs "{}" finished with errors.
I'm not sure if that could be related? (I have changed the actual list address to <list address> for security reasons)
Thank you
On Sat, 4 May 2019 at 16:24, Abhilash Raj <maxking@asynchronous.in> wrote:
So the issue I am seeing is that when I set a lists archive policy to prviate, it isn't reflecting that in Hyperkitty.
I am running the docker installation of Mailman, postorius and hyperkitty. So I go into the docker instance of mailman-core and run this:
python3 manage.py shell from hyperkitty.models.mailinglist import MailingList MailingList.objects.all().values_list('name', 'archive_policy')
And all my lists are showing '2', regardless of how I set the mailing
On Fri, May 3, 2019, at 8:38 AM, Nathan Dixon wrote: list
archive policy.
This might be a duplicate of
https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/3...
Am I missing something in my install? Or is this a bug?
It can take upto an hour for this change to reflect in Hyperkitty. Did you wait for that long?
This happens because Hyperkitty stores it's own data, and queries Mailman Core periodically to fetch updates every hour. In future, we might be able to do this in more realtime fashion by using an event based pub/sub model. But, we are not there yet.
Many thanks for your attention,
--
*Nathan Dixon* MEng Senior Software Architect m: +44 (0)7402 690311
t: +44 (0)20 81231252 e: nathan.dixon@evadon.com w: www.evadon.com
This e-mail and any attachments are confidential and may be protected
by
legal, professional or other privilege. If you are not the intended recipient you should not store it, copy it, re-transmit it, use it or disclose its contents, but should return it to the sender immediately and delete your copy from your system. The views expressed are those of the sender and not necessarily those of Evadon. Please note that whilst we scan all e-mails for viruses we cannot guarantee that any e-mail is virus-free. Please be advised that we expressly reserve the right to monitor email content for the purposes of ensuring compliance with legal requirements and company policies and your sending to, or receiving from, us of any email constitutes your agreement to these terms.
Evadon Dynamics Limited, registered in England No. 09494097. Registered Office: Electric Works, Sheffield Digital Campus, 3 Concourse Way, Sheffield, S1 2BJ
Mailman-users mailing list -- mailman-users@mailman3.org To unsubscribe send an email to mailman-users-leave@mailman3.org https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
-- thanks, Abhilash Raj (maxking)
Mailman-users mailing list -- mailman-users@mailman3.org To unsubscribe send an email to mailman-users-leave@mailman3.org https://lists.mailman3.org/mailman3/lists/mailman-users.mailman3.org/
--
*Nathan Dixon* MEng Senior Software Architect m: +44 (0)7402 690311
t: +44 (0)20 81231252 e: nathan.dixon@evadon.com w: www.evadon.com
This e-mail and any attachments are confidential and may be protected by legal, professional or other privilege. If you are not the intended recipient you should not store it, copy it, re-transmit it, use it or disclose its contents, but should return it to the sender immediately and delete your copy from your system. The views expressed are those of the sender and not necessarily those of Evadon. Please note that whilst we scan all e-mails for viruses we cannot guarantee that any e-mail is virus-free. Please be advised that we expressly reserve the right to monitor email content for the purposes of ensuring compliance with legal requirements and company policies and your sending to, or receiving from, us of any email constitutes your agreement to these terms.
Evadon Dynamics Limited, registered in England No. 09494097. Registered Office: Electric Works, Sheffield Digital Campus, 3 Concourse Way, Sheffield, S1 2BJ
--
*Nathan Dixon* MEng Senior Software Architect m: +44 (0)7402 690311
t: +44 (0)20 81231252 e: nathan.dixon@evadon.com w: www.evadon.com
This e-mail and any attachments are confidential and may be protected by legal, professional or other privilege. If you are not the intended recipient you should not store it, copy it, re-transmit it, use it or disclose its contents, but should return it to the sender immediately and delete your copy from your system. The views expressed are those of the sender and not necessarily those of Evadon. Please note that whilst we scan all e-mails for viruses we cannot guarantee that any e-mail is virus-free. Please be advised that we expressly reserve the right to monitor email content for the purposes of ensuring compliance with legal requirements and company policies and your sending to, or receiving from, us of any email constitutes your agreement to these terms.
Evadon Dynamics Limited, registered in England No. 09494097. Registered Office: Electric Works, Sheffield Digital Campus, 3 Concourse Way, Sheffield, S1 2BJ
--
*Nathan Dixon* MEng Senior Software Architect m: +44 (0)7402 690311
t: +44 (0)20 81231252 e: nathan.dixon@evadon.com w: www.evadon.com
This e-mail and any attachments are confidential and may be protected by legal, professional or other privilege. If you are not the intended recipient you should not store it, copy it, re-transmit it, use it or disclose its contents, but should return it to the sender immediately and delete your copy from your system. The views expressed are those of the sender and not necessarily those of Evadon. Please note that whilst we scan all e-mails for viruses we cannot guarantee that any e-mail is virus-free. Please be advised that we expressly reserve the right to monitor email content for the purposes of ensuring compliance with legal requirements and company policies and your sending to, or receiving from, us of any email constitutes your agreement to these terms.
Evadon Dynamics Limited, registered in England No. 09494097. Registered Office: Electric Works, Sheffield Digital Campus, 3 Concourse Way, Sheffield, S1 2BJ
Nathan Dixon writes:
Am I missing something in my install? Or is this a bug?
One of us will get to it specifically "soon" (we're all at PyCon YEAH! so not paying much attention BOO!)
Right now I HAVE SOMETHING I WANT TO SAY TO YOU ALL:
Sprints are coming up! This is your chance to report bugs and maybe get something done quickly. (Not all bugs get fixed quickly, sorree. But this is the best chance ) RFEs are welcome, too.
What's a bug? Well, if you're sure it's NOT a bug, don't report it, post to this mailing list and get help on what you can do to make your life better. That's the best way, because some of the users are smarter and more experienced and more available than the developers.
If you're pretty sure it is a bug, report it at https://gitlab.com/mailman/mailman/issues https://gitlab.com/mailman/postorius/issues https://gitlab.com/mailman/hyperkitty/issues Do your best but don't get too frantic about picking the right one. We can move (close and re-report on the correct component) issues.
If it's somewhere in the middle, do both! First, report on the issue tracker so you can cite it in the mailing list post. Then post to the mailing list because it might not be a bug, and the logic above applies.
If you've got the time, Google for "howto report bugs". It is time well-invested, because the more useful information you provide up front, the faster we can diagnose the harder bugs, and thus the faster we can fix them or provide a workaround. Again, don't get frantic about it, we'll ask for more information if we need it. And yes, I should ensure there's a HOWTO-BUG on the sites with both generic advice and common Mailman requirements for diagnosing bugs.
Steve
-- Associate Professor Division of Policy and Planning Science http://turnbull.sk.tsukuba.ac.jp/ Faculty of Systems and Information Email: turnbull@sk.tsukuba.ac.jp University of Tsukuba Tel: 029-853-5175 Tennodai 1-1-1, Tsukuba 305-8573 JAPAN
participants (3)
-
Abhilash Raj
-
Nathan Dixon
-
Stephen J. Turnbull