Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: DAViCal: General

update problem, need help

 

 

DAViCal general RSS feed   Index | Next | Previous | View Threaded


kreuzhuber at jbk-net

Sep 16, 2011, 4:26 AM

Post #1 of 6 (469 views)
Permalink
update problem, need help

Using database: davical_dba%@dbi:Pg:dbname=davical
The database is version 8.4 currently at revision 1.2.9.
Looking at patches[0] (1.1.2.sql)
Patch 1.1.2.sql has already been applied.
Looking at patches[1] (1.1.3.sql)
Patch 1.1.3.sql has already been applied.
Looking at patches[2] (1.1.4.sql)
Patch 1.1.4.sql has already been applied.
Looking at patches[3] (1.1.5.sql)
Patch 1.1.5.sql has already been applied.
Looking at patches[4] (1.1.6.sql)
Patch 1.1.6.sql has already been applied.
Looking at patches[5] (1.1.7.sql)
Patch 1.1.7.sql has already been applied.
Looking at patches[6] (1.1.8.sql)
Patch 1.1.8.sql has already been applied.
Looking at patches[7] (1.1.9.sql)
Patch 1.1.9.sql has already been applied.
Looking at patches[8] (1.1.10.sql)
Patch 1.1.10.sql has already been applied.
Looking at patches[9] (1.1.11.sql)
Patch 1.1.11.sql has already been applied.
Looking at patches[10] (1.1.11a.sql)
Patch 1.1.11a.sql has already been applied.
Looking at patches[11] (1.1.12.sql)
Patch 1.1.12.sql has already been applied.
Looking at patches[12] (1.1.12a.sql)
Patch 1.1.12a.sql has already been applied.
Looking at patches[13] (1.2.1.sql)
Patch 1.2.1.sql has already been applied.
Looking at patches[14] (1.2.1a.sql)
Patch 1.2.1a.sql has already been applied.
Looking at patches[15] (1.2.1b.sql)
Patch 1.2.1b.sql has already been applied.
Looking at patches[16] (1.2.2.sql)
Patch 1.2.2.sql has already been applied.
Looking at patches[17] (1.2.3.sql)
Patch 1.2.3.sql has already been applied.
Looking at patches[18] (1.2.3a.sql)
Patch 1.2.3a.sql has already been applied.
Looking at patches[19] (1.2.4.sql)
Patch 1.2.4.sql has already been applied.
Looking at patches[20] (1.2.5.sql)
Patch 1.2.5.sql has already been applied.
Looking at patches[21] (1.2.6.sql)
Patch 1.2.6.sql has already been applied.
Looking at patches[22] (1.2.7.sql)
Patch 1.2.7.sql has already been applied.
Looking at patches[23] (1.2.8.sql)
Patch 1.2.8.sql has already been applied.
Looking at patches[24] (1.2.9.sql)
Patch 1.2.9.sql has already been applied.
Looking at patches[25] (1.2.10.sql)
Applying patch 1.2.10.sql ... Failed to apply revision 1.2.10.sql to the database!
failed!
psql:/usr/share/davical/dba/patches/1.2.10.sql:8: ERROR: constraint "unique_user" of relation "principal" does not exist
psql:/usr/share/davical/dba/patches/1.2.10.sql:9: ERROR: constraint "unique_path" of relation "collection" does not exist
psql:/usr/share/davical/dba/patches/1.2.10.sql:37: ERROR: Database has not been upgraded to 1.2.9
psql:/usr/share/davical/dba/patches/1.2.10.sql:39: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:/usr/share/davical/dba/patches/1.2.10.sql:42: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:/usr/share/davical/dba/patches/1.2.10.sql:43: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:/usr/share/davical/dba/patches/1.2.10.sql:45: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:/usr/share/davical/dba/patches/1.2.10.sql:51: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:/usr/share/davical/dba/patches/1.2.10.sql:53: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:/usr/share/davical/dba/patches/1.2.10.sql:55: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:/usr/share/davical/dba/patches/1.2.10.sql:58: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:/usr/share/davical/dba/patches/1.2.10.sql:61: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:/usr/share/davical/dba/patches/1.2.10.sql:62: ERROR: current transaction is aborted, commands ignored until end of transaction block
psql:/usr/share/davical/dba/patches/1.2.10.sql:64: ERROR: current transaction is aborted, commands ignored until end of transaction block
there is no transaction in progress
==> No further patches will be attempted!
No patches were applied.
Supported locales updated.
Updated view: dav_principal.sql applied.
CalDAV functions updated.
RRULE functions updated.
GRANT SELECT,INSERT,UPDATE,DELETE on collection to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on caldav_data to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on calendar_item to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on relationship to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on locks to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on property to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on freebusy_ticket to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on usr to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on usr_setting to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on roles to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on role_member to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on session to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on tmp_password to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on group_member to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on principal to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on relationship_type to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on sync_tokens to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on sync_changes to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on grants to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on dav_principal to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on access_ticket to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on dav_binding to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on calendar_alarm to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on calendar_attendee to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on addressbook_resource to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on addressbook_address_adr to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on addressbook_address_tel to davical_app
GRANT SELECT,INSERT,UPDATE,DELETE on addressbook_address_email to davical_app
GRANT SELECT,UPDATE on relationship_type_rt_id_seq to davical_app
GRANT SELECT,UPDATE on dav_id_seq to davical_app
GRANT SELECT,UPDATE on usr_user_no_seq to davical_app
GRANT SELECT,UPDATE on roles_role_no_seq to davical_app
GRANT SELECT,UPDATE on session_session_id_seq to davical_app
GRANT SELECT,UPDATE on principal_type_principal_type_id_seq to davical_app
GRANT SELECT,UPDATE on sync_tokens_sync_token_seq to davical_app
GRANT SELECT,INSERT on time_zone to davical_app
GRANT SELECT on supported_locales to davical_app
GRANT SELECT on awl_db_revision to davical_app
GRANT SELECT on principal_type to davical_app
Database permissions updated.


mfg



Ing. Johannes Kreuzhuber
Kellergasse 17
7093 Jois
Austria
www.jbk-net.com
kreuzhuber [at] jbk-net
+436763388896


andrew at morphoss

Sep 16, 2011, 8:37 PM

Post #2 of 6 (443 views)
Permalink
Re: update problem, need help [In reply to]

hi Johannes,

Thanks for this note. I've seen a few upgrades that went this way but
never actually got to understand why :-)

Can you run a couple of queries for me so I can work out why, and try
and fix the actual problem?

You'll need to do the following, first start psql:

psql -U davical_dba davical


First, this line should dump the structure of the awl_db_revision table:

\d awl_db_revision


Then this query (line breaks should not affect it) which is what the
upgrade script is actually running and should help me identify the
error:

SELECT COUNT(*) INTO matching FROM awl_db_revision WHERE (schema_major =
major AND schema_minor = minor AND schema_patch > patch) OR
(schema_major = major AND schema_minor > minor) OR (schema_major >
major);


Finally this query should dump all the rows:

SELECT * FROM awl_db_revision;

then send me the output from those two queries.



Finally, to fix the problem:

DELETE FROM awl_db_revision;

should delete all the existing rows, and:

SELECT new_db_revision(1,2,9, 'Octobre' );

should put a single correct row in there.

After that you should be able to re-run the update script and have it
complete correctly.


No need to send that all to the list - just e-mail it to me directly.

Regards,
Andrew McMillan.


On Fri, 2011-09-16 at 13:26 +0200, Johannes Kreuzhuber wrote:
> Using database: davical_dba%@dbi:Pg:dbname=davical
> The database is version 8.4 currently at revision 1.2.9.
> Looking at patches[0] (1.1.2.sql)
> Patch 1.1.2.sql has already been applied.
> Looking at patches[1] (1.1.3.sql)
> Patch 1.1.3.sql has already been applied.
> Looking at patches[2] (1.1.4.sql)
> Patch 1.1.4.sql has already been applied.
> Looking at patches[3] (1.1.5.sql)
> Patch 1.1.5.sql has already been applied.
> Looking at patches[4] (1.1.6.sql)
> Patch 1.1.6.sql has already been applied.
> Looking at patches[5] (1.1.7.sql)
> Patch 1.1.7.sql has already been applied.
> Looking at patches[6] (1.1.8.sql)
> Patch 1.1.8.sql has already been applied.
> Looking at patches[7] (1.1.9.sql)
> Patch 1.1.9.sql has already been applied.
> Looking at patches[8] (1.1.10.sql)
> Patch 1.1.10.sql has already been applied.
> Looking at patches[9] (1.1.11.sql)
> Patch 1.1.11.sql has already been applied.
> Looking at patches[10] (1.1.11a.sql)
> Patch 1.1.11a.sql has already been applied.
> Looking at patches[11] (1.1.12.sql)
> Patch 1.1.12.sql has already been applied.
> Looking at patches[12] (1.1.12a.sql)
> Patch 1.1.12a.sql has already been applied.
> Looking at patches[13] (1.2.1.sql)
> Patch 1.2.1.sql has already been applied.
> Looking at patches[14] (1.2.1a.sql)
> Patch 1.2.1a.sql has already been applied.
> Looking at patches[15] (1.2.1b.sql)
> Patch 1.2.1b.sql has already been applied.
> Looking at patches[16] (1.2.2.sql)
> Patch 1.2.2.sql has already been applied.
> Looking at patches[17] (1.2.3.sql)
> Patch 1.2.3.sql has already been applied.
> Looking at patches[18] (1.2.3a.sql)
> Patch 1.2.3a.sql has already been applied.
> Looking at patches[19] (1.2.4.sql)
> Patch 1.2.4.sql has already been applied.
> Looking at patches[20] (1.2.5.sql)
> Patch 1.2.5.sql has already been applied.
> Looking at patches[21] (1.2.6.sql)
> Patch 1.2.6.sql has already been applied.
> Looking at patches[22] (1.2.7.sql)
> Patch 1.2.7.sql has already been applied.
> Looking at patches[23] (1.2.8.sql)
> Patch 1.2.8.sql has already been applied.
> Looking at patches[24] (1.2.9.sql)
> Patch 1.2.9.sql has already been applied.
> Looking at patches[25] (1.2.10.sql)
> Applying patch 1.2.10.sql ... Failed to apply revision 1.2.10.sql to
> the database!
> failed!
> psql:/usr/share/davical/dba/patches/1.2.10.sql:8: ERROR: constraint
> "unique_user" of relation "principal" does not exist
> psql:/usr/share/davical/dba/patches/1.2.10.sql:9: ERROR: constraint
> "unique_path" of relation "collection" does not exist
> psql:/usr/share/davical/dba/patches/1.2.10.sql:37: ERROR: Database
> has not been upgraded to 1.2.9
> psql:/usr/share/davical/dba/patches/1.2.10.sql:39: ERROR: current
> transaction is aborted, commands ignored until end of transaction
> block
> psql:/usr/share/davical/dba/patches/1.2.10.sql:42: ERROR: current
> transaction is aborted, commands ignored until end of transaction
> block
> psql:/usr/share/davical/dba/patches/1.2.10.sql:43: ERROR: current
> transaction is aborted, commands ignored until end of transaction
> block
> psql:/usr/share/davical/dba/patches/1.2.10.sql:45: ERROR: current
> transaction is aborted, commands ignored until end of transaction
> block
> psql:/usr/share/davical/dba/patches/1.2.10.sql:51: ERROR: current
> transaction is aborted, commands ignored until end of transaction
> block
> psql:/usr/share/davical/dba/patches/1.2.10.sql:53: ERROR: current
> transaction is aborted, commands ignored until end of transaction
> block
> psql:/usr/share/davical/dba/patches/1.2.10.sql:55: ERROR: current
> transaction is aborted, commands ignored until end of transaction
> block
> psql:/usr/share/davical/dba/patches/1.2.10.sql:58: ERROR: current
> transaction is aborted, commands ignored until end of transaction
> block
> psql:/usr/share/davical/dba/patches/1.2.10.sql:61: ERROR: current
> transaction is aborted, commands ignored until end of transaction
> block
> psql:/usr/share/davical/dba/patches/1.2.10.sql:62: ERROR: current
> transaction is aborted, commands ignored until end of transaction
> block
> psql:/usr/share/davical/dba/patches/1.2.10.sql:64: ERROR: current
> transaction is aborted, commands ignored until end of transaction
> block
> there is no transaction in progress
> ==> No further patches will be attempted!
> No patches were applied.
> Supported locales updated.
> Updated view: dav_principal.sql applied.
> CalDAV functions updated.
> RRULE functions updated.
> GRANT SELECT,INSERT,UPDATE,DELETE on collection to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on caldav_data to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on calendar_item to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on relationship to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on locks to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on property to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on freebusy_ticket to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on usr to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on usr_setting to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on roles to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on role_member to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on session to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on tmp_password to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on group_member to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on principal to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on relationship_type to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on sync_tokens to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on sync_changes to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on grants to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on dav_principal to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on access_ticket to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on dav_binding to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on calendar_alarm to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on calendar_attendee to davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on addressbook_resource to
> davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on addressbook_address_adr to
> davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on addressbook_address_tel to
> davical_app
> GRANT SELECT,INSERT,UPDATE,DELETE on addressbook_address_email to
> davical_app
> GRANT SELECT,UPDATE on relationship_type_rt_id_seq to davical_app
> GRANT SELECT,UPDATE on dav_id_seq to davical_app
> GRANT SELECT,UPDATE on usr_user_no_seq to davical_app
> GRANT SELECT,UPDATE on roles_role_no_seq to davical_app
> GRANT SELECT,UPDATE on session_session_id_seq to davical_app
> GRANT SELECT,UPDATE on principal_type_principal_type_id_seq to
> davical_app
> GRANT SELECT,UPDATE on sync_tokens_sync_token_seq to davical_app
> GRANT SELECT,INSERT on time_zone to davical_app
> GRANT SELECT on supported_locales to davical_app
> GRANT SELECT on awl_db_revision to davical_app
> GRANT SELECT on principal_type to davical_app
> Database permissions updated.
>
>
>
>
> mfg
>
>
>
> Ing. Johannes Kreuzhuber
> Kellergasse 17
> 7093 Jois
> Austria
> www.jbk-net.com
> kreuzhuber [at] jbk-net
> +436763388896
>
> ------------------------------------------------------------------------------
> BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA
> http://p.sf.net/sfu/rim-devcon-copy2
> _______________________________________________ Davical-general mailing list Davical-general [at] lists https://lists.sourceforge.net/lists/listinfo/davical-general

--
------------------------------------------------------------------------
andrew (AT) morphoss (DOT) com +64(272)DEBIAN
Don't engineer in a crisis. -- Vint Cerf speaking on IPv6
------------------------------------------------------------------------
Attachments: signature.asc (0.82 KB)


andrew at morphoss

Sep 16, 2011, 10:35 PM

Post #3 of 6 (441 views)
Permalink
Re: update problem, need help [In reply to]

On Sat, 2011-09-17 at 15:37 +1200, Andrew McMillan wrote:
> hi Johannes,
>
> Thanks for this note. I've seen a few upgrades that went this way but
> never actually got to understand why :-)
>
> Can you run a couple of queries for me so I can work out why, and try
> and fix the actual problem?
>
> You'll need to do the following, first start psql:
>
> psql -U davical_dba davical
>
>
> First, this line should dump the structure of the awl_db_revision table:
>
> \d awl_db_revision
>
>
> Then this query (line breaks should not affect it) which is what the
> upgrade script is actually running and should help me identify the
> error:
>
> SELECT COUNT(*) INTO matching FROM awl_db_revision WHERE (schema_major =
> major AND schema_minor = minor AND schema_patch > patch) OR
> (schema_major = major AND schema_minor > minor) OR (schema_major >
> major);

Which would ideally have been:

SELECT * FROM awl_db_revision WHERE (schema_major = 1 AND
schema_minor = 2 AND schema_patch > 9) OR (schema_major = 1 AND
schema_minor > 2) OR (schema_major > 1);


> Finally this query should dump all the rows:
>
> SELECT * FROM awl_db_revision;
>
> then send me the output from those two queries.

So if anyone else sees this problem upgrading to 0.9.9.5 perhaps they
can send me the details before applying the fix...

Cheers,
Andrew.

>
>
> Finally, to fix the problem:
>
> DELETE FROM awl_db_revision;
>
> should delete all the existing rows, and:
>
> SELECT new_db_revision(1,2,9, 'Octobre' );
>
> should put a single correct row in there.
>
> After that you should be able to re-run the update script and have it
> complete correctly.


--
------------------------------------------------------------------------
andrew (AT) morphoss (DOT) com +64(272)DEBIAN
Waste not fresh tears over old griefs.
-- Euripides
------------------------------------------------------------------------
Attachments: signature.asc (0.82 KB)


mir at datanom

Sep 17, 2011, 12:46 AM

Post #4 of 6 (447 views)
Permalink
Re: update problem, need help [In reply to]

Hi Andrew,

On Sat, 17 Sep 2011 15:37:17 +1200
Andrew McMillan <andrew [at] morphoss> wrote:

> Thanks for this note. I've seen a few upgrades that went this way but
> never actually got to understand why :-)
>
The specified problems is typical if you have run DDL commands on the
database with different users. This means that different objects will
have different owners. The typical situation is when some changes have
been made by a user with no restrictions and later on trying to make
changes by a restricted user on the same or some of the objects.

--
Hilsen/Regards
Michael Rasmussen

Get my public GnuPG keys:
michael <at> rasmussen <dot> cc
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xD3C9A00E
mir <at> datanom <dot> net
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE501F51C
mir <at> miras <dot> org
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
--------------------------------------------------------------
Attachments: signature.asc (0.19 KB)


andrew at morphoss

Sep 17, 2011, 7:32 PM

Post #5 of 6 (443 views)
Permalink
Re: update problem, need help [In reply to]

On Sat, 2011-09-17 at 09:46 +0200, Michael Rasmussen wrote:
> Hi Andrew,
>
> On Sat, 17 Sep 2011 15:37:17 +1200
> Andrew McMillan <andrew [at] morphoss> wrote:
>
> > Thanks for this note. I've seen a few upgrades that went this way but
> > never actually got to understand why :-)
> >
> The specified problems is typical if you have run DDL commands on the
> database with different users. This means that different objects will
> have different owners. The typical situation is when some changes have
> been made by a user with no restrictions and later on trying to make
> changes by a restricted user on the same or some of the objects.

Is it, though? The problem in this case was that the upgrade process
first saw that 1.2.9 had been applied (in the Perl code), and then
immediately afterwards it failed (in the SQL code) because it hadn't
been applied. Which smells a lot like a bug in the actual SQL function
detecting whether a particular DB patch has been applied.

I've seen the problem you're speaking of, but I don't think this one is
it. I think maybe there was a version that went out which had some
problem with this SQL function, which I believe is now fixed, but I'm
trying to work out how to smooth the path for people who have that
issue.

Cheers,
Andrew.

--
------------------------------------------------------------------------
http://andrew.mcmillan.net.nz/ Porirua, New Zealand
Twitter: _karora Phone: +64(272)DEBIAN
"I'm growing older, but not up."
-- Jimmy Buffett
------------------------------------------------------------------------
Attachments: signature.asc (0.82 KB)


andrew at morphoss

Sep 19, 2011, 2:00 PM

Post #6 of 6 (440 views)
Permalink
Re: update problem, need help [In reply to]

On Mon, 2011-09-19 at 14:36 +0200, Johannes Kreuzhuber wrote:
>
> ... lots of useful stuff ...


Thanks Johannes,

This shows that your installation has a broken version of the
check_db_revision() function. I've attached an alternative patch file
which you can drop straight into the patches directory (as named)
- /usr/share/davical/dba/patches/1.2.10a.sql - and then re-run the
upgrade.

With this file in place you should see it attempt to apply 1.2.10 and
fail, and then attempt the alternative patch, and (hopefully!) succeeed.

Regards,
Andrew McMillan.

PS. CC'd the list in case others are having this problem.
--
------------------------------------------------------------------------
http://andrew.mcmillan.net.nz/ Porirua, New Zealand
Twitter: _karora Phone: +64(272)DEBIAN
What I tell you three times is true.
-- Lewis Carroll
------------------------------------------------------------------------
Attachments: 1.2.10a.sql (3.72 KB)
  signature.asc (0.82 KB)

DAViCal general RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.