the scheduler installs itself silently now on startup, if it has not

been installed before
This commit is contained in:
maroy 2005-04-06 11:26:38 +00:00
parent 401ac3ab9a
commit 61895eff7f
11 changed files with 234 additions and 29 deletions

View file

@ -22,7 +22,7 @@
Author : $Author: maroy $ Author : $Author: maroy $
Version : $Revision: 1.1 $ Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/Installable.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/modules/core/include/LiveSupport/Core/Installable.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -83,7 +83,7 @@ namespace Core {
* facilities. * facilities.
* *
* @author $Author: maroy $ * @author $Author: maroy $
* @version $Revision: 1.1 $ * @version $Revision: 1.2 $
*/ */
class Installable class Installable
{ {
@ -100,6 +100,17 @@ class Installable
install(void) throw (std::exception) install(void) throw (std::exception)
= 0; = 0;
/**
* Check to see if the component has already been installed.
*
* @return true if the component is properly installed,
* false otherwise
* @exception std::exception on generic problems
*/
virtual bool
isInstalled(void) throw (std::exception)
= 0;
/** /**
* Uninstall the component. * Uninstall the component.
* Removes all the resources created in the install step. * Removes all the resources created in the install step.

View file

@ -21,8 +21,8 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author : $Author: fgerlits $ Author : $Author: maroy $
Version : $Revision: 1.1 $ Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PlayLogFactory.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PlayLogFactory.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -129,6 +129,20 @@ PlayLogFactory :: install(void) throw (std::exception)
} }
/*------------------------------------------------------------------------------
* Check to see if the factory has already been installed.
*----------------------------------------------------------------------------*/
bool
PlayLogFactory :: isInstalled(void) throw (std::exception)
{
if (!playLog) {
throw std::logic_error("PlayLogFactory not yet configured");
}
return playLog->isInstalled();
}
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
* Uninstall the play log factory. * Uninstall the play log factory.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/

View file

@ -21,8 +21,8 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author : $Author: fgerlits $ Author : $Author: maroy $
Version : $Revision: 1.1 $ Version : $Revision: 1.2 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PlayLogFactory.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PlayLogFactory.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -85,8 +85,8 @@ using namespace LiveSupport::Core;
* For details on the <postgreslPlayLog> element, see the * For details on the <postgreslPlayLog> element, see the
* PostgresqlPlayLog documentation. * PostgresqlPlayLog documentation.
* *
* @author $Author: fgerlits $ * @author $Author: maroy $
* @version $Revision: 1.1 $ * @version $Revision: 1.2 $
* @see PostgresqlPlayLog * @see PostgresqlPlayLog
*/ */
class PlayLogFactory : virtual public Configurable, class PlayLogFactory : virtual public Configurable,
@ -171,6 +171,16 @@ class PlayLogFactory : virtual public Configurable,
virtual void virtual void
install(void) throw (std::exception); install(void) throw (std::exception);
/**
* Check to see if the component has already been installed.
*
* @return true if the component is properly installed,
* false otherwise
* @exception std::exception on generic problems
*/
virtual bool
isInstalled(void) throw (std::exception);
/** /**
* Uninstall the component. * Uninstall the component.
* Removes all the resources created in the install step. * Removes all the resources created in the install step.

View file

@ -22,7 +22,7 @@
Author : $Author: maroy $ Author : $Author: maroy $
Version : $Revision: 1.6 $ Version : $Revision: 1.7 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PostgresqlPlayLog.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PostgresqlPlayLog.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -126,6 +126,7 @@ PostgresqlPlayLog :: configure(const xmlpp::Element & element)
void void
PostgresqlPlayLog :: install(void) throw (std::exception) PostgresqlPlayLog :: install(void) throw (std::exception)
{ {
if (!isInstalled()) {
Ptr<Connection>::Ref conn; Ptr<Connection>::Ref conn;
try { try {
conn = cm->getConnection(); conn = cm->getConnection();
@ -138,6 +139,54 @@ PostgresqlPlayLog :: install(void) throw (std::exception)
} }
throw std::logic_error(e.what()); throw std::logic_error(e.what());
} }
}
}
/*------------------------------------------------------------------------------
* Check to see if the PostgresqlPlayLog has already been installed.
*----------------------------------------------------------------------------*/
bool
PostgresqlPlayLog :: isInstalled(void) throw (std::exception)
{
Ptr<Connection>::Ref conn;
try {
Ptr<Statement>::Ref stmt;
ResultSet * res;
conn = cm->getConnection();
// see if we can connect at all
stmt.reset(conn->createStatement());
stmt->execute("SELECT 1");
res = stmt->getResultSet();
if (!res->next() || (res->getInt(1) != 1)) {
throw std::runtime_error("Can't connect to database");
}
// see if the schedule table exists
try {
stmt.reset(conn->createStatement());
stmt->execute("SELECT COUNT(*) FROM playLog");
res = stmt->getResultSet();
if (!res->next() || (res->getInt(1) < 0)) {
cm->returnConnection(conn);
return false;
}
} catch (std::exception &e) {
cm->returnConnection(conn);
return false;
}
cm->returnConnection(conn);
} catch (std::exception &e) {
if (conn) {
cm->returnConnection(conn);
}
throw;
}
return true;
} }

View file

@ -21,8 +21,8 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author : $Author: fgerlits $ Author : $Author: maroy $
Version : $Revision: 1.3 $ Version : $Revision: 1.4 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PostgresqlPlayLog.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PostgresqlPlayLog.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -80,8 +80,8 @@ using namespace LiveSupport::Core;
* &lt;!ELEMENT postgresqlPlayLog EMPTY &gt; * &lt;!ELEMENT postgresqlPlayLog EMPTY &gt;
* </code></pre> * </code></pre>
* *
* @author $Author: fgerlits $ * @author $Author: maroy $
* @version $Revision: 1.3 $ * @version $Revision: 1.4 $
*/ */
class PostgresqlPlayLog : public Configurable, class PostgresqlPlayLog : public Configurable,
public PlayLogInterface public PlayLogInterface
@ -186,6 +186,16 @@ class PostgresqlPlayLog : public Configurable,
virtual void virtual void
install(void) throw (std::exception); install(void) throw (std::exception);
/**
* Check to see if the component has already been installed.
*
* @return true if the component is properly installed,
* false otherwise
* @exception std::exception on generic problems
*/
virtual bool
isInstalled(void) throw (std::exception);
/** /**
* Uninstall the component. * Uninstall the component.
* Removes all the resources created in the install step. * Removes all the resources created in the install step.

View file

@ -22,7 +22,7 @@
Author : $Author: maroy $ Author : $Author: maroy $
Version : $Revision: 1.11 $ Version : $Revision: 1.12 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PostgresqlSchedule.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PostgresqlSchedule.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -178,6 +178,7 @@ PostgresqlSchedule :: configure(const xmlpp::Element & element)
void void
PostgresqlSchedule :: install(void) throw (std::exception) PostgresqlSchedule :: install(void) throw (std::exception)
{ {
if (!isInstalled()) {
Ptr<Connection>::Ref conn; Ptr<Connection>::Ref conn;
try { try {
conn = cm->getConnection(); conn = cm->getConnection();
@ -190,6 +191,54 @@ PostgresqlSchedule :: install(void) throw (std::exception)
} }
throw; throw;
} }
}
}
/*------------------------------------------------------------------------------
* Check to see if the PostgresqlSchedule has already been installed.
*----------------------------------------------------------------------------*/
bool
PostgresqlSchedule :: isInstalled(void) throw (std::exception)
{
Ptr<Connection>::Ref conn;
try {
Ptr<Statement>::Ref stmt;
ResultSet * res;
conn = cm->getConnection();
// see if we can connect at all
stmt.reset(conn->createStatement());
stmt->execute("SELECT 1");
res = stmt->getResultSet();
if (!res->next() || (res->getInt(1) != 1)) {
throw std::runtime_error("Can't connect to database");
}
// see if the schedule table exists
try {
stmt.reset(conn->createStatement());
stmt->execute("SELECT COUNT(*) FROM schedule");
res = stmt->getResultSet();
if (!res->next() || (res->getInt(1) < 0)) {
return false;
cm->returnConnection(conn);
}
} catch (std::exception &e) {
cm->returnConnection(conn);
return false;
}
cm->returnConnection(conn);
} catch (std::exception &e) {
if (conn) {
cm->returnConnection(conn);
}
throw;
}
return true;
} }

View file

@ -21,8 +21,8 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Author : $Author: fgerlits $ Author : $Author: maroy $
Version : $Revision: 1.7 $ Version : $Revision: 1.8 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PostgresqlSchedule.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/PostgresqlSchedule.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -80,8 +80,8 @@ using namespace LiveSupport::Core;
* &lt;!ELEMENT postgresqlSchedule EMPTY &gt; * &lt;!ELEMENT postgresqlSchedule EMPTY &gt;
* </code></pre> * </code></pre>
* *
* @author $Author: fgerlits $ * @author $Author: maroy $
* @version $Revision: 1.7 $ * @version $Revision: 1.8 $
*/ */
class PostgresqlSchedule : public Configurable, class PostgresqlSchedule : public Configurable,
public ScheduleInterface public ScheduleInterface
@ -217,6 +217,16 @@ class PostgresqlSchedule : public Configurable,
virtual void virtual void
install(void) throw (std::exception); install(void) throw (std::exception);
/**
* Check to see if the component has already been installed.
*
* @return true if the component is properly installed,
* false otherwise
* @exception std::exception on generic problems
*/
virtual bool
isInstalled(void) throw (std::exception);
/** /**
* Uninstall the component. * Uninstall the component.
* Removes all the resources created in the install step. * Removes all the resources created in the install step.

View file

@ -22,7 +22,7 @@
Author : $Author: maroy $ Author : $Author: maroy $
Version : $Revision: 1.2 $ Version : $Revision: 1.3 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/ScheduleFactory.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/ScheduleFactory.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -129,6 +129,20 @@ ScheduleFactory :: install(void) throw (std::exception)
} }
/*------------------------------------------------------------------------------
* Check to see if the schedule factory has already been installed.
*----------------------------------------------------------------------------*/
bool
ScheduleFactory :: isInstalled(void) throw (std::exception)
{
if (!schedule) {
throw std::logic_error("ScheduleFactory not yet configured");
}
return schedule->isInstalled();
}
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
* Install the schedule factory. * Install the schedule factory.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/

View file

@ -22,7 +22,7 @@
Author : $Author: maroy $ Author : $Author: maroy $
Version : $Revision: 1.2 $ Version : $Revision: 1.3 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/ScheduleFactory.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/ScheduleFactory.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -86,7 +86,7 @@ using namespace LiveSupport::Core;
* PostgresqlSchedule documentation. * PostgresqlSchedule documentation.
* *
* @author $Author: maroy $ * @author $Author: maroy $
* @version $Revision: 1.2 $ * @version $Revision: 1.3 $
* @see PostgresqlSchedule * @see PostgresqlSchedule
*/ */
class ScheduleFactory : virtual public Configurable, class ScheduleFactory : virtual public Configurable,
@ -171,6 +171,16 @@ class ScheduleFactory : virtual public Configurable,
virtual void virtual void
install(void) throw (std::exception); install(void) throw (std::exception);
/**
* Check to see if the component has already been installed.
*
* @return true if the component is properly installed,
* false otherwise
* @exception std::exception on generic problems
*/
virtual bool
isInstalled(void) throw (std::exception);
/** /**
* Uninstall the component. * Uninstall the component.
* Removes all the resources created in the install step. * Removes all the resources created in the install step.

View file

@ -22,7 +22,7 @@
Author : $Author: maroy $ Author : $Author: maroy $
Version : $Revision: 1.24 $ Version : $Revision: 1.25 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/SchedulerDaemon.cxx,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/SchedulerDaemon.cxx,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -343,6 +343,20 @@ SchedulerDaemon :: install(void) throw (std::exception)
} }
/*------------------------------------------------------------------------------
* Check to see if the scheduler has been installed.
*----------------------------------------------------------------------------*/
bool
SchedulerDaemon :: isInstalled(void) throw (std::exception)
{
// TODO: check if we have already been configured
Ptr<ScheduleFactory>::Ref sf = ScheduleFactory::getInstance();
Ptr<PlayLogFactory>::Ref plf = PlayLogFactory::getInstance();
return sf->isInstalled() && plf->isInstalled();
}
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
* Install the scheduler daemon. * Install the scheduler daemon.
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
@ -368,6 +382,10 @@ SchedulerDaemon :: uninstall(void) throw (std::exception)
void void
SchedulerDaemon :: startup (void) throw () SchedulerDaemon :: startup (void) throw ()
{ {
if (!isInstalled()) {
install();
}
try { try {
sessionId = authentication->login(login, password); sessionId = authentication->login(login, password);
} catch (XmlRpcException &e) { } catch (XmlRpcException &e) {

View file

@ -22,7 +22,7 @@
Author : $Author: maroy $ Author : $Author: maroy $
Version : $Revision: 1.18 $ Version : $Revision: 1.19 $
Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/SchedulerDaemon.h,v $ Location : $Source: /home/paul/cvs2svn-livesupport/newcvsrepo/livesupport/products/scheduler/src/SchedulerDaemon.h,v $
------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------*/
@ -162,7 +162,7 @@ using namespace LiveSupport::PlaylistExecutor;
* </code></pre> * </code></pre>
* *
* @author $Author: maroy $ * @author $Author: maroy $
* @version $Revision: 1.18 $ * @version $Revision: 1.19 $
* @see ConnectionManagerFactory * @see ConnectionManagerFactory
* @see AuthenticationClientFactory * @see AuthenticationClientFactory
* @see StorageClientFactory * @see StorageClientFactory
@ -400,6 +400,16 @@ class SchedulerDaemon : public Installable,
virtual void virtual void
install(void) throw (std::exception); install(void) throw (std::exception);
/**
* Check to see if the component has already been installed.
*
* @return true if the component is properly installed,
* false otherwise
* @exception std::exception on generic problems
*/
virtual bool
isInstalled(void) throw (std::exception);
/** /**
* Uninstall the component. * Uninstall the component.
* Removes all the resources created in the install step. * Removes all the resources created in the install step.